Czy HAProxy obsługuje logowanie do pliku?

14

Właśnie zainstalowałem haproxy na moim serwerze testowym.

Czy istnieje sposób zmuszenia go do zapisywania dzienników do pliku lokalnego zamiast syslog?

To jest tylko do testowania, więc nie chcę zaczynać otwierania portów / zaśmiecania syslogu wszystkimi moimi danymi testowymi.

Niestety jedyne informacje, które mogę znaleźć, dotyczą obracania się na serwerze 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 zrestartowałem. Więc utworzyłem plik touch /home/user/ha.logi zrestartowałem, w którym momencie otrzymałem:

[ALERT] 039/095055 (9593) : sendto logger #1 failed: Connection refused (errno=111)

Czy to możliwe, czy będę musiał skonfigurować syslog itp., Aby zobaczyć moje dane testowe?

IGGt
źródło
2
Nie sądzę, aby HAProxy mógł zalogować się do pliku, i podejrzewam, że powodem tego jest to, że zapis na dysk jest operacją blokującą. Dlaczego tak naprawdę nie chcesz używać syslog? Konfiguracja nie jest wcale taka trudna. Możesz przypisać lokalną funkcję do HAProxy i skonfigurować demona syslog, aby zapisywał te wpisy w innym pliku, a nie w innych plikach syslog (lub strumieniach sieciowych), jeśli nie chcesz, aby logi HAProxy nie były mieszane ze wszystkim jeszcze.
Michael - sqlbot

Odpowiedzi:

14

Haproxy po prostu nie obsługuje logowania do plików. Jak podano w dokumentacji ( https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#3.1-log ), instrukcja „log” przyjmuje jako pierwszy parametr adres. Jeśli jest to plik, jest to gniazdo unix, a HAProxy będzie mówił do tego gniazda w formacie syslog. Haproxy jest zaprojektowany w ten sposób, ponieważ odpowiada na żądania proxy, a nie na zapisywanie plików, deleguje zapis plików dziennika do syslog. Jeśli nie chcesz zadzierać z 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 W pliku haproxy.cfg, aby go przetestować.

użytkownik801247
źródło
Pojawia się komunikat „E: Nie można znaleźć logstash pakietu”. Czy logstash został usunięty z Ubuntu?
user568021,
@ user568021 wydaje się, że logstash nie jest dostępny w Ubuntu, ale elastyczny (opiekun logstash) zapewnia odpowiednie źródło. Ponadto logstash to oprogramowanie Java, więc możesz go uruchomić, pobierając plik jar uruchamiający go za pomocą środowiska JRE (dostarczanego przez ubuntu)
user801247
7

Możesz zmienić plik konfiguracyjny dziennika haproxy, /etc/rsyslog.d/aby wskazał ścieżkę do wybranej ścieżki. Nie jestem pewien co do innej dystrybucji. Dla mnie używam Debiana. Zmieniłem, /etc/rsyslog.d/49-haproxy.confaby wskazać /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 /etc/logrotate.d/haproxydo nowej ścieżki. Aby się obracał i kompresował plik dziennika w nowo skonfigurowanej ścieżce za pomocą gzip.

Następnie uruchom ponownie rsyslog.service.

sudo systemctl restart rsyslog.service

Teraz haproxy.log.*plik będzie w /var/log/haproxy/katalogu.

Fonzie
źródło
Jak utworzyć osobny dziennik dla błędów takich jak /var/log/haproxy-errors.log bez wpływu na oryginalny haproxy.log?
Khurshid Alam,
0

Próbowano skonfigurować w katalogu osobistym użytkownika, haproxy nie ma uprawnień dostępu do katalogu domowego użytkownika, więc może to powodować problemy.

Zamiast tego spróbuj w innej lokalizacji, utwórz katalog w /var/<directory>

log /var/<directory>/ha.log
KKD
źródło
2
Próbowałem sudo touch /var/log/ha.logi dodałem log /var/log/ha.log local0do mojej konfiguracji, ale otrzymałem taki sam błąd jak powyżej connection refused.
IGGt
W logu, dlaczego w końcu podajesz local0?
KKD
1
Próbowałem to pominąć, ale po ponownym uruchomieniu dostałem błąd, 'log' expects <address> and <facility> as arguments.więc potrzebowałem czegoś tam. Zgodnie z instrukcjami <facility> must be one of the 24 standard syslog facilities(które moim zdaniem mogą być częścią problemu)
IGGt