Goaccess (https://goaccess.io/) è un analizzatore di log di Apache (e anche Nginx e non solo) scritto in C, veloce e abbastanza flessibile. Qui mi limiterò a tenere un paio di appunti su come l'ho installato e configurato io per un cliente, ci sono sicuramente tante funzionalità che qui non prendo in considerazione che vale la pena di analizzare andando sul sito di Goaccess stesso.
Io ho installato il pacchetto, presente in Debian e derivati, semplicemente con
apt install goaccess
Goaccess può essere lanciato in command line e ha un output testuale, è sufficiente dirgli che log vuoi analizzare e in che formato deve leggerlo. Per Apache, con il formato "combined" che è quello che uso normalmente, e` sufficiente una cosa tipo:
goaccess /var/log/apache2/access.log --log-format=COMBINED
Se vogliamo leggere più di un log, e per esempio i vecchi log sono gzippati (come è default) allora dobbiamo fare una cosa tipo:
zcat /var/log/apache2/access*.gz | goaccess --log-format=COMBINED
Notare che questo sistema non legge i files non gzippati (cioe` gli ultimi due log) in quanto zcat è idiota e se il file in input non è gzippato invece di fare il cat semplice, riporta errore. C'è un trucco orrendo per leggere i log compressi e non compressi, che è` questo:
zcat /var/log/apache2/access*.gz | goaccess - /var/log/apache2/access.log.1 /var/log/apache2/access.log --log-format=COMBINED
Volendo, posso aggiungere alla command line precendete un semplice -o nomefile.html
per salvare su un file html un bel report grafico.
Se vogliamo tenere le statistiche di un sito in modo continuativo possiamo dire a goaccess di salvare i dati pregressi e aggiungere quelli nuovi. Un sistema per farlo, un pelo complesso, e` il seguente.
/var/spool/goaccess/NOMESITO
:mkdir /var/spool/goaccess mkdir /var/spool/goaccess/NOMESITO
zcat /var/log/apache2/access*.gz | goaccess --log-format=COMBINED -a --persist --db-path /var/spool/goaccess/NOMESITO -o /var/www/NOMESITO/report.html
cat /var/log/apache2/access.log.1 | goaccess --log-format=COMBINED -a --restore --persist --db-path /var/spool/goaccess/NOMESITO -o /var/www/NOMESITO/report.html
20 00 * * * root /usr/bin/goaccess /var/log/apache2/access.log.1 --log-format=COMBINED -a --no-progress --restore --persist --db-path /var/spool/goaccess/NOMESITO -o /var/www/NOMESITO/report.html 2> /dev/null
Se vogliamo proteggere il nostro file di report (report.html nel mio esempio) possiamo banalmente usare una configurazione come questa in Apache
<Location /report.html> AuthUserFile /etc/apache2/goaccess.htpasswd AuthName "Password Protected" AuthType Basic require valid-user </Location>