Logrotate

Da Inc0Wiki.

Scopo

Configurare logrotate per ruotare i log di sistema.
ESEMPIO:
Momento 0:
Esiste solo mail.log
Momento 1 - Prima rotazione:
mail.log diventa mail.log.1 e viene creato mail.log
Momento 2 - Seconda rotazione:
mail.log.1 diventa mail.log.2, mail.log diventa mail.log.1 e viene creato mail.log
Momento 3 - Terza rotazione: <be> mail.log2 diventa mail.log.3, mail.log.1 diventa mail.log.2, mail.log diventa mail.log.1 e viene creato mail.log

Pacchetti Necessari

logrotate

Configurazione

Esiste un solo file di configurazione da cui logrotate prende le informazioni ed è /etc/logrotate.conf.

/etc/logrotate.conf

Di seguito riporto il mio file di configurazione con relativi commenti:

# Ruota i log una volta al giorno
# Sostituibile, ad esempio, con ''weekly'' così da eseguire una rotazione settimanale.
daily

# Tieni i log per 16 rotazioni (16 giorni se il precedente parametro è impostato su ''daily'' o 16 settimane se impostato su ''weekly'')
rotate 16

# Comprimi i log con gzip
compress

# Se manca il file di log, passa al successivo senza generare errori.
# nomissingok fa esattamente l'opposto di quanto descritto prima
missingok

# Non comprime il file di log dell'ultima rotazione
# (Decommentare per abilitare l'opzione)
# delaycompress

# Al fine di mantenere leggibile e snello questo file è possibile creare uno o più file nella cartella sotto indicata contenenti le impostazioni sulla
# rotazione dei file di log delle applicazione che ci interessano.
include /etc/logrotate.d

# Informa root degli errori: indicate un altro utente o una mail se volete spedire i log da qualche altra parte
errors root

# Ruota anche se il file di log è vuoto
ifempty

# Non inviare i log ad alcun indirizzo
nomail

# La rotazione e la creazione dei log compressi avviene nella stessa cartella in cui risiede il file di log
noolddir

# Ruotiamo il file ''/var/log/wtmp'' mensilmente e teniamo uno storico di 4 rotazioni (quindi 4 mesi), il file di log che viene create (quello vuoto con
# lo stesso nome dell'originale) avrà come permessi 0664 e sarà di proprietà dell'utente ''root'' e apparterrà al gruppo ''utmp''.
/var/log/wtmp {
        monthly
        create 0664 root utmp
        rotate 4
}

# Ruotiamo il file ''/var/log/auth.log'' settimanalmente e teniamo uno storico di 16 rotazioni (quindi 4 mesi).
# Ciò che appare tra ''postrotate'' ed ''endscript'' viene eseguito immediatamento dopo il log è stato ruotato.
# Secondo la stessa logica, per eseguire un comando prima che il file di log vengua ruotato, è possibile usare ''prerotate'' ed ''endscript''.
# Queste direttive possono apparire solo all'interno della definizione di un logfile.
/var/log/auth.log {
        weekly
        postrotate
        killall -HUP syslogd
        endscript
}

/etc/logrotate.d/

In questa cartella è possibile creare un file che descrive come eseguire i log di uno o più file. Il formato da usare è quello precedentemente indicato in logrotate.conf.
Ecco di seguito il file di configurazione per la rotazione dei log di apache2:

/var/log/apache2/*.log {
  daily
  missingok
  rotate 60
  compress
  delaycompress
  notifempty
  sharedscripts
  postrotate
  /etc/init.d/apache2 reload > /dev/null 2>&1 || true
  endscript
}

Automatizzazione

logrotate viene invocato tramite cron. In quanto la rotazione dei log dovrebbe avvenire una volta al giorno, la soluzione ideale è predisporre l'invocazione di logrotate da parte di root una volta al giorno posizionando in /etc/cron.daily uno script bash di questo tipo:

#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf

Potete provare se la vostra configurazione funziona invocando manualmente logrotate e specificando l'opzione -v così da avere un report dettagliato di quello che succede:

# /usr/sbin/logrotate -v /etc/logrotate.conf

Credits

Autore: Incubus

E-Mail: theincubus (at) gmail (dot) com