Er kan van alles gebeuren wanneer een gebruiker op een website terecht komt. Er zijn zelfs momenten dat verzoeken van gebruikers een server niet bereiken, waardoor u mogelijk een vals-positieve melding krijgt dat alles in orde is. De dagen dat een website slechts één server gebruikte, liggen ver achter ons. In de gedistribueerde wereld van vandaag staan er vele servers achter een load balancer die de gebruikersbelasting van de website verdeelt.
Dus hoe kunt u weten of alles soepel verloopt tussen uw gebruikers en uw servers? De logboeken van load balancers en proxy servers zoals HAProxy geven u een ander perspectief. Ze kunnen u bijvoorbeeld vertellen hoeveel tijd gebruikersverzoeken in beslag nemen en hoeveel verzoeken mislukken. Deze informatie is waardevol en kan je meer aanwijzingen geven wanneer je incidenten in een live omgeving aan het oplossen bent.
In het bericht van vandaag geef ik je een korte uitleg over hoe logging werkt in HAProxy, hoe logging configuratie werkt, hoe je logs kunt verwerken, en hoe je kunt voorkomen dat je zonder opslagruimte komt te zitten in je servers als gevolg van grote log-bestandsgroottes.
Hoe werkt logging in HAProxy?
Wanneer u HAProxy installeert, kunt u configureren hoe u wilt werken met de logs die deze tool vastlegt. U kunt bijvoorbeeld instellen dat HAProxy logs naar verschillende locaties tegelijk stuurt. Misschien moet een team de logs in real time krijgen en kan een ander team de logs gebruiken om een historische trend te identificeren. Een andere mogelijkheid is dat u logs wilt migreren naar een andere locatie, zoals een gecentraliseerde opslagoplossing voor logs.
Typisch, wanneer u logging voor een tool configureert, wilt u dat de logs op een lokale schijf worden vastgelegd. Echter, in een scenario waar er veel log-schrijf-bewerkingen zullen zijn, kan dit contraproductief zijn. De prestaties zouden kunnen afnemen, en het zou kunnen dat je sommige logs mist. Standaard wordt HAProxy geleverd met een configuratie om logs naar een socket te schrijven, omdat dit sneller is dan logs over het netwerk te sturen of direct naar een bestand te schrijven.
In de HAProxy documentatie is een sectie die logging in meer detail behandelt. Als je eenmaal de basis hebt van deze post, kun je snel dieper duiken in andere onderwerpen, zoals hoe je cookies of HTTP headers vastlegt. Je kunt zelfs het type of de verbositeit van de logs die je wilt zien configureren.
Als je het nog niet gedaan hebt, installeer HAProxy. In Ubuntu kunt u dat op deze manier doen:
$ sudo apt-get install haproxy$ haproxy -vHA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22Copyright 2000-2018 Willy Tarreau <[email protected]>
Logging configureren voor Syslog
Het HAProxy configuratiebestand bevat standaard twee secties: globaal en standaardinstellingen. In de globale sectie configureert u kenmerken op laag niveau zoals beveiliging, prestatie en logboekbestemmingen. De standaardinstellingen sectie bevat instellingen die van toepassing zijn op alle andere proxy secties eronder, zoals de frontend en de backend. Het doel is om herhaling te voorkomen. Een post op de HAProxy website geeft meer details over elke sectie, maar voor ons geval zijn de globale en standaard secties voldoende.
In het standaard configuratiebestand (/etc/haproxy/haproxy.cfg), heb je zoiets als dit voor logging:
global log /dev/log local0 log /dev/log local1 notice # ... other properties not included heredefaults log global # ... other properties not included here
Als je naar de “/dev/log/” directory kijkt, zie je een symbolische link naar systemd’s journal, wat betekent dat logs naar syslog worden gestuurd:
$ ls -la /dev/loglrwxrwxrwx 1 root root 28 Aug 21 22:37 /dev/log -> /run/systemd/journal/dev-log
Eigentijdse versies zoals Ubuntu 18.04 komen met rsyslog geïnstalleerd. Anders moet je het installeren door het commando “sudo apt install -y rsyslog” uit te voeren op je server. Kijk dan naar de configuratie in de rsyslog folder. In mijn geval ziet het er zo uit:
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
Merk op dat er een bestand is met de naam “49-haproxy.conf,” dat is waar de configuratie voor HAProxy logging bestaat. Als u zo’n bestand niet ziet, maak het dan aan. Hier is de standaard inhoud:
$ 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&~
U kunt zien dat logs worden geschreven in het bestand /var/log/haproxy.log. Vanaf daar is het jouw taak om iets met die logs te doen. Het kan echter zijn dat je rsyslog en HAProxy moet herstarten voordat je sommige logs kunt zien. U kunt dit doen door de volgende commando’s uit te voeren:
sudo service rsyslog restartsudo service haproxy restart
U zou op zijn minst een aantal initiële logs moeten zien zoals deze:
$ 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)
Nu u logs heeft, is het tijd om er iets mee te doen. Het maakt niet uit welk gereedschap je gebruikt voor het verwerken van de logs uit het haproxy.log bestand. U kunt bijvoorbeeld kiezen voor een tool als SolarWinds® Loggly®, die ook een agent heeft om logs te verwerken en automatisch naar Loggly te sturen.
Configureer Back-End Servers
Als u het eens wilt proberen om te zien hoe logging standaard werkt als u meer proxies toevoegt, dan kunt u dat doen door een configuratie als de volgende toe te voegen aan het eind van het haproxy.conf file:
backend webserversbalance roundrobinserver webserver1 Your-Webserver1-IP:80 checkserver webserver2 Your-Webserver2-IP:80 checkoption httpchk
Vervang “Your-Webserver1-IP” en “Your-Webserver2-IP” met de IP adressen van de servers waar je verkeer naar wilt omleiden. Sla de wijzigingen op en herstart de HAProxy service. Merk op dat we geen logging configuratie hoefden op te nemen in de back-end proxy sectie. U zou nu in staat moeten zijn om verkeer naar die back-end servers te sturen via HAProxy, en de logs zullen automatisch naar het haproxy.log bestand gaan.
Rotate Logs With Logrotate
Ten slotte, als goede burgers, moeten we ervoor zorgen dat het haproxy.log niet alle opslagruimte van de server opeet. Om dit te doen, kun je logrotate gebruiken. In mijn geval is het standaard geïnstalleerd, maar je kunt het installeren met het volgende commando:
sudo apt-get install logrotate
Dan heb je een configuratiebestand als het volgende om het haproxy.log bestand op te schonen en te comprimeren:
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}
Wanneer je de bovenstaande configuratie gebruikt, zal logrotate deze regel elke dag toepassen, waarbij alle logs 52 dagen oud of nieuwer worden bewaard. Het comprimeert ook de geroteerde bestanden in een gzip formaat. Je hoeft je geen zorgen te maken over te veel logbestanden op de server-logrotate zal alle oudere bestanden voor je verwijderen. Door deze eenvoudige configuratie te gebruiken, kun je voorkomen dat je midden in de nacht wakker moet worden om logs te verwijderen. Klinkt goed, toch?
Om er zeker van te zijn dat de configuratie werkt, herstart HAProxy en rsyslog:
sudo service rsyslog restartsudo service haproxy restart
Conclusie
Ik heb slechts de oppervlakte van de logging opties die HAProxy biedt, bekeken. U kunt verder kijken in de officiële documentatie. Er is ook een uitstekende post op de HAProxy blog die dieper ingaat op hoe het formaat logs te veranderen en zelfs hoe je profiling metrics.
Merk op dat ik een Ubuntu 18.04 server in AWS gebruikte, en de meeste van de configuraties die ik hier besprak zijn daar standaard. Niet elke server zal zo komen, maar in ieder geval weet je nu hoe logging werkt in HAProxy en waar deze configuraties zijn, zodat je ze kunt aanpassen indien nodig. Veel plezier met loggen!