Gestire i log in Linux con Logrotate


Logrotate è uno strumento molto utile per la gestione dei log in Linux, mette a disposizione numerose opzioni come la rotazione automatica, la compressione e l’invio tramite mail dei file di log.
I log possono essere ruotati ogni ora, giornalmente, settimanalmente o mensilmente.

Logrotate è installato di default in quasi tutte le distribuzioni e viene eseguito tramite cron.

I due file più importanti di questa applicazione sono /etc/logrotate.conf e /var/lib/logrotate.status.
In alcuni sistemi è possibile trovare /var/lib/logrotate/status al posto di /var/lib/logrotate.status.

/etc/logrotate.conf è il file che contiene la configurazione dello strumento mentre nel secondo file si trovano le informazioni relative all’ultima rotazione dei log.
Le opzioni presenti in /etc/logrotate.conf sono usate come default per la gestione dei log ma è possibile specificare impostazioni diverse da applicare a ogni file di log aggiungendo i file di configurazione nella cartella /etc/logrotate.d.

Le principali opzioni che proviamo in /etc/logrotate.conf sono le segueni
rotate <num> – Il numero di volte per cui i log vengono ruotati prima di essere cancellati.
daily – La rotazione deve essere fatta giornalmente.
weekly – La rotazione deve essere fatta settimanalmente
monthly – La rotazione deve essere fata mensilmente
notifempty – Non eseguire la rotazione se il log è vuoto.
compress – Comprimere il file dopo la rotazione.
delaycompress – Rinviare la compressione alla prossima rotazione.
missingok – Se manca un log non deve essere generato un errore ma l’operazione deve essere continuata con il file successivo.
create <mode> <owner> <group> – Dopo la rotazione viene creato un nuovo file con queste caratteristiche.

Il file /etc/logrotate.conf sarà quindi simile al seguente

weekly

# keep 4 weeks worth of backlogs
rotate 4

# send errors to root
errors root
# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress
1
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own lastlog or wtmp –we’ll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/lastlog {
    monthly
    rotate 1
}

Interessante notare la presenza dell’opzione include /etc/logrotate.d.
Questa impostazione specifica che le applicazioni che generano log possono utilizzare logrotate inserendo un file di configurazione all’interno di questa cartella.

Installando apache viene infatti creato un file httpd con un contenuto simile al seguente

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

In questo file possiamo notare la presenza di un parametro di cui non abbiamo parlato in precedenza che è postrotate.
Le opzioni prerotate e postrotate permettono di specificare gli script che devono essere eseguiti prima e dopo la rotazione dei log.
Un’altra opzione interessante è sharedscripts tramite la qualche si specifica che lo script deve essere eseguito solo una volta e non per tutti i file di cui si esegue la rotazione.
Nel caso di apache i file di log rotati sono infatti più di uno ma lo script esegue semplicemente il reload di apache e quindi non c’è bisogno che venga eseguito due volte.