====== 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