Su una macchina Linux sono presenti diversi tipi di file di log:
I messaggi diagnostici del kernel, emessi all'avvio e in occasione di particolari operazioni hardware (ad esempio, quando viene collegata una nuova periferica USB), possono essere visualizzati con il comando dmesg
.
$ dmesg | head -5
[ 0.000000] Linux version 2.6.22-14-generic (buildd@terranova) (gcc version 4.1.3 20070929 (prerelease) (Ubuntu
4.1.2-16ubuntu2)) #1 SMP Tue Feb 12 07:42:25 UTC 2008 (Ubuntu 2.6.22-14.52-generic)
[ 0.000000] BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: 0000000000000000 - 000000000009dc00 (usable)
[ 0.000000] BIOS-e820: 000000000009dc00 - 00000000000a0000 (reserved)
[ 0.000000] BIOS-e820: 00000000000e4000 - 0000000000100000 (reserved)
Il file di log di default è /var/log/messages.
In generale, i file di log sono mantenuti tutti nella directory /var/log.
Le operazioni di cui prendere nota sono organizzate in diverse facility, corrispondenti ad alcune operazioni di base e tradizionali.
Le facility definite sono le seguenti:
Sono inoltre previste le facility da local0 a local7, che possono essere usati per scopi particolari.
Le registrazioni effettuate nei file di log sono associate ad uno dei seguenti livelli di priorità:
Il file /etc/syslog.conf contiene l'indicazione di dove registrare i messaggi di una determinata facility con una particolare priorità.
Ad esempio, righe di questo genere
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
indicano che i messaggi relativi alle facility daemon e kernel, di qualsiasi priorità (ad eccezione del livello debug) devono essere registrate nei file indicati (il segno -
indica che non deve essere fatto il sync dopo ogni operazione di scrittura).
Oltre che su file, le registrazioni di log possono essere mandate ad un terminale, ad un'altra macchina, a una lista di utenti collegati ecc. In proposito, si veda syslog.conf(5)
.
Con il programma logger si possono registrare operazioni per una determinata facility/priorità.
Ad esempio:
$ logger -p local0.notice aggiornato orologio di sistema
$ tail -1 /var/log/messages
Mar 30 22:33:06 localhost loris: aggiornato orologio di sistema
Da una sessione grafica, è possibile monitorare le registrazioni di log tramite xconsole, tramite il comando xconsole -file /dev/xconsole &
.
Si può determinare quali registrazioni far comparire sull'xconsole impostando il file /etc/syslog.conf con |/dev/xconsole
per le facility/priorità desiderate.
Può essere utile sapere quando è stato fatto l'ultimo login da un determinato utente. Quest'informazione si può ottenere con il comando lastlog
.
$ lastlog --user loris
Nome utente Porta Da Ultimo accesso
loris tty1 dom mar 30 22:39:19 +0200 2008
$ lastlog --user dino
Nome utente Porta Da Ultimo accesso
alice pts/4 07ud-w-l07-003.d mar mar 25 14:59:28 +0100 2008
Si veda lastlog(8)
per ulteriori informazioni.
La rotazione/compressione dei file di log è affidata al programma logrotate, invocato da cron a scadenze regolari e configurato tramite il file /etc/logrotate.conf (e i file della directory /etc/logrotate.d per i log delle applicazioni).
Si veda lastlog(8)
per ulteriori informazioni.
Potrebbe essere utile avviare uno script o, in generale, compiere una determinata azione, quando si verifica un determinato evento registrato in un file di log. Una strategia possibile è quella di usare il programma inotifywait, come nel seguente esempio:
#!/bin/sh
while inotifywait -e modify /var/log/messages; do
if tail -n1 /var/log/messages | grep httpd; then
gdialog --msgbox "Apache needs love!"
fi
done
Molte applicazioni server registrano i propri log in directory separate. Ad esempio: