Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

I file log

Come leggere e configurare i file di log generati da un web server Apache: cosa sono, a cosa servono e in quali casi possono esserci utili.
Come leggere e configurare i file di log generati da un web server Apache: cosa sono, a cosa servono e in quali casi possono esserci utili.
Link copiato negli appunti

I file log sono uno strumento fondamentale per la corretta amministrazione di un sistema informativo, poiché permettono l'analisi dello stato (presente e passato) dei servizi in esecuzione. Si tratta di semplici file di testo nei quali vengono riportati gli eventi che si verificano durante l'esecuzione di un determinato servizio, siano essi ordinari (eventi che rientrano nella normale attività) o straordinari (errori, richieste non valide, ecc). L'analisi dei log permette di individuare errori di configurazione, produrre statistiche sull'utilizzo dei servizi, verificare l'esistenza di tentativi di violazione della sicurezza, ecc.

Il termine log deriva dall'inglese logbook, termine con il quale nel gergo marittimo si indica il registro di navigazione tenuto a bordo di ogni imbarcazione. Sul registro di navigazione vengono annotati, ad intervalli di tempo regolari, le condizioni meteo, lo stato della nave e qualunque altro evento significativo. Con l'accezione di "registro" in cui annotare eventi in ordine cronologico, il termine log è stato importato in informatica.

Anche il server Apache è in grado di riportare gli eventi relativi alla sua attività in uno o più file log. Le funzionalità di base sono offerte dal modulo core e da mod_log_config, quindi attive per default in ogni installazione di Apache. Moduli aggiuntivi possono aggiungere ulteriori funzionalità di logging ed opzioni di configurazione per le stesse.

Configurazione di Apache

Le modalità con cui i file log vengono gestiti dipendono dalle particolari scelte effettuate in fase di configurazione. Le principali direttive di configurazione relative ai log di Apache sono:

  • ErrorLog, che controlla la destinazione del log;
  • ErrorLogFormat, che permette di specificare il formato degli eventi indicati nei log;
  • LogLevel, che permette di regolare il livello di dettaglio delle informazioni riportate nei log;
  • CustomLog, che consente di indicare ulteriori destinazioni per i messaggi di log oltre a quella indicata da ErrorLog.

La direttiva ErrorLog

La direttiva ErrorLog permette di specificare la destinazione dei messaggi memorizzati nel log. Questa può essere un percorso del filesystem del server (ad esempio, /var/log/httpd/error_log), un programma filtro, che riceverà i messaggi da Apache sul proprio standard input oppure un demone per la gestione centralizzata dei log (ad esempio, syslogd).

Per memorizzare i messaggi su file è sufficiente indicare il percorso del file log tra doppi apici, come nell'esempio di seguito:

ErrorLog "/var/log/httpd/error_log"

In questo caso, Apache creerà un file log di nome error_log nella directory /var/log/httpd. Si raccomanda di prestare particolare attenzione ai privilegi di accesso dei file di log e delle directory in cui essi risiedono. I rischi per la sicurezza dovuti ad un acesso improprio degli stessi sono molteplici. In primo luogo, è possibile che essi contengano informazioni riservate (ad esempio, gli indirizzi IP dei client che hanno effettuato richieste al server), per cui è bene restringere l'accesso in lettura solo agli amministratori del sistema. Analogamente, è opportuno impedire degli accessi in scrittura, per impedire ad eventuali attaccanti di coprire le proprie tracce rimuovendole dai log.

Per inviare i messaggi di log ad un altro programma, occorre invece specificare il percorso del programma destinatario, preceduto dal simbolo pipe |. Ad esempio:

ErrorLog "|/usr/local/apache/bin/rotatelogs"

La possibilità di inviare i messaggi in pipe ad un altro software rende la gestione dei log di Apache molto flessibile. In tal modo è possibile collegare direttamente ad Apache dei software per l'analisi dei log, produzione di statistiche, analisi antiintrusione, etc. I messaggi verranno immediatamente inviati al programma desiderato. L'alternativa meno efficiente a questo approccio è il cosiddetto polling: il programma destinatario dovrebbe leggere il file di log ad intervalli di tempo regolari ed elaborare gli eventuali nuovi messaggi. Il polling presenta diversi svantaggi, quali l'impossibilità di processare gli eventi immediatamente, ma solo ad intervalli di tempo, e l'eccessivo uso delle risorse (ad ogni aggiornamento bisogna aprire il file log, controllare la presenza di nuovi messaggi, etc). Questa opzione è tuttavia sconsigliata in ambiente Windows poiché, in base alla configurazione, essa può portare ad eccessiva frammentazione dello heap ed eventualmente al crash del server. Si rimanda alla documentazione ufficiale in merito a questi setup.

Infine, su sistemi Unix è possibile utilizzare un demone per la gestione centralizzata dei log (se presente). In questo caso, la sintassi da usare è syslog:facility, dove facility è una delle facility disponibili per il demone syslog in uso. I codici facility vengono utilizzati da syslog per distinguere il tipo di programma che genera il messaggio e trattare il messaggio in modo opportuno. Ad esempio, i messaggi del kernel potrebbero essere gestiti in modo diverso di quelli emessi da un normale servizio. Poiché la lista dei codici facility varia in base alla particolare implementazione di syslog, si rimanda alla documentazione del sistema operativo in uso.

ErrorLog syslog:daemon

Nell'esempio riportato sopra, Apache utilizzerà syslog indicando che i messaggi provengono da un demone di sistema.

Analogamente è possibile specificare delle etichette (tag) per distinguere i messaggi (ad esempio, quelli provenienti da VirtualHost diversi). Il tag viene specificato con un doppio punto e virgola. Ad esempio, per usare il tag "http", specificheremo:

ErrorLog syslog::httpd

La direttiva LogLevel

LogLevel controlla il livello di "verbosità" del log, ovvero la quantità di informazioni comprese nei messaggi del log. Un livello alto di verbosità produrrà log più lunghi e contenenti messaggi più dettagliati. Si potrebbe pensare quindi che la migliore scelta consista nell'impostare questo parametro al massimo livello. Tuttavia, questa scelta si rivelerebbe presto sconsiderata per un server in produzione. Un livello di dettaglio troppo elevato può portare a dei log molto lunghi, in cui molti messaggi sono semplici repliche di sè stessi.

Il livello di dettaglio dei messaggi di errore è controllato specificando uno dei valori indicati nella tabella riportata di seguito (in ordine crescente di dettaglio):

Livello Messaggi riportati
emerg Solo le emergenze (ad esempio, condizioni di errore che portano alla chiusura del server).
alert Errori gravi, per i quali è necessaria un'azione immediata.
crit Condizioni critiche, ad esempio errori di rete.
error Errori notificati durante l'esecuzione della richiesta (ad esempio, dall'interprete di scripting)
warn Condizioni anormali ma non critiche per l'esecuzione del server.
notice Condizioni normali. Operazioni che non generano errore ma sono significative per l'esecuzione del server.
info Condizioni normali. Operazioni comuni effettuate durante il normale svolgimento delle attività.
debug Indicazioni dettagliate sulle operazioni effettuate.
trace Dettagli passo passo sulle operazioni effettuate.

L'opzione trace si compone di 8 ulteriori livelli di dettaglio (da trace1 a trace8).

La direttiva ErrorLogFormat

ErrorLogFormat consente di specificare il formato dei messaggi di log, indicando quali variabili riportare in ogni messaggio (ad esempio, data e ora, indirizzo IP del client, ecc). La stringa di formato è composta da una sequenza di marcatori a cui corrispondono le variabili disponibili. Per ciascun marcatore Apache sostituirà il valore della variabile corrispondente.

Ad esempio, specificando la stringa nell'esempio riportato di seguito:

ErrorLogFormat "%t - %a - %M"

il server anteporrà ad ogni messaggio di log l'ora attuale (%t) e l'indirizzo IP del client (%a) separati da trattini. L'elenco completo dei marcatori e delle relative variabili è riportato nella documentazione ufficiale di Apache.

La direttiva CustomLog

La direttiva CustomLog è utilizzata per specificare un log per gli accessi, in maniera del tutto simile alla ErrorLog. In questo caso però, il contenuto del log specificato non riguarda condizioni d'errore, bensì i normali accessi al server. Tipicamente i file di configurazione di default distribuiti insieme ai binari di Apache contengono già una direttiva CustomLog configurata per registrare gli accessi nel file access_log (in ambiente Unix) o access.log (in ambiente Windows).

Conclusioni

Come per altre direttive di configurazione di Apache, anche quelle relative ai file log possono essere indicate sia nel file http.conf, con effetti globali, o nei file di configurazione dei VirtualHost, con effetto limitato al VirtualHost al quale si riferiscono.

Ti consigliamo anche