Mange ting kan ske, når en bruger lander på et websted. Der er endda tidspunkter, hvor brugerforespørgsler ikke når frem til en server, hvilket potentielt giver dig en falsk positiv, der siger, at alt er OK. De dage, hvor et websted kun brugte én server, er for længst forbi. I dagens distribuerede verden er der mange servere bag en load balancer, der fordeler brugerbelastningen på webstedet.
Så hvordan kan du vide, om alt kører som smurt mellem dine brugere og dine servere? De logfiler, der udsendes af load balancere og proxyservere som HAProxy, giver dig et andet perspektiv. De kan f.eks. fortælle dig, hvor lang tid brugernes anmodninger tager, og hvor mange anmodninger der mislykkes. Disse oplysninger er værdifulde og kan give dig flere spor, når du foretager fejlfinding af hændelser i et live-miljø.
I dagens indlæg giver jeg dig en kort forklaring på, hvordan logning fungerer i HAProxy, hvordan logningskonfiguration fungerer, hvordan du behandler logfiler, og hvordan du undgår at løbe tør for lagerplads på dine servere på grund af store logfilstørrelser.
Hvordan fungerer logning i HAProxy?
Når du installerer HAProxy, kan du konfigurere, hvordan du ønsker at arbejde med de logfiler, som dette værktøj registrerer. Du kan f.eks. konfigurere HAProxy til at sende logfiler til forskellige steder på samme tid. Måske har et team brug for at få logfilerne i realtid, mens et andet team kan bruge logfilerne til at identificere en historisk tendens. Alternativt kan det være, at du blot ønsker at migrere logfiler til en anden placering som f.eks. en centraliseret logningslagringsløsning.
Typisk set ønsker du, når du konfigurerer logning for et værktøj, at logfilerne skal registreres på en lokal disk. Men i et scenarie, hvor der vil være mange logskriveoperationer, kan dette være kontraproduktivt. Ydelsen kan blive forringet, og du kan gå glip af nogle af logfilerne. Som standard leveres HAProxy med en konfiguration til at skrive logs til en socket, fordi det er hurtigere end at sende logs over netværket eller skrive direkte til en fil.
I HAProxy-dokumentationen er der et afsnit, der dækker logning mere detaljeret. Når du har det grundlæggende fra dette indlæg, kan du hurtigt dykke dybere ned i andre emner, f.eks. hvordan du opfanger cookies eller HTTP-headere. Du kan endda konfigurere typen eller verbositeten af de logfiler, du gerne vil se.
Hvis du ikke har gjort det endnu, skal du installere HAProxy. I Ubuntu kan du gøre det på denne måde:
$ sudo apt-get install haproxy$ haproxy -vHA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22Copyright 2000-2018 Willy Tarreau <[email protected]>
Konfigurering af logning for Syslog
Der er som standard to afsnit i HAProxy-konfigurationsfilen: global og defaults. I den globale sektion konfigurerer du funktioner på lavt niveau, f.eks. sikkerhed, ydeevne og logningsdestinationer. I afsnittet defaults har du indstillinger, som gælder for alle andre proxyafsnit nedenfor, f.eks. frontend og backend. Målet er at undgå gentagelser. Et indlæg på HAProxy-webstedet indeholder flere detaljer om hvert afsnit, men i vores tilfælde er afsnittene global og defaults nok.
I standardkonfigurationsfilen (/etc/haproxy/haproxy.cfg), har du noget som dette til logning:
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 kigger på mappen “/dev/log/”, vil du se et symbolsk link til systemd’s journal, hvilket betyder, at logs bliver sendt til syslog:
$ ls -la /dev/loglrwxrwxrwx 1 root root 28 Aug 21 22:37 /dev/log -> /run/systemd/journal/dev-log
Nyere versioner som Ubuntu 18.04 kommer med rsyslog installeret. Ellers skal du installere det ved at køre kommandoen “sudo apt install -y rsyslog” på din server. Derefter skal du se på konfigurationen i mappen rsyslog. I mit tilfælde ser den således ud:
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
Bemærk, at der er en fil med navnet “49-haproxy.conf”, som er der, hvor konfigurationen for HAProxy-logning findes. Hvis du ikke kan se en fil som denne, skal du oprette den. Her er standardindholdet:
$ 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, at logfilerne vil blive skrevet på filen /var/log/haproxy.log. Derfra er det din opgave at gøre noget med disse logs. Du skal dog muligvis genstarte rsyslog og HAProxy, før du kan se nogle logs. Det kan du gøre ved at køre følgende kommandoer:
sudo service rsyslog restartsudo service haproxy restart
Du burde i det mindste se nogle indledende logfiler som denne:
$ 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, hvor du har logfiler, er det tid til at gøre noget med dem. Det er ligegyldigt hvilket værktøj du bruger til at behandle dine logs fra haproxy.log-filen. Du kan f.eks. vælge et værktøj som SolarWinds® Loggly®, som også har en agent til at behandle logs og sende dem automatisk til Loggly.
Konfigurer backend-servere
Hvis du vil give det et forsøg for at se, hvordan logning fungerer som standard, når du tilføjer flere proxyer, kan du gøre det ved at tilføje en konfiguration som følgende i slutningen af haproxy.conf file:
backend webserversbalance roundrobinserver webserver1 Your-Webserver1-IP:80 checkserver webserver2 Your-Webserver2-IP:80 checkoption httpchk
Udskift “Your-Webserver1-IP” og “Your-Webserver2-IP” med IP-adresserne på de servere, som du ønsker at omdirigere trafikken til. Gem ændringerne, og genstart HAProxy-tjenesten. Bemærk, at vi ikke behøvede at medtage nogen logkonfiguration i afsnittet om back-end-proxy. Du bør nu kunne sende trafik til disse back-end-servere via HAProxy, og logfilerne vil automatisk gå til filen haproxy.log.
Rotate Logs With Logrotate
Sluttelig skal vi som gode borgere sikre os, at haproxy.log ikke æder al serverens lagerplads. For at gøre det kan du bruge logrotate. I mit tilfælde er den installeret som standard, men du kan installere den ved hjælp af følgende kommando:
sudo apt-get install logrotate
Så får du en konfigurationsfil som følgende til at rydde op i og komprimere haproxy.log-filen:
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 bruger ovenstående konfiguration, vil logrotate anvende denne regel hver dag og beholde alle logs, der er 52 dage gamle eller nyere. Den komprimerer også de roterede filer til et gzip-format. Du behøver ikke at bekymre dig om at have for mange logfiler på serveren – logrotate fjerner alle ældre filer for dig. Ved at bruge denne enkle konfiguration kan du undgå at skulle vågne op midt om natten for at fjerne logfiler. Lyder som et godt tilbud, ikke?
For at sikre dig, at konfigurationen virker, skal du genstarte HAProxy og rsyslog:
sudo service rsyslog restartsudo service haproxy restart
Slutning
Jeg har kun skrabet på overfladen af de logningsmuligheder, som HAProxy tilbyder. Du kan fortsætte med at kigge i den officielle dokumentation. Der er også et glimrende indlæg på HAProxy-bloggen, der går dybere ind i, hvordan du ændrer formatet logs og endda hvordan du får profileringsmetrikker.
Bemærk, at jeg brugte en Ubuntu 18.04-server i AWS, og de fleste af de konfigurationer, jeg diskuterede her, er der som standard. Ikke alle servere vil komme på denne måde, men i det mindste ved du nu, hvordan logning fungerer i HAProxy, og hvor disse konfigurationer er, så du kan ændre dem om nødvendigt. God fornøjelse med logning!