Många saker kan hända när en användare besöker en webbplats. Det finns till och med tillfällen då användarförfrågningar inte når fram till en server, vilket potentiellt kan ge dig ett falskt positivt besked om att allt är okej. Det är länge sedan den tid då en webbplats använde endast en server. I dagens distribuerade värld finns det många servrar bakom en lastutjämnare som fördelar belastningen från webbplatsens användare.
Så hur kan du veta om allt går smidigt mellan dina användare och dina servrar? De loggar som sänds ut av lastutjämnare och proxyservrar som HAProxy ger dig ett annat perspektiv. De kan till exempel berätta för dig hur mycket tid användarförfrågningar tar och hur många förfrågningar som misslyckas. Den här informationen är värdefull och kan ge dig fler ledtrådar när du felsöker incidenter i en levande miljö.
I dagens inlägg ger jag dig en kort förklaring av hur loggning fungerar i HAProxy, hur konfigurationen av loggningen fungerar, hur du bearbetar loggar och hur du undviker att få slut på lagringsutrymme i dina servrar på grund av stora loggfilstorlekar.
Hur fungerar loggning i HAProxy?
När du installerar HAProxy kan du konfigurera hur du vill arbeta med de loggar som detta verktyg registrerar. Du kan till exempel konfigurera HAProxy så att loggar skickas till olika platser samtidigt. Kanske behöver ett team få loggarna i realtid och ett annat team kan använda loggarna för att identifiera en historisk trend. Alternativt kanske du helt enkelt vill migrera loggar till en annan plats som en centraliserad loggningslagringslösning.
Typiskt sett, när du konfigurerar loggning för ett verktyg, vill du att loggarna ska registreras på en lokal disk. I ett scenario där det kommer att ske många loggskrivningar kan detta dock vara kontraproduktivt. Prestandan kan försämras och du kan missa en del av loggarna. Som standard levereras HAProxy med en konfiguration för att skriva loggar till en socket eftersom det är snabbare än att skicka loggar över nätverket eller skriva direkt till en fil.
I HAProxy-dokumentationen finns ett avsnitt som behandlar loggning mer i detalj. När du har fått grunderna från det här inlägget kan du snabbt dyka djupare in i andra ämnen, till exempel hur du fångar cookies eller HTTP-huvuden. Du kan till och med konfigurera typ eller verbositet för de loggar du vill se.
Om du inte har gjort det än, installera HAProxy. I Ubuntu kan du göra det så här:
$ sudo apt-get install haproxy$ haproxy -vHA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22Copyright 2000-2018 Willy Tarreau <[email protected]>
Konfigurera loggning för Syslog
Som standard finns det två sektioner i konfigurationsfilen för HAProxy: global och defaults. I det globala avsnittet konfigurerar du lågnivåfunktioner som säkerhet, prestanda och loggningsdestinationer. I avsnittet defaults har du inställningar som gäller för alla andra proxysektioner nedan, som front-end och back-end. Målet är att undvika upprepningar. Ett inlägg på HAProxys webbplats ger mer information om varje sektion, men i vårt fall räcker det med sektionerna global och defaults.
I standardkonfigurationsfilen (/etc/haproxy/haproxy.cfg) har du något liknande för loggning:
global log /dev/log local0 log /dev/log local1 notice # ... other properties not included heredefaults log global # ... other properties not included here
När du tittar på katalogen ”/dev/log/” ser du en symbolisk länk till systemd’s journal, vilket innebär att loggar skickas till syslog:
$ ls -la /dev/loglrwxrwxrwx 1 root root 28 Aug 21 22:37 /dev/log -> /run/systemd/journal/dev-log
Nyare versioner, som Ubuntu 18.04, har rsyslog installerat. Annars måste du installera det genom att köra kommandot ”sudo apt install -y rsyslog” på din server. Titta sedan på konfigurationen i mappen rsyslog. I mitt fall ser den ut så här:
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
Märk att det finns en fil med namnet ”49-haproxy.conf”, där konfigurationen för HAProxy-loggning finns. Om du inte ser en sådan här fil ska du skapa den. Här är standardinnehållet:
$ 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&~
Du kan se att loggar kommer att skrivas i filen /var/log/haproxy.log. Därifrån är det ditt jobb att göra något med dessa loggar. Du kan dock behöva starta om rsyslog och HAProxy innan du kan se vissa loggar. Du kan göra detta genom att köra följande kommandon:
sudo service rsyslog restartsudo service haproxy restart
Du bör åtminstone se några inledande loggar så här:
$ 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)
När du nu har loggar är det dags att göra något med dem. Det spelar ingen roll vilket verktyg du använder för att bearbeta dina loggar från filen haproxy.log. Du kan till exempel välja ett verktyg som SolarWinds® Loggly®, som också har en agent för att bearbeta loggar och skicka dem till Loggly automatiskt.
Konfigurera backend-servrar
Om du vill göra ett försök för att se hur loggningen fungerar som standard när du lägger till fler proxys, kan du göra det genom att lägga till en konfiguration som följande i slutet av haproxy.conf file:
backend webserversbalance roundrobinserver webserver1 Your-Webserver1-IP:80 checkserver webserver2 Your-Webserver2-IP:80 checkoption httpchk
Ersätt ”Your-Webserver1-IP” och ”Your-Webserver2-IP” med IP-adresserna till de servrar du vill omdirigera trafiken till. Spara ändringarna och starta om HAProxy-tjänsten. Lägg märke till att vi inte behövde inkludera någon loggkonfiguration i avsnittet om back-end proxy. Du bör nu kunna skicka trafik till dessa backend-servrar via HAProxy, och loggarna kommer automatiskt att gå till filen haproxy.log.
Rota loggar med Logrotate
Slutligt, som goda medborgare, måste vi se till att haproxy.log inte äter upp all serverlagring. För att göra det kan du använda logrotate. I mitt fall är den installerad som standard, men du kan installera den med följande kommando:
sudo apt-get install logrotate
Därefter får du en konfigurationsfil som följande för att städa upp och komprimera filen 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}
När du använder konfigurationen ovan kommer logrotate att tillämpa denna regel varje dag och behålla alla loggar som är 52 dagar gamla eller nyare. Den komprimerar också de roterade filerna till ett gzip-format. Du behöver inte oroa dig för att ha för många loggfiler på servern – logrotate tar bort alla äldre filer åt dig. Genom att använda den här enkla konfigurationen kan du undvika att behöva vakna mitt i natten för att ta bort loggar. Låter som en bra affär, eller hur?
För att försäkra dig om att konfigurationen fungerar startar du om HAProxy och rsyslog:
sudo service rsyslog restartsudo service haproxy restart
Slutsats
Jag skrapade bara på ytan av de loggningsalternativ som HAProxy erbjuder. Du kan fortsätta att titta på den officiella dokumentationen. Det finns också ett utmärkt inlägg på HAProxy-bloggen som går djupare in på hur du ändrar loggningsformatet och till och med hur du får profileringsmått.
Notera att jag använde en Ubuntu 18.04-server i AWS, och de flesta av de konfigurationer jag diskuterade här finns där som standard. Det är inte alla servrar som kommer att ha det så här, men nu vet du åtminstone hur loggning fungerar i HAProxy och var dessa konfigurationer finns så att du kan ändra dem vid behov. Lycka till med loggningen!