====== GoAccess ======
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.
===== Installazione =====
Io ho installato il pacchetto, presente in Debian e derivati, semplicemente con
apt install goaccess
===== Lancio in command line =====
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
===== Output su file HMTL =====
Volendo, posso aggiungere alla command line precendete un semplice '' -o nomefile.html '' per salvare su un file html un bel report grafico.
===== Generare automaticamente i report ogni giorno con memoria storica dei dati =====
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.
* Creiamo una directory dove teniamo i dati storici di Goaccess, nel suo formato interno. Per questo esempio uso ''/var/spool/goaccess/NOMESITO'':
mkdir /var/spool/goaccess
mkdir /var/spool/goaccess/NOMESITO
* Eseguiamo a mano Goaccess per parsare tutti i log vecchi che abbiamo, per la prima volta, creando i database interni che useremo in seguito (e anche un report html che mettiamo in un posto dove è accessibile dal web server)
zcat /var/log/apache2/access*.gz | goaccess --log-format=COMBINED -a --persist --db-path /var/spool/goaccess/NOMESITO -o /var/www/NOMESITO/report.html
* Eseguiamo a mano Goaccess per parsare il log non gzippato di ieri (access.log.1) che non è compreso fra quelli che ho parsato prima, avendo cura di dirgli di aggiungere i dati dal database
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
* Mettiamo in cron Goaccess in modo che giri ogni notte dopo il logrotate di Apache, e processi solo il log.1 (cioe` il log di ieri) e non tutti gli altri, che sono gia` stati processati prima. Notare che ho verificato che logrotate di apache giri a mezzanotte, e che lancio quindi il mio cron a mezzanotte e 20). Il vostro logrotate potrebbe girare a orari diversi!
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
===== Proteggere il report =====
Se vogliamo proteggere il nostro file di report (report.html nel mio esempio) possiamo banalmente usare una configurazione come questa in Apache
AuthUserFile /etc/apache2/goaccess.htpasswd
AuthName "Password Protected"
AuthType Basic
require valid-user