GOACCESS è un piccolo tool di analisi da installare sul web server Linux che permette di monitorare in tempo reale i dati del log attraverso un report visibile sia via console SSH sia in un file HTML.
In un precedente articolo spiegavo perchè è importante analizzare il log del web server e come analizzarlo con Excel. Oggi vediamo COME analizzarlo in tempo reale con un piccolo software server-side chiamato GOACCESS.
Per installare GOACCESS devi avere accesso al web server via SSH con poteri root.
Installare GOACCESS
Ho creato questa guida mentre installavo GOACCESS sul mio server che è basato su Ubuntu e come web server usa NGINX. Per installazioni in ambienti diversi fai riferimento al sito ufficiale oppure al repository su Github.
GoAccess v1.0 is out! Major release now with a complete real-time HTML dashboard and a lot more. https://t.co/rQdLFdzZII
— GoAccess (@goaccess) June 9, 2016
Per installare GOACCESS su Ubuntu collegati via console SSH al tuo web server. Le seguenti istruzioni permettono di installare la versione più aggiornata del software.
#Official GoAccess' Debian/Ubuntu Repository
echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install goaccess
# UBUNTU EASY INSTALL
apt-get install goaccess
Ora che hai installato GOACCESS è necessario configurarlo per aiutarlo ad interpretare il formato del log. Apache infatti ha un formato leggermente diverso da Nginx che a sua volta è differente da altri log.
Configurare GOACCESS
In particolare è necessario configurare il time-format, date-format e log-format. Queste istruzioni indicano a GOACCESS come leggere le stringhe del log ed estrarre l’orario, la data e le informazioni inserite nel log.
Il file di configurazione di GOACCESS lo trovi solitamente qui: /etc/goaccess.conf, a seconda del tipo di installazione che hai fatto lo puoi trovare anche in /usr/etc/ oppure /usr/local/etc/.
Per editare il file digita nella console SSH
sudo nano /etc/goaccess.conf
In base al tuo web server devi inserire i 3 parametri visti sopra. Per web server Nginx aggiungi queste tre righe oppure, se presenti, togli il commento “#”:
time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u" %T %^
Per web server Apache usa questa configurazione:
date-format %d/%b/%Y
# NCSA Combined Log Format
# For Non-Virtual Host Setups
log-format %h %^[%d:%^] "%r" %s %b "%R" "%u"
# NCSA Combined Log Format with Virtual Host
# For Virtual Host Setups
log-format %^:%^ %h %^[%d:%^] "%r" %s %b "%R" "%u"
Attenzione, togli il commento solo da un solo log-format in base alla tua installazione, non abilitarli entrambi!
Visualizzare il LOG in tempo reale via SSH
Ora sei pronto per lanciare GOACCESS e visualizzare i dati in tempo reale. GOACCESS nasce come tool da usare via SSH, quindi vediamo come visualizzare il log da console. Prima di tutto devi localizzare i tuoi log, nel mio ambiente li trovo sotto: /var/log/nginx/.
Ora che sappiamo dove si trova il log basta lanciare GOACCESS da riga di comando:
goaccess -f /var/log/nginx/access.log -a -m
- Il parametro -f serve per indicare il percorso del file log
- Il parametro -a permette di visualizzare gli user-agent
- Il parametro -m abilita il mouse nella dashboard
Sostituisci il nome log con il tuo! Ricorda anche che il log in tempo reale è il più recente (access.log) ma nulla ti vieta di aprire un log precedentemente salvato (ad esempio access.log.3).
Nella dashboard sono presenti le informazioni critiche estratte dal log del web server:
- Total Requests
- Unique Visitors
- Unique Files
- Referrers
- Valid Requests
- Processed Time
- Static Files
- Log Size
- Failed Requests
- Excl. IP Hits
- Unique 404
- Bandwidth
- Log File Location
- Unique visitors per day – Including spiders
- Requested Files (URL)
- Static Requests
- Not Found (URLs)
- Visitors Hostname and IPs
- Operating Systems
- Browsers
- Time Distribution
- Referring SItes
- Geo Location
- HTTP Status Codes
I dati vengono aggiornati in tempo reale, lancia una scansione con Screaming Frog per verificare. Per navigare i dati della dashboard puoi usare i comandi rapidi:
- F1/h: help
- F5: refresh della finestra
- q: per uscire da GOACCESS oppure per chiudere il modulo attivo
- o/ENTER: espande il modulo evidenziato
- 0-9 e Shift + 0: imposta il modulo attivo
- j: Scroll down all’interno del modulo attivo
- k: Scroll up all’interno del modulo attivo
- c: cambiare lo schema di colori
- ^ f: Scroll forward all’interno del modulo attivo
- ^ b: Scroll backward all’interno del modulo attivo
- TAB: passa da un modulo all’altro (avanti)
- SHIFT + TAB: passa da un modulo all’altro (indietro)
- s: opzioni del modulo attivo
- /: cerca nel modulo via Regex
- n: cerca la posizione della prossima ricorrenza
- g: per muoversi al primo elemento della pagina
- G: per muoversi all’ultimo elemento della pagina
Salvare il log in HTML
Nel caso non ti piacesse usare la dashboard via SSH puoi sempre esportare il report in HTML.
goaccess -f access.log -a > report.html
Devi specificare un path per il file HTML, che abbia i permessi giusti e che sia raggiungibile non solo da localhost. Nel mio caso la stringa è la seguente:
goaccess -f /var/log/nginx/access.log -o /home/user/www/miosito/report.html
Qui puoi vedere una demo del report HTML di GOACCESS.
Per aggiornare il report devi eseguire di nuovo il comando oppure creare un cronjob.
Aggiornare il report via crontab
Dalla console SSH digita
crontab -e
seleziona l’editor che preferisci (consiglio nano oppure vim) ed aggiungi una riga seguendo questa logica:
0 * * * * sudo goaccess -f /var/log/nginx/access.log -a > /home/user/www/miosito/report.html
Questo cronjob aggiorna il report ogni ora. Salva il link al report.html così potrai visualizzarlo aggiornato quando vorrai, senza dover accedere al server via SSH.
Visualizzare il LOG in tempo reale via HTML
GOACCESS permette anche di visualizzare un report in tempo reale semplicemente digitando questo comando:
goaccess -f /var/log/nginx/access.log -o /home/user/www/miosito/report.html --real-time-html --ws-url=host
- Il parametro -o server per inviare l’output in un altro file (HTML, JSON oppure CSV).
- Il parametro –real-time-html attiva il report in tempo reale.
- Il parametro –ws-url è facoltativo, si usa per visualizzare il report su un host diverso dal server monitorato. Come attributo del parametro si inserisce l’indirizzo dell’host senza http.
Comandi Extra
Di seguito ho raccolto alcuni comandi da console che mi tornano utili per lanciare analisi filtrate del log del web server. Ricordati di modificare il percorso al tuo log file.
GOACCESS permette anche di esportare i report in JSON e CSV
Per generare il report in JSON:
goaccess -f access.log -a -d -o report.json
Per esportare in CSV:
goaccess -f access.log --no-csv-summary -o report.csv
Tramite la funzione Grep è possibile filtrare, ad esempio, solo gli hit di Googlebot:
grep -i 'Googlebot' /var/log/nginx/access.log | goaccess -a
Per processare solo l’ultimo log:
goaccess -f /var/log/nginx/access.log -a -m
Per processare tutti i log storici:
zcat -f /var/log/nginx/access.log* | goaccess
Per processare solo i dati di oggi:
sed -n '/'$(date '+%d\/%b\/%Y' -d 'today')'/,$ p' /var/log/nginx/access.log | goaccess -a -m
Per processare solo Googlebot:
grep -i 'Googlebot/2.1' /var/log/nginx/access.log | goaccess -a -m --color-scheme 2
Per processare solo pagine AMP:
grep -i '/amp/' /var/log/nginx/access.log | goaccess -a -m
Per processare solo una pagina:
grep -i '/inserisci-url-relativo/' /var/log/nginx/access.log | goaccess -a -m
Qui trovi altri esempi. Tu che software usi per monitorare il log del web server in tempo reale?