
GoAccess è un analizzatore di log web in tempo reale e un visualizzatore interattivo che gira in un terminale in sistemi *nix o tramite il tuo browser.
GoAccess è un analizzatore di log web in tempo reale open source e un visualizzatore interattivo che funziona in un terminale su sistemi *nix o direttamente nel browser. Progettato pensando ad amministratori di sistema, ingegneri DevOps e professionisti della sicurezza, fornisce statistiche HTTP rapide e utili e report visivi del server al volo. GoAccess analizza i log del tuo server web in tempo reale e presenta i dati direttamente nel terminale o tramite una dashboard HTML live, rendendo facile monitorare il traffico, rilevare anomalie e risolvere problemi istantaneamente.
Maggiori informazioni su: https://goaccess.io.
GoAccess analizza il file di log web specificato e invia i dati al terminale X. Le funzionalità includono:
Completamente in tempo reale
Tutti i pannelli e le metriche vengono aggiornati ogni 200 ms sull'output del terminale e ogni secondo sull'output HTML.
Configurazione minima necessaria
Puoi semplicemente eseguirlo sul tuo file di log di accesso, scegliere il formato del log e lasciare che GoAccess analizzi il log di accesso e mostri le statistiche.
Monitoraggio del tempo di risposta dell'applicazione
Tieni traccia del tempo impiegato per servire la richiesta. Estremamente utile se desideri monitorare le pagine che rallentano il tuo sito.
Autenticazione WebSocket:
GoAccess offre un'autenticazione WebSocket migliorata, con supporto per verifica JWT locale ed esterna, funzionalità di aggiornamento sicuro del token e integrazione perfetta con sistemi di autenticazione esterni.
Quasi tutti i formati di log web
GoAccess accetta qualsiasi stringa di formato di log personalizzata. Le opzioni predefinite includono Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, ecc.
Elaborazione incrementale dei log
Hai bisogno di persistenza dei dati? GoAccess ha la capacità di elaborare i log in modo incrementale tramite le opzioni di persistenza su disco.
Una sola dipendenza
GoAccess è scritto in C. Per eseguirlo, hai solo bisogno di ncurses come dipendenza. Tutto qui. Include persino il proprio server Web Socket — http://gwsocket.io/.
Visitatori
Determina il numero di hits, visitatori, larghezza di banda e metriche per le richieste più lente per ora o per data.
Metriche per Virtual Host
Hai più Virtual Host (Server Blocks)? Include un pannello che mostra quale virtual host sta consumando la maggior parte delle risorse del server web.
ASN (mappatura del numero di sistema autonomo)
Ottimo per rilevare modelli di traffico dannosi e bloccarli di conseguenza.
Schema di colori personalizzabile
Personalizza GoAccess in base ai tuoi gusti/schemi di colore. Sia tramite il terminale, sia semplicemente applicando il foglio di stile sull'output HTML.
Supporto per grandi set di dati
GoAccess offre la capacità di analizzare log di grandi dimensioni grazie alle sue tabelle hash ottimizzate in memoria. Ha un ottimo utilizzo della memoria e prestazioni piuttosto buone. Questa archiviazione supporta anche la persistenza su disco.
Supporto Docker
Possibilità di creare l'immagine Docker di GoAccess dall'upstream. Puoi ancora configurarlo completamente utilizzando il mapping dei volumi e modificando goaccess.conf. Vedi la sezione Docker qui sotto. È disponibile anche la documentazione su come utilizzare docker-compose.
GoAccess accetta qualsiasi stringa di formato di log personalizzata. Le opzioni predefinite includono, ma non sono limitate a:
GoAccess è stato progettato per essere un analizzatore di log veloce basato su terminale. La sua idea principale è analizzare rapidamente e visualizzare le statistiche del server web in tempo reale senza bisogno di utilizzare il browser (ottimo se si vuole fare una rapida analisi del log di accesso via SSH, o se si ama semplicemente lavorare nel terminale).
Serve anche come strumento pratico per il monitoraggio della sicurezza, rendendo facile individuare attività sospette, modelli di traffico insoliti, tentativi di brute-force, scanner, bot e richieste anomale direttamente dai tuoi log.
Mentre l'output del terminale è l'output predefinito, ha la capacità di generare un report HTML completo, autonomo e in tempo reale, oltre a report JSON e CSV.
Lo si può vedere più come uno strumento di comando di monitoraggio che altro.
GoAccess può essere compilato e utilizzato su sistemi *nix.
Scarica, estrai e compila GoAccess con:
$ wget https://tar.goaccess.io/goaccess-1.10.2.tar.gz
$ tar -xzvf goaccess-1.10.2.tar.gz
$ cd goaccess-1.10.2/
$ ./configure --enable-utf8 --enable-geoip=mmdb --with-zlib
$ make
# make install
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fiv
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
È più semplice installare GoAccess su GNU+Linux utilizzando il gestore di pacchetti preferito della propria distribuzione GNU+Linux. Si noti che non tutte le distribuzioni avranno l'ultima versione di GoAccess disponibile.
# apt-get install goaccess
Nota: È probabile che questo installi una versione obsoleta di GoAccess. Per assicurarti di eseguire l'ultima versione stabile di GoAccess, consulta l'opzione alternativa di seguito.
$ wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
$ sudo apt-get update
$ sudo apt-get install goaccess
Nota:
.deb nel repository ufficiale sono disponibili anche tramite HTTPS. Potrebbe essere necessario installare apt-transport-https.# yum install goaccess
# pacman -S goaccess
# emerge net-analyzer/goaccess
# brew install goaccess
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess
# zypper ar -f obs://server:http http
# zypper in goaccess
# pkg install goaccess
# pkgin install goaccess
GoAccess può essere utilizzato in Windows tramite Cygwin. Vedi i pacchetti di Cygwin. Oppure tramite il Sottosistema GNU+Linux su Windows 10.
Un'immagine Docker è stata aggiornata, in grado di dirigere l'output da un log di accesso. Se vuoi solo produrre un report, puoi inviare un log dall'ambiente esterno a un processo basato su Docker:
touch report.html
cat access.log | docker run --rm -i -v ./report.html:/report.html -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED -
O in tempo reale
tail -F access.log | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED --real-time-html -
Esiste anche documentazione su come utilizzare docker-compose.
Puoi anche compilare il binario per sistemi basati su Debian in un ambiente contenitore isolato per evitare di ingombrare il tuo sistema locale con le librerie di sviluppo:
$ curl -L "https://github.com/allinurl/goaccess/archive/refs/heads/master.tar.gz" | tar -xz && cd goaccess-master
$ docker build -t goaccess/build.debian-12 -f Dockerfile.debian-12 .
$ docker run -i --rm -v $PWD:/goaccess goaccess/build.debian-12 > goaccess
Puoi leggere ulteriori informazioni sull'utilizzo dell'immagine Docker in DOCKER.md.
GoAccess ha requisiti minimi, è scritto in C e richiede solo ncurses. Tuttavia, di seguito è riportata una tabella di alcune dipendenze opzionali in alcune distribuzioni per compilare GoAccess dal sorgente.
| Distro | NCurses | GeoIP (opt) | GeoIP2 (opt) | OpenSSL (opt) |
|---|---|---|---|---|
| Ubuntu/Debian | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
| RHEL/CentOS | ncurses-devel | geoip-devel | libmaxminddb-devel | openssl-devel |
| Arch | ncurses | geoip | libmaxminddb | openssl |
| Gentoo | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
| Slackware | ncurses | GeoIP | libmaxminddb | openssl |
Nota: Potrebbe essere necessario installare strumenti di compilazione come gcc, autoconf, gettext, autopoint ecc. per compilare/costruire software dal sorgente. ad esempio base-devel, build-essential, "Development Tools".
L'archiviazione in memoria offre prestazioni migliori al costo di limitare la dimensione del set di dati alla quantità di memoria fisica disponibile. GoAccess utilizza tabelle hash in memoria. Ha un uso della memoria molto buono e prestazioni abbastanza buone. Questa archiviazione supporta anche la persistenza su disco.
Vedi le opzioni che possono essere fornite al comando o specificate nel file di configurazione. Se specificate nel file di configurazione, le opzioni lunghe devono essere usate senza anteporre --.
Nota: Invio di dati tramite pipe a GoAccess non richiederà una finestra di configurazione del log/data/ora, sarà necessario definirla preventivamente nel file di configurazione o nella riga di comando.
Per produrre un output su un terminale e generare un report interattivo:
# goaccess access.log
Per generare un report HTML:
# goaccess access.log -a > report.html
Per generare un file di report JSON:
# goaccess access.log -a -d -o report.json
Per generare un report CSV su stdout:
# goaccess access.log --no-csv-summary -o csv
GoAccess offre anche grande flessibilità per il filtraggio e l'analisi in tempo reale. Ad esempio, per diagnosticare rapidamente i problemi monitorando i log da quando goaccess è stato avviato:
# tail -f access.log | goaccess -
E ancora meglio, per filtrare mantenendo aperta una pipe per preservare l'analisi in tempo reale, possiamo usare tail -f e uno strumento di corrispondenza di modelli come grep, awk, sed, ecc.:
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
o per analizzare dall'inizio del file mantenendo la pipe aperta e applicando un filtro
# tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -
Ci sono diversi modi per analizzare più log con GoAccess. Il più semplice è passare più file di log alla riga di comando:
# goaccess access.log access.log.1
È persino possibile analizzare file da una pipe mentre si leggono file regolari:
# cat access.log.2 | goaccess access.log access.log.1 -
Nota: il trattino singolo viene aggiunto alla riga di comando per far sapere a GoAccess che deve leggere dalla pipe.
Ora se vogliamo aggiungere più flessibilità a GoAccess, possiamo usare zcat --force per leggere file compressi e non compressi. Ad esempio, se volessimo elaborare tutti i file di log access.log*, possiamo fare:
# zcat --force access.log* | goaccess -
Nota: Su Mac OS X, usa gunzip -c invece di zcat.
Usa --jobs=<count> (o -j) per abilitare l'analisi multi-thread. Ad esempio:
# goaccess access.log -o report.html -j 4
E usa --chunk-size=<256-32768> per regolare la dimensione del chunk, la dimensione predefinita del chunk è 1024. Ad esempio:
# goaccess access.log -o report.html -j 4 --chunk-size=8192
GoAccess ha la capacità di produrre dati in tempo reale nel report HTML. Puoi persino inviare via email il file HTML poiché è composto da un singolo file senza dipendenze esterne, quanto è bello!
Il processo di generazione di un report HTML in tempo reale è molto simile al processo di creazione di un report statico. Solo --real-time-html è necessario per renderlo in tempo reale.
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
Per visualizzare il report puoi navigare a http://your_site/report.html.
Per impostazione predefinita, GoAccess utilizzerà il nome host del report generato. Opzionalmente, puoi specificare l'URL a cui si connetterà il browser del client. Vedi FAQ per un esempio più dettagliato.
# goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io
Per impostazione predefinita, GoAccess ascolta sulla porta 7890, per utilizzare una porta diversa da 7890, puoi specificarla come (assicurati che la porta sia aperta):
# goaccess access.log -o report.html --real-time-html --port=9870
E per associare il server WebSocket a un indirizzo diverso da 0.0.0.0, puoi specificarlo come:
# goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
Nota: Per inviare dati in tempo reale su una connessione TLS/SSL, devi usare --ssl-cert=<cert.crt> e --ssl-key=<priv.key>.
Un altro utile pipe sarebbe filtrare le date dal log web.
Il seguente otterrà tutte le richieste HTTP a partire da 05/Dec/2010 fino alla fine del file.
# sed -n '/05\/Dec\/2010/,$ p' access.log | goaccess -a -
o utilizzando date relative come ieri o domani:
# sed -n '/'$(date '+%d\/%b\/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
Se vogliamo analizzare solo un determinato intervallo di tempo dalla DATA a alla DATA b, possiamo fare:
# sed -n '/5\/Nov\/2010/,/5\/Dec\/2010/ p' access.log | goaccess -a -
Se vogliamo preservare solo una certa quantità di dati e riciclare l'archiviazione, possiamo mantenere solo un certo numero di giorni. Ad esempio per mantenere e mostrare gli ultimi 5 giorni:
# goaccess access.log --keep-last=5
Supponendo che il tuo log contenga il campo virtual host. Ad esempio:
vhost.io:80 8.8.4.4 - - [02/Mar/2016:08:14:04 -0600] "GET /shop HTTP/1.1" 200 615 "-" "Googlebot-Image/1.0"
E vorresti aggiungere il virtual host alla richiesta per vedere a quale virtual host appartengono gli URL principali:
awk '$8=$1$8' access.log | goaccess -a -
Per fare lo stesso, ma anche utilizzare il filtraggio e l'analisi in tempo reale:
tail -f access.log | unbuffer -p awk '$8=$1$8' | goaccess -a -
Per escludere un elenco di virtual host puoi fare quanto segue:
# grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -
Per analizzare pagine specifiche, ad esempio visualizzazioni di pagina, html, htm, php, ecc. all'interno di una richiesta:
# awk '$7~/\.html|\.htm|\.php/' access.log | goaccess -
Nota, $7 è il campo richiesta per il formato log comune e combinato (senza Virtual Host), se il tuo log include Virtual Host, probabilmente vorrai usare $8 invece. È meglio controllare quale campo stai cercando, ad esempio:
# tail -10 access.log | awk '{print $8}'
O per analizzare un codice di stato specifico, ad esempio 500 (Errore interno del server):
# awk '$9~/500/' access.log | goaccess -
O più codici di stato, ad esempio tutti i 3xx e 5xx:
# tail -f -n +0 access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess -o out.html -
E per ottenere una stima di quanti bot (crawler) stanno colpendo il tuo server:
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
Inoltre, vale la pena sottolineare che se vogliamo eseguire GoAccess con priorità inferiore, possiamo eseguirlo come:
# nice -n 19 goaccess -f access.log -a
e se non vuoi installarlo sul tuo server, puoi comunque eseguirlo dalla tua macchina locale!
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess - --log-format=COMBINED
Nota: SSH richiede -n affinché GoAccess possa leggere da stdin. Inoltre, assicurati di utilizzare chiavi SSH per l'autenticazione poiché non funzionerà se è richiesta una passphrase.
Riceviamo molte domande e problemi a cui è già stata data risposta.
GoAccess ha la capacità di elaborare i log in modo incrementale attraverso la sua archiviazione interna e scaricare i dati su disco. Funziona nel seguente modo:
--persist, quindi lo stesso set di dati può essere caricato con.--restore. Se vengono passati nuovi dati (tramite pipe o attraverso un file di log), verranno aggiunti al set di dati originale.GoAccess tiene traccia degli inode di tutti i file elaborati (supponendo che i file rimangano sulla stessa partizione), inoltre estrae uno snippet di dati dal log insieme all'ultima riga analizzata di ogni file e il timestamp dell'ultima riga analizzata. Ad esempio: inode:29627417|line:20012|ts:20171231235059
Prima confronta se lo snippet corrisponde al log in fase di analisi, se corrisponde, presume che il log non sia cambiato drasticamente, ad esempio non sia stato troncato. Se l'inode non corrisponde al file corrente, analizza tutte le righe. Se il file corrente corrisponde all'inode, legge le righe rimanenti e aggiorna il conteggio delle righe analizzate e il timestamp. Come ulteriore precauzione, non analizzerà le righe di log con un timestamp ≤ di quello memorizzato.
I dati tramite pipe funzionano in base al timestamp dell'ultima riga letta. Ad esempio, analizzerà e scarterà tutte le voci in arrivo fino a quando non trova un timestamp >= di quello memorizzato.
// log di accesso del mese scorso
# goaccess access.log.1 --persist
poi, caricalo con
// aggiungi il log di accesso di questo mese e preserva i nuovi dati
# goaccess access.log --restore --persist
Per leggere solo i dati persistenti (senza analizzare nuovi dati)
# goaccess --restore
feedback. Sentiti libero di utilizzare il tracker dei problemi di GitHub e le pull request per discutere e inviare modifiche al codice.
Puoi contribuire alle nostre traduzioni modificando i file .po direttamente su GitHub o utilizzando l'interfaccia visiva inlang.com
Buon divertimento!