Při vstupu uživatele na webové stránky se může stát mnoho věcí. Někdy se dokonce stává, že uživatelské požadavky na server nedorazí, což může vést k falešným zprávám, že je vše v pořádku. Dávno pryč jsou doby, kdy webové stránky používaly pouze jeden server. V dnešním distribuovaném světě je za vyrovnávačem zátěže mnoho serverů, které rozdělují zátěž uživatelů webu.
Jak tedy můžete zjistit, zda vše mezi uživateli a servery probíhá bez problémů? Protokoly vysílané vyrovnávači zátěže a proxy servery, jako je HAProxy, vám poskytnou jiný pohled. Mohou vám například prozradit, jak dlouho trvají požadavky uživatelů a kolik požadavků selže. Tyto informace jsou cenné a mohou vám poskytnout více vodítek při řešení incidentů v živém prostředí.
V dnešním příspěvku vám stručně vysvětlím, jak funguje protokolování v serveru HAProxy, jak funguje konfigurace protokolování, jak zpracovávat protokoly a jak se vyhnout vyčerpání úložiště na serverech kvůli velké velikosti souborů protokolů.
Jak funguje protokolování v HAProxy?
Při instalaci HAProxy můžete nakonfigurovat, jak chcete pracovat s protokoly, které tento nástroj zaznamenává. Můžete například nakonfigurovat server HAProxy tak, aby odesílal protokoly na různá místa současně. Možná, že jeden tým potřebuje získat protokoly v reálném čase a jiný může protokoly použít k určení historického trendu. Případně můžete jednoduše chtít migrovat protokoly do jiného umístění, například do centralizovaného řešení pro ukládání protokolů.
Typicky, když konfigurujete protokolování pro nástroj, chcete, aby se protokoly zaznamenávaly na místní disk. Ve scénáři, kdy bude docházet k mnoha operacím zápisu protokolů, to však může být kontraproduktivní. Mohlo by dojít ke snížení výkonu a o některé protokoly byste mohli přijít. Ve výchozím nastavení je server HAProxy dodáván s konfigurací pro zápis protokolů do soketu, protože je to rychlejší než odesílání protokolů po síti nebo zápis přímo do souboru.
V dokumentaci k serveru HAProxy je část zabývající se podrobněji protokolováním. Jakmile si osvojíte základy z tohoto příspěvku, můžete se rychle ponořit hlouběji do dalších témat, například jak zachytávat soubory cookie nebo hlavičky HTTP. Můžete dokonce nakonfigurovat typ nebo slovnost protokolů, které chcete zobrazit.
Pokud jste to ještě neudělali, nainstalujte si HAProxy. V Ubuntu to můžete udělat takto:
$ sudo apt-get install haproxy$ haproxy -vHA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22Copyright 2000-2018 Willy Tarreau <[email protected]>
Konfigurace protokolování pro Syslog
Ve výchozím nastavení jsou v konfiguračním souboru HAProxy dvě části: globální a výchozí. V globální části se konfigurují nízkoúrovňové funkce, jako je zabezpečení, výkon a cíle protokolování. V části výchozí jsou nastavení, která se vztahují na všechny ostatní níže uvedené části proxy serveru, jako je front end a back end. Cílem je vyhnout se opakování. Příspěvek na webu HAProxy obsahuje podrobnější informace o jednotlivých sekcích, ale pro náš případ stačí sekce global a defaults.
Ve výchozím konfiguračním souboru (/etc/haproxy/haproxy.cfg) máte pro logování něco takového:
global log /dev/log local0 log /dev/log local1 notice # ... other properties not included heredefaults log global # ... other properties not included here
Pokud se podíváte do adresáře „/dev/log/“, uvidíte symbolický odkaz na žurnál systemd, což znamená, že se logy posílají do syslogu:
$ ls -la /dev/loglrwxrwxrwx 1 root root 28 Aug 21 22:37 /dev/log -> /run/systemd/journal/dev-log
Nejnovější verze, jako je Ubuntu 18.04, obsahují nainstalovaný rsyslog. V opačném případě jej budete muset do svého serveru nainstalovat příkazem „sudo apt install -y rsyslog“. Poté se podívejte na konfiguraci ve složce rsyslog. V mém případě vypadá takto:
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
Všimněte si, že je zde soubor s názvem „49-haproxy.conf“, ve kterém existuje konfigurace pro protokolování HAProxy. Pokud takový soubor nevidíte, vytvořte jej. Zde je výchozí obsah:
$ 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&~
Vidíte, že protokoly se budou zapisovat do souboru /var/log/haproxy.log. Odtud je vaším úkolem s těmito protokoly něco udělat. Možná však budete muset restartovat rsyslog a HAProxy, než se vám některé protokoly zobrazí. To můžete udělat spuštěním následujících příkazů:
sudo service rsyslog restartsudo service haproxy restart
Měli byste vidět alespoň nějaké počáteční protokoly takto:
$ 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)
Teď, když máte protokoly, je čas s nimi něco udělat. Nezáleží na tom, jaký nástroj pro zpracování logů ze souboru haproxy.log použijete. Můžete například zvolit nástroj, jako je SolarWinds® Loggly®, který má také agenta pro zpracování protokolů a jejich automatické odesílání do Loggly.
Konfigurace back-end serverů
Pokud si chcete vyzkoušet, jak funguje protokolování ve výchozím nastavení při přidání dalších proxy serverů, můžete tak učinit přidáním konfigurace, jako je následující, na konec haproxy.conf file:
backend webserversbalance roundrobinserver webserver1 Your-Webserver1-IP:80 checkserver webserver2 Your-Webserver2-IP:80 checkoption httpchk
Zaměňte „Your-Webserver1-IP“ a „Your-Webserver2-IP“ za IP adresy serverů, na které chcete přesměrovat provoz. Uložte změny a restartujte službu HAProxy. Všimněte si, že jsme nemuseli zahrnout žádnou konfiguraci protokolování v části back-end proxy. Nyní byste měli být schopni odesílat provoz na tyto koncové servery prostřednictvím serveru HAProxy a protokoly budou automaticky přecházet do souboru haproxy.log.
Otočení protokolů pomocí Logrotate
Nakonec se jako správní občané musíme ujistit, že soubor haproxy.log nesežere veškeré úložiště serveru. K tomu můžete použít funkci logrotate. V mém případě je standardně nainstalován, ale můžete jej nainstalovat pomocí následujícího příkazu:
sudo apt-get install logrotate
Poté budete mít konfigurační soubor podobný následujícímu, který bude čistit a komprimovat soubor 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}
Při použití výše uvedené konfigurace bude logrotate aplikovat toto pravidlo každý den a uchová všechny protokoly staré 52 dní nebo novější. Rotované soubory také zkomprimuje do formátu gzip. Nemusíte se obávat, že budete mít na serveru příliš mnoho souborů protokolu – logrotate odstraní všechny starší soubory za vás. Pomocí této jednoduché konfigurace se vyhnete tomu, abyste se museli uprostřed noci budit a odstraňovat protokoly. Zní to jako skvělá nabídka, že?“
Chcete-li se ujistit, že konfigurace funguje, restartujte HAProxy a rsyslog:
sudo service rsyslog restartsudo service haproxy restart
Závěr
Pouze jsem poškrábal povrch možností protokolování, které HAProxy poskytuje. Můžete pokračovat v prohlížení oficiální dokumentace. Na blogu HAProxy je také vynikající příspěvek, který se hlouběji zabývá tím, jak změnit formát protokolů, a dokonce i tím, jak získat profilovací metriky.
Poznamenejte, že jsem použil server Ubuntu 18.04 v AWS a většina konfigurací, které jsem zde probíral, je tam ve výchozím nastavení. Ne každý server bude takto vybaven, ale alespoň nyní víte, jak logování v HAProxy funguje a kde se tyto konfigurace nacházejí, abyste je mohli v případě potřeby upravit. Šťastné přihlašování!