Skip to content

Premessa

LOG è l’estensione di un file prodotto automaticamente che può contenere record di eventi provenienti da determinati software e sistemi operativi. Nei sistemi Linux i file di log dei vari applicativi vengono salvati dentro la cartella /var/log.

Il log (registro) è in pratica una sequenza di registrazioni di dati. In un web server, il log tiene traccia di tutte le chiamate GET e POST ricevute, è un file che contiene molti dati utili per poter fare svariate considerazioni come, ad esempio, quali URL di un sito web vengono scansionati più spesso dai motori di ricerca.

In altre guide abbiamo visto alcuni metodi per monitorare e analizzare il log del web server:

In questo tutorial vorrei mostrare come monitorare il log del web server in tempo reale, attraverso la shell SSH ed il comando TAIL, combinato con un paio di altri comandi utili a filtrare righe e colonne del file log.

Il comando TAIL

Il comando tail è un’utilità della riga di comando per l’output dell’ultima parte dei file forniti tramite lo standard input. Scrive i risultati sullo standard output. Per impostazione predefinita, tail restituisce le ultime dieci righe di ogni file fornito e può anche essere usato per seguire un file in tempo reale e guardare mentre vengono scritte nuove righe.

Sintassi

La sintassi base del comando tail è la seguente:

tail [OPTION]... [FILE]...

Vediamo gli argomenti (le opzioni) che possiamo usare con il comando tail:

-c, --bytes=[+]NUM

Tail stampa gli ultimi NUM byte; oppure usa -c + NUM per creare un output che inizia con il byte NUM di ogni file

-f, --follow[={name|descriptor}]

Tail stampa dati aggiunti man mano che il file cresce; un argomento opzione assente significa ‘descriptor’. Con –follow (-f), per impostazione predefinita tail segue il descrittore di file, il che significa che anche se un file monitorato con tail viene rinominato, tail continuerà a seguirne la fine. Questo comportamento predefinito non è utile quando si desidera tenere traccia del nome effettivo del file, non del file descrittore (ad esempio, rotazione del registro). Usa –follow=name in questo caso. Ciò fa sì che tail possa tenere traccia del file anche se rinominato.

-n, --lines=[+]NUM

Tail stampa le ultime NUM righe, invece delle ultime 10; oppure usa -n + NUM per creare un output che inizia con la riga NUM.

--max-unchanged-stats=N

Con –follow=name, riapre un FILE che non ha cambiato dimensione dopo N (default 5) iterazioni per vedere se è stato scollegato o rinominato (questo è il solito caso di file di log ruotati); con inotify, questa opzione è raramente utile.

--pid=PID

Con -f, termina dopo l’ID del processo, il PID v iene terminato.

-q, --quiet, --silent

Tail non produce mai intestazioni che danno i nomi ai file.

--retry

Tail continua a provare ad aprire un file se è inaccessibile.

-s, --sleep-interval=N

Con -f, tail genera una pausa per circa N secondi (default 1.0) tra le iterazioni; con inotify e –pid = P, controlla il processo P almeno una volta ogni N secondi.

-v, --verbose

Tail produce sempre intestazioni che danno i nomi ai file.

-z, --zero-terminated

Il delimitatore di riga è NUL, non di nuova riga.

--help 

Tail mostra le informazioni di aiuto e termina il processo.

--version

Tail mostra le informazioni sulla versione e termina il processo.

Esempio pratico per il log del web server

La versione del comando tail che uso più spesso usa il parametro -f oltre chiaramente al percorso del file di log da monitorare:

tail -f /var/log/nginx/access.log

Nel caso nella cartella ci fossero diversi log che vuoi monitorare contemporaneamente puoi usare il carattere jolly – wildcard o metacarattere “*” per comprendere tutti i file che hanno una parte del nome file in comune.

tail -f /var/log/nginx/*access.log

Il comando appena mostrato con il carattere jolly mostra in tempo reale le nuove righe di tutti i log in cartella che hanno “access.log” nel nome file, ad esempio:

  • sito-1-access.log
  • sito-2-access.log
  • sito-3-access.log

TAIL + GREP: filtrare solo le righe desiderate

Per siti molto trafficati, il semplice comando tail genererebbe uno stream di righe troppo veloce, poco utile perché difficilmente leggibile. In tal caso possiamo usare il comando GREP assieme a tail.

Grep è un’utilità della riga di comando per la ricerca di set di dati in testo normale per le righe che corrispondono a un’espressione regolare.

Ad esempio, potremmo voler filtrare solo le righe che contengono la stringa “Googlebot”, oppure di qualsiasi altro user-agent o informazione presente nelle righe del log.

tail -f /var/log/nginx/*access.log | grep Googlebot
TAIL + GREP: filtrare solo le righe desiderate
TAIL + GREP: filtrare solo le righe desiderate

TAIL + GREP + AWK: filtrare solo righe e colonne desiderate

Il log del web server è composto da righe che contengono dati divisi da un separatore, come se fossero colonne. In riga troviamo l’IP di chi invia la richiesta, lo status code, l’URL della risorsa richiesta, l’user-agent e diverse altre informazioni che dipendono dalla configurazione di ciascun log.

Una volta che hai capito quali colonne vuoi monitorare puoi usare tail + grep + awk per mostrare solo le righe e le colonne che interessano. Con il seguente comando, tail mostrerebbe solo i dati della prima colonna del log:

tail -f /var/log/nginx/*access.log | grep Googlebot | awk '{print $1}'

Per selezionare più colonne basta separare il valore con una virgola. In questo esempio seleziono le colonne 3 e 7 e, nel mio caso, viene stampato lo status code e la risorsa richiesta:

tail -f /var/log/nginx/*access.log | grep Googlebot | awk '{print $3,$7}'
TAIL + GREP  + AWK: filtrare solo righe e colonne desiderate
TAIL + GREP + AWK: filtrare solo righe e colonne desiderate

Nel tuo log probabilmente le colonne status code e risorsa corrispondono a numeri differenti e diversi dai miei, quindi devi fare delle prove. Se questa guida ti è stata utile votala così crescerà in classifica, e se avessi dubbi usa i commenti.

Articoli correlati

Autore

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ultimi articoli aggiornati

Richiedi un preventivo SEO e Google Ads

Porta il tuo sito web al livello successivo con l’expertise di EVE Milano. La nostra agenzia di Search Marketing ha ricevuto oltre 1128 richieste di preventivo, un segnale chiaro della fiducia che imprenditori e manager, come te, ripongono nella nostra specializzazione tecnica e verticale nella SEO e PPC. Se la tua organizzazione cerca competenze specifiche per emergere nei risultati di Google, noi siamo pronti a fornire quel valore aggiunto. Affidati alla nostra esperienza per fare la differenza.
Richiedi un preventivo

Non perderti altre guide, iscriviti per ricevere un avviso mensile con gli aggiornamenti del blog!

Iscriviti alla newsletter!

Informativa sui cookies

Noi e terze parti selezionate utilizziamo cookie o tecnologie simili per finalità tecniche e, con il tuo consenso, anche per le finalità di esperienza e misurazione come specificato nella cookie policy. Puoi liberamente prestare, rifiutare o revocare il tuo consenso, in qualsiasi momento, accedendo al pannello delle preferenze. Il rifiuto del consenso può rendere non disponibili le relative funzioni. Usa il pulsante “Accetta” per acconsentire. Usa il pulsante “Rifiuta” per continuare senza accettare.