Wiele rzeczy może się zdarzyć, gdy użytkownik ląduje na stronie internetowej. Zdarza się nawet, że żądania użytkownika nie docierają do serwera, potencjalnie dając fałszywy pozytywny sygnał, że wszystko jest w porządku. Dawno już minęły czasy, gdy witryna korzystała tylko z jednego serwera. W dzisiejszym rozproszonym świecie, istnieje wiele serwerów za load balancerem dystrybuującym obciążenie użytkownika witryny.
Więc skąd możesz wiedzieć, czy wszystko przebiega bezproblemowo między użytkownikami a serwerami? Logi emitowane przez load balancery i serwery proxy, takie jak HAProxy, dają ci inną perspektywę. Mogą one powiedzieć Ci, na przykład, ile czasu zajmują żądania użytkowników i jak wiele żądań zawodzi. Te informacje są cenne i mogą dać ci więcej wskazówek podczas rozwiązywania problemów z incydentami w żywym środowisku.
W dzisiejszym poście, dam ci krótkie wyjaśnienie jak działa logowanie w HAProxy, jak działa konfiguracja logowania, jak przetwarzać logi i jak uniknąć wyczerpania pamięci w twoich serwerach z powodu dużych rozmiarów plików logów.
Jak działa logowanie w HAProxy?
Gdy zainstalujesz HAProxy, możesz skonfigurować jak chcesz pracować z logami, które to narzędzie zapisuje. Na przykład, można skonfigurować HAProxy do wysyłania logów do różnych lokalizacji w tym samym czasie. Być może jeden zespół potrzebuje logów w czasie rzeczywistym, a inny może wykorzystać logi do identyfikacji trendu historycznego. Alternatywnie, możesz po prostu chcieć zmigrować logi do innej lokalizacji, takiej jak scentralizowane rozwiązanie do przechowywania logów.
Typowo, kiedy konfigurujesz logowanie dla narzędzia, chcesz, aby logi były rejestrowane na dysku lokalnym. Jednak w scenariuszu, w którym będzie wiele operacji zapisu dziennika, może to przynieść efekt przeciwny do zamierzonego. Wydajność może ulec pogorszeniu, a ty możesz przegapić niektóre z logów. Domyślnie, HAProxy jest dostarczany z konfiguracją do zapisu logów do gniazda, ponieważ jest to szybsze niż wysyłanie logów przez sieć lub pisanie bezpośrednio do pliku.
W dokumentacji HAProxy, jest sekcja obejmująca logowanie w sposób bardziej szczegółowy. Kiedy już poznasz podstawy z tego postu, możesz szybko zagłębić się w inne tematy, jak przechwytywanie ciasteczek lub nagłówków HTTP. Możesz nawet skonfigurować typ lub dosadność logów, które chcesz zobaczyć.
Jeśli jeszcze tego nie zrobiłeś, zainstaluj HAProxy. W Ubuntu można to zrobić w ten sposób:
$ sudo apt-get install haproxy$ haproxy -vHA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22Copyright 2000-2018 Willy Tarreau <[email protected]>
Konfigurowanie logowania dla Syslog
Domyślnie w pliku konfiguracyjnym HAProxy są dwie sekcje: globalna i domyślna. W globalnej sekcji, można skonfigurować niskopoziomowe funkcje, takie jak bezpieczeństwo, wydajność, i logowania miejsc docelowych. Sekcja domyślna to miejsce, gdzie masz ustawienia, które mają zastosowanie do wszystkich innych sekcji proxy poniżej, jak front-end i back-end. Celem jest uniknięcie powtórzeń. Post na stronie HAProxy dostarcza więcej szczegółów na temat każdej sekcji, ale dla naszego przypadku, sekcje global i defaults są wystarczające.
W domyślnym pliku konfiguracyjnym (/etc/haproxy/haproxy.cfg), masz coś takiego dla logowania:
global log /dev/log local0 log /dev/log local1 notice # ... other properties not included heredefaults log global # ... other properties not included here
Gdy spojrzysz na katalog „/dev/log/”, zobaczysz symboliczny link do dziennika systemd, co oznacza, że logi są wysyłane do syslog:
$ ls -la /dev/loglrwxrwxrwx 1 root root 28 Aug 21 22:37 /dev/log -> /run/systemd/journal/dev-log
Późniejsze wersje, takie jak Ubuntu 18.04, mają zainstalowany rsyslog. W przeciwnym razie, będziesz musiał zainstalować go przez uruchomienie polecenia „sudo apt install -y rsyslog” w swoim serwerze. Następnie spójrz na konfigurację w folderze rsyslog. W moim przypadku wygląda to tak:
ls -la /etc/rsyslog.d/total 24drwxr-xr-x 2 root root 4096 Aug 21 22:41 .drwxr-xr-x 90 root root 4096 Aug 21 22:41 ..-rw-r--r-- 1 root root 314 Aug 15 2017 20-ufw.conf-rw-r--r-- 1 root root 255 Jun 3 02:08 21-cloudinit.conf-rw-r--r-- 1 root root 282 Jun 22 08:41 49-haproxy.conf-rw-r--r-- 1 root root 1124 Jan 30 2018 50-default.conf
Zauważ, że jest tam plik o nazwie „49-haproxy.conf,” który jest tam, gdzie istnieje konfiguracja dla logowania HAProxy. Jeśli nie widzisz takiego pliku, stwórz go. Oto domyślna zawartość:
$ cat /etc/rsyslog.d/49-haproxy.conf# 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 logfileif $programname startswith 'haproxy' then /var/log/haproxy.log&~
Widzisz, że logi będą zapisywane w pliku /var/log/haproxy.log. Od tego momentu, to jest twoje zadanie, aby zrobić coś z tymi logami. Jednakże, może być konieczne ponowne uruchomienie rsyslog i HAProxy, zanim będzie można zobaczyć niektóre logi. Możesz to zrobić wykonując następujące polecenia:
sudo service rsyslog restartsudo service haproxy restart
Powinieneś przynajmniej zobaczyć kilka początkowych logów, takich jak ten:
$ cat /var/log/haproxy.logAug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : Exiting Master process...Aug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : Current worker 1815 exited with code 143Aug 21 22:42:44 ip-172-31-43-203 haproxy: 233/154135 (1814) : All workers exited. Exiting... (143)
Teraz, gdy masz już logi, czas coś z nimi zrobić. Nie ma znaczenia, którego narzędzia używasz do przetwarzania logów z pliku haproxy.log. Na przykład, możesz wybrać narzędzie takie jak SolarWinds® Loggly®, które również posiada agenta do przetwarzania logów i wysyłania ich do Loggly automatycznie.
Konfiguracja serwerów back-end
Jeśli chcesz spróbować, aby zobaczyć, jak logowanie działa domyślnie, gdy dodasz więcej serwerów proxy, możesz to zrobić, dodając konfigurację taką jak poniższa na końcu pliku haproxy.conf file:
backend webserversbalance roundrobinserver webserver1 Your-Webserver1-IP:80 checkserver webserver2 Your-Webserver2-IP:80 checkoption httpchk
Zastąp „Your-Webserver1-IP” i „Your-Webserver2-IP” adresami IP serwerów, na które chcesz przekierować ruch. Zapisz zmiany i uruchom ponownie usługę HAProxy. Zauważ, że nie musieliśmy włączać żadnej konfiguracji logowania w sekcji back-end proxy. Powinieneś teraz być w stanie wysyłać ruch do tych serwerów back-end przez HAProxy, a logi automatycznie trafią do pliku haproxy.log.
Rotate Logs With Logrotate
Na koniec, jako dobrzy obywatele, musimy upewnić się, że haproxy.log nie zjada całej pamięci serwera. Aby to zrobić, możesz użyć logrotate. W moim przypadku, jest on domyślnie zainstalowany, ale można go zainstalować za pomocą następującego polecenia:
sudo apt-get install logrotate
Wtedy będziesz miał plik konfiguracyjny jak poniżej, aby oczyścić i skompresować plik haproxy.log:
cat /etc/logrotate.d/haproxy/var/log/haproxy.log { daily rotate 52 missingok notifempty compress delaycompress postrotate invoke-rc.d rsyslog rotate >/dev/null 2>&1 || true endscript}
Gdy użyjesz powyższej konfiguracji, logrotate zastosuje tę regułę każdego dnia, zachowując wszelkie logi 52 dni stare lub nowsze. Skompresuje on również obrócone pliki do formatu gzip. Nie będziesz musiał się martwić o posiadanie zbyt wielu plików logów na serwerze – logrotate usunie wszystkie starsze pliki za Ciebie. Używając tej prostej konfiguracji, możesz uniknąć konieczności budzenia się w środku nocy w celu usunięcia logów. Brzmi jak świetna sprawa, prawda?
Aby upewnić się, że konfiguracja działa, zrestartuj HAProxy i rsyslog:
sudo service rsyslog restartsudo service haproxy restart
Wnioski
Tylko zarysowałem powierzchnię opcji logowania, które zapewnia HAProxy. Możesz kontynuować przeglądanie oficjalnej dokumentacji. Istnieje również doskonały post na blogu HAProxy, który zagłębia się w to, jak zmienić format logów, a nawet jak uzyskać metryki profilowania.
Użyłem serwera Ubuntu 18.04 w AWS, a większość konfiguracji, które omówiłem tutaj są tam domyślnie. Nie każdy serwer będzie w ten sposób, ale przynajmniej teraz wiesz, jak działa logowanie w HAProxy i gdzie są te konfiguracje, abyś mógł je zmodyfikować w razie potrzeby. Szczęśliwego logowania!