Molte cose possono accadere quando un utente arriva su un sito web. Ci sono anche momenti in cui le richieste degli utenti non raggiungono un server, dandovi potenzialmente un falso positivo che dice che tutto è OK. Sono lontani i giorni in cui un sito web utilizzava un solo server. Nel mondo distribuito di oggi, ci sono molti server dietro un bilanciatore di carico che distribuisce il carico degli utenti del sito web.
Come puoi sapere se tutto sta andando bene tra i tuoi utenti e i tuoi server? I log emessi dai bilanciatori di carico e dai server proxy come HAProxy ti danno una prospettiva diversa. Possono dirvi, per esempio, quanto tempo impiegano le richieste degli utenti e quante richieste falliscono. Queste informazioni sono preziose e possono darti più indizi quando stai risolvendo incidenti in un ambiente live.
Nel post di oggi, ti darò una breve spiegazione di come funziona il logging in HAProxy, come funziona la configurazione del logging, come elaborare i log e come evitare di esaurire lo storage nei tuoi server a causa delle grandi dimensioni dei file di log.
Come funziona la registrazione in HAProxy?
Quando installi HAProxy, puoi configurare come vuoi lavorare con i log che questo strumento registra. Per esempio, è possibile configurare HAProxy per inviare i log a diverse posizioni allo stesso tempo. Forse un team ha bisogno di ottenere i log in tempo reale e un altro può utilizzare i log per identificare una tendenza storica. In alternativa, si potrebbe semplicemente voler migrare i log in una posizione diversa come una soluzione di archiviazione centralizzata dei log.
In genere, quando si configura la registrazione per uno strumento, si desidera che i log siano registrati su un disco locale. Tuttavia, in uno scenario in cui ci saranno molte operazioni di scrittura dei log, questo può essere controproducente. Le prestazioni potrebbero essere degradate e potresti perdere alcuni dei log. Per impostazione predefinita, HAProxy viene fornito con una configurazione per scrivere i log su un socket, perché è più veloce che inviare i log sulla rete o scrivere direttamente su un file.
Nella documentazione di HAProxy, c’è una sezione che copre i log in modo più dettagliato. Una volta che avete le basi di questo post, potete rapidamente immergervi più a fondo in altri argomenti, come catturare i cookie o le intestazioni HTTP. Puoi anche configurare il tipo o la verbosità dei log che vorresti vedere.
Se non l’hai ancora fatto, installa HAProxy. In Ubuntu, puoi farlo in questo modo:
$ sudo apt-get install haproxy$ haproxy -vHA-Proxy version 1.8.8-1ubuntu0.11 2020/06/22Copyright 2000-2018 Willy Tarreau <[email protected]>
Configurazione della registrazione per Syslog
Di default, ci sono due sezioni nel file di configurazione di HAProxy: global e defaults. Nella sezione globale, si configurano caratteristiche di basso livello come la sicurezza, le prestazioni e le destinazioni di registrazione. La sezione defaults è dove hai le impostazioni che si applicano a tutte le altre sezioni proxy sottostanti, come il front end e il back end. L’obiettivo è quello di evitare ripetizioni. Un post sul sito web di HAProxy fornisce maggiori dettagli su ogni sezione, ma per il nostro caso, le sezioni global e defaults sono sufficienti.
Nel file di configurazione predefinito (/etc/haproxy/haproxy.cfg), avete qualcosa del genere per il logging:
global log /dev/log local0 log /dev/log local1 notice # ... other properties not included heredefaults log global # ... other properties not included here
Quando guardate la directory “/dev/log/”, vedrete un link simbolico al journal di systemd, il che significa che i log vengono inviati a syslog:
$ ls -la /dev/loglrwxrwxrwx 1 root root 28 Aug 21 22:37 /dev/log -> /run/systemd/journal/dev-log
Le versioni recenti come Ubuntu 18.04 hanno rsyslog installato. Altrimenti, dovrete installarlo eseguendo il comando “sudo apt install -y rsyslog” nel vostro server. Poi guardate la configurazione nella cartella rsyslog. Nel mio caso, assomiglia a questo:
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
Nota che c’è un file con il nome “49-haproxy.conf,” che è dove esiste la configurazione per la registrazione di HAProxy. Se non vedi un file come questo, crealo. Ecco il contenuto predefinito:
$ 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&~
Puoi vedere che i log saranno scritti nel file /var/log/haproxy.log. Da lì, è tuo compito fare qualcosa con quei log. Tuttavia, potrebbe essere necessario riavviare rsyslog e HAProxy prima di poter vedere alcuni log. Puoi farlo eseguendo i seguenti comandi:
sudo service rsyslog restartsudo service haproxy restart
Dovresti almeno vedere alcuni log iniziali come questo:
$ 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)
Ora che hai i log, è il momento di farci qualcosa. Non importa quale strumento usiate per elaborare i vostri log dal file haproxy.log. Per esempio, puoi scegliere uno strumento come SolarWinds® Loggly®, che ha anche un agente per elaborare i log e inviarli a Loggly automaticamente.
Configurare i server back-end
Se vuoi fare una prova per vedere come funziona il logging di default quando aggiungi altri proxy, puoi farlo aggiungendo una configurazione come la seguente alla fine del file haproxy.conf file:
backend webserversbalance roundrobinserver webserver1 Your-Webserver1-IP:80 checkserver webserver2 Your-Webserver2-IP:80 checkoption httpchk
Sostituisci “Your-Webserver1-IP” e “Your-Webserver2-IP” con gli indirizzi IP dei server a cui vuoi reindirizzare il traffico. Salva le modifiche e riavvia il servizio HAProxy. Nota che non abbiamo dovuto includere alcuna configurazione di log nella sezione del proxy back-end. Ora dovresti essere in grado di inviare il traffico a quei server back-end attraverso HAProxy, e i log andranno automaticamente al file haproxy.log.
Rotate Logs With Logrotate
Infine, da buoni cittadini, dobbiamo assicurarci che l’haproxy.log non mangi tutto lo storage del server. Per farlo, si può usare logrotate. Nel mio caso, è installato di default, ma puoi installarlo usando il seguente comando:
sudo apt-get install logrotate
Allora avrai un file di configurazione come il seguente per pulire e comprimere il file 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}
Quando usi la configurazione di cui sopra, logrotate applicherà questa regola ogni giorno, mantenendo qualsiasi log vecchio di 52 giorni o più recente. Inoltre comprime i file ruotati in un formato gzip. Non dovrete preoccuparvi di avere troppi file di log sul server: logrotate rimuoverà i file più vecchi per voi. Usando questa semplice configurazione, potrete evitare di dovervi svegliare nel cuore della notte per rimuovere i log. Sembra un ottimo affare, vero?
Per assicurarti che la configurazione funzioni, riavvia HAProxy e rsyslog:
sudo service rsyslog restartsudo service haproxy restart
Conclusione
Ho solo grattato la superficie delle opzioni di log che HAProxy fornisce. Puoi continuare a guardare la documentazione ufficiale. C’è anche un eccellente post sul blog di HAProxy che approfondisce come cambiare il formato dei log e anche come ottenere metriche di profilazione.
Nota che ho usato un server Ubuntu 18.04 in AWS, e la maggior parte delle configurazioni che ho discusso qui sono lì per default. Non tutti i server saranno così, ma almeno ora sapete come funziona il logging in HAProxy e dove sono queste configurazioni in modo da poterle modificare se necessario. Buon logging!