Właśnie zainstalowałem haproxy na moim serwer testowy.
Czy istnieje sposób na to, aby zapisywał swoje dzienniki do pliku lokalnego zamiast do syslog?
To jest tylko do testowania, więc nie chcę zaczynać otwierania porty / zaśmiecanie syslog wszystkimi moimi danymi testowymi.
Niestety jedyna informacja, jaką mogę znaleźć, dotyczy logowania do serwera syslog.
Próbowałem użyć:
log /home/user/ha.log local0
w mojej konfiguracji. Ale to powiedziało mi:
[ALERT] 039/095022 (9528) : sendto logger #1 failed: No such file or directory (errno=2)
Kiedy uruchomiłem ponownie. Więc utworzyłem plik za pomocą touch /home/user/ha.log
i uruchomiłem ponownie, w którym to momencie otrzymałem:
[ALERT] 039/095055 (9593) : sendto logger #1 failed: Connection refused (errno=111)
Czy to możliwe, czy czy będę musiał skonfigurować syslog itp., aby zobaczyć moje dane testowe?
Komentarze
- Nie ' Myślę, że HAProxy może zalogować się do pliku i podejrzewam, że powodem tego jest to, że zapis na dysku jest operacją blokującą. Dlaczego naprawdę nie chcesz używać syslog? Konfiguracja nie jest wcale taka trudna. Możesz przypisać lokalną funkcję do HAProxy i skonfigurować swojego demona syslog, aby zapisywał te wpisy w innym pliku, a nie w innych plikach syslog (lub strumieniach sieciowych), jeśli ' nie chcąc, aby dzienniki HAProxy nie były mieszane ze wszystkim innym.
Odpowiedź
Haproxy po prostu nie obsługuje logowanie do plików. Jak stwierdzono w dokumentacji ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log ), instrukcja „log” przyjmuje jako pierwszy parametr adres. Jeśli ten „plik jest” jest gniazdem unixowym, a HAProxy będzie mówić w formacie syslog do tego gniazda. Haproxy jest zaprojektowany w ten sposób, ponieważ odpowiada za żądania proxy, a nie zapisywanie plików, deleguje zapisywanie plików dziennika do syslog . Jeśli nie chcesz robić bałaganu ze swoim komputerem, możesz na przykład zainstalować logstash i uruchomić: logstash -e "input { unix { path => "/tmp/haprxoy_log.sock" } } output { stdout { } }"
i dodać: log /tmp/haprxoy_log.sock
In Twój haproxy.cfg, aby go przetestować.
Komentarze
- I ' pobieram ” E: Nie mogę znaleźć pliku dziennika pakietu „. Czy logstash został usunięty z Ubuntu?
- @ user568021 wygląda na to, że logstash nie jest dostępny w Ubuntu, ale elastyczny (opiekun logstash ') zapewnia apt. Ponadto logstash jest oprogramowaniem java, więc możesz go uruchomić, pobierając plik jar, uruchamiając go ze środowiskiem JRE (dostarczanym przez ubuntu)
Odpowiedź
Możesz zmienić plik konfiguracyjny dziennika haproxy w /etc/rsyslog.d/
, aby wskazać plikowi wybraną ścieżkę. Nie jestem pewien co do innej dystrybucji. Dla mnie „używam Debiana. Zmieniłem /etc/rsyslog.d/49-haproxy.conf
tak, aby wskazywał na /var/log/haproxy/haproxy.log
,
# Create an additional socket in haproxy"s chroot in order to allow logging via # /dev/log to chroot"ed HAProxy processes $AddUnixListenSocket /var/lib/haproxy/dev/log # Send HAProxy messages to a dedicated logfile if $programname startswith "haproxy" then /var/log/haproxy/haproxy.log &~
Powinieneś także zaktualizować ścieżkę dziennika w /etc/logrotate.d/haproxy
do nowej ścieżki. Aby obrócić i skompresować plik dziennika w nowo skonfigurowanej ścieżce za pomocą gzip
.
Następnie ponownie uruchom rsyslog.service.
sudo systemctl restart rsyslog.service
Teraz haproxy.log.*
będzie w katalogu /var/log/haproxy/
.
Komentarze
- Jak utworzyć osobne log w poszukiwaniu błędów, takich jak /var/log/haproxy-errors.log, bez wpływu na oryginalny haproxy.log?
Odpowiedź
Od wersji 1.9 HAProxy obsługuje logowanie do stdout
i stderr
.
Mając to na uwadze, bardzo trywialne jest potokowanie tego do pliku.
# change haproxy.cfg file with the following global log stdout local0 debug defaults log global option httplog
A potem możesz po prostu uruchomić HAProxy w ten sposób:
haproxy -f haproxy.cfg > haproxy.log 2>&1 &
Jak zapewne wiesz >
pipe stdout
do pliku haproxy.log
, a następnie 2>&1
potoki stderr
również do tego samego pliku. Kończy się na &
, który umieści proces w tle.
Możesz stać się bardziej wyszukany i spróbować skonfigurować skrypt, który zabija poprzednie wystąpienie haproxy
, wykonując coś takiego:
#!/bin/bash # mini launcher kill -9 `cat /home/user/haproxy.pid` /home/user/haproxy -f /home/haproxy.cfg > /home/user/haproxy.log 2>&1 & echo $! > /home/user/haproxy.pid
Trudne, jak pewnie możesz stwierdzić … niezalecane.
Edycja: logowanie do plików było kiedyś zdarzeniem blokującym, a zatem nie zalecane, szczególnie dla czegoś takiego jak HAProxy. Zespół HAProxy jasno dał do zrozumienia w opublikowanym poście z linkiem powyżej, że to już nie dotyczy .
Otrzymaliśmy tę prośbę całkiem sporo i spędziliśmy trochę czasu na planowaniu najlepszego sposobu jej wdrożenia – bez blokowania – iz przyjemnością informujemy, że znalazłem rozwiązanie!
Komentarze
- dlaczego loguję się do stdout / err ” niezalecane „? czy to Twoja opinia, czy też istnieje oficjalna dokumentacja na temat problemów z tym?
- @Florian, masz rację. Zmyliło mnie poprzednie zachowanie. Nie blokuje w ostatnich wydaniach, więc zdanie było opiniotwórcze (i błędne). Edytowałem odpowiedź. Dzięki!
Odpowiedź
Próbowałeś skonfigurować w katalogu domowym użytkownika, haproxy nie ma uprawnień aby uzyskać dostęp do katalogu domowego użytkownika, co powoduje problem.
Zamiast tego spróbuj w innym miejscu, utwórz katalog w /var/<directory>
log /var/<directory>/ha.log
Komentarze
- Próbowałem
sudo touch /var/log/ha.log
i dodałemlog /var/log/ha.log local0
do mojej konfiguracji, ale otrzymałem ten sam błąd, co powyżejconnection refused
. - Dlaczego w dzienniku podajesz local0 na końcu?
- Próbowałem go pominąć, ale po ponownym uruchomieniu wystąpił błąd
'log' expects <address> and <facility> as arguments.
, więc czegoś tam potrzebowałem. Zgodnie z instrukcjami<facility> must be one of the 24 standard syslog facilities
(które moim zdaniem mogą być częścią problemu)