Logrotate

Come suggerisce il nome stesso, logrotate e' un'applicazione che si occupa di ruotare i file di log. L'archiviazione puo' avvenire in base alla dimensione oppure con criteri temporali. Per salvaguardare l'occupazione di spazio disco, i file ruotati possono essere compressi.

Diamo un'occhiata al file di configurazione (/etc/logrotate.conf):

weekly

rotate 4

create

#compress

include /etc/logrotate.d

/var/log/wtmp {

missingok

monthly

create 0664 root utmp

rotate 1

}

/var/log/btmp {

missingok

monthly

create 0660 root utmp

rotate 1

}

La prima riga (weekly) indica che i file vengono ruotati settimanalmente. Si possono archiviare giornalmente, settimanalmente o mensilmente (daily, weekly, montly).La seconda direttiva (rotate) viene utilizzata per configurare logrotate in modo tale da conservare 4 file per log (quindi l'originale + 3 ruotati). La parola 'create' serve per far generare un nuovo file vuoto dopo la rotazione del dato originale. Con l'opzione 'compress' e' possibile comprimere i log. La direttiva "include" permette a logrotate di includere e processare altre configurazioni (scritte dalle applicazioni installate sul server come ad esempio apache, mysql, ecc.):

ls -al /etc/logrotate.d/
total 48
drwxr-xr-x   2 root root 4096 2009-09-21 12:33 .
drwxr-xr-x 106 root root 4096 2009-09-21 18:59 ..
-rw-r--r--   1 root root  303 2009-09-21 12:33 apache2
-rw-r--r--   1 root root   84 2008-10-11 07:09 apt
-rw-r--r--   1 root root   79 2008-10-26 22:04 aptitude
-rw-r--r--   1 root root  111 2008-09-05 17:52 dpkg
-rw-r--r--   1 root root  151 2007-09-29 13:23 iptraf
-rw-r--r--   1 root root   74 2008-07-05 02:09 mrtg
-rw-r--r--   1 root root  837 2009-04-19 03:12 mysql-server
-rw-r--r--   1 root root  417 2008-07-07 22:43 privoxy
-rw-r--r--   1 root root  515 2008-08-14 02:21 rsyslog
-rw-r--r--   1 root root  190 2009-01-23 12:53 tor

Ci sono poi le istruzioni su come ruotare due file "/var/log/wtmp" e "/var/log/btmp". La direttiva "missingok" serve per non far generare messaggi di errore e passare al prossimo log se il file da ruotare non e' presente sulla macchina. I parametri di "create" indicano i permessi, il proprietario ed il gruppo del nuovo file creato.

Vediamo adesso il contenuto del file /etc/logrotate.d/apache2 generato al momento dell'installazione del server web:

/var/log/apache2/*.log {
weekly
missingok
rotate 4
size 250M
compress
delaycompress
create 640 root adm
sharedscripts
postrotate
if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
/etc/init.d/apache2 reload > /dev/null
fi
endscript
}

In questo caso la rotazione avviene solamente se il file e' di dimensioni di almeno 250Mb (il controllo avviene settimanalmente). "delaycompress" serve per far comprimere il log non alla prima rotazione ma alla seconda, in modo tale se ci sono programmi che stanno ancora scrivendo nel file non ci saranno problemi. "postrotate" fa eseguire un comando dopo la rotazione del log e  "sharedscripts" serve per far eseguire questo comando solamente una volta ed e' utile se, come nel nostro esempio, vengono ruotati piu' di un file (/var/log/apache2/*.log)

Vediamo infine la struttura di una directory che contiene i file ruotati con logrotate:

ls -al /var/log/apache2/
total 168408
drwxr-x--- 2 root adm          4096 Sep 20 06:25 ./
drwxr-xr-x 8 root root         4096 Sep 20 06:25 ../
-rw-r----- 1 root adm             0 Jan 18  2009 access.log
-rw-r----- 1 root adm           372 Jan 14  2009 access.log.1
-rw-r----- 1 root adm          1113 Jan 11  2009 access.log.2.gz
-rw-r----- 1 root adm      26408652 Sep 22 23:43 error.log
-rw-r----- 1 root adm      63336636 Sep 20 06:25 error.log.1
-rw-r----- 1 root adm       2162127 Sep 13 06:25 error.log.2.gz
-rw-r----- 1 root adm       2102370 Sep  6 06:25 error.log.3.gz
-rw-r----- 1 root adm       2077211 Aug 30 06:25 error.log.4.gz
-rw-r----- 1 root adm             0 Feb  1  2009 rewrite.log
-rw-r----- 1 root adm         84275 Jan 27  2009 rewrite.log.1
-rw-r----- 1 root adm         14001 Jan 24  2009 rewrite.log.2.gz
-rw-r--r-- 1 root root         3439 Jan 17  2009 rewrite.log.3.gz