Logrotate è un software preinstallato nella maggior parte delle distribuzioni Linux, che ti permette di gestire il salvataggio e l’organizzazione a lungo termine dei file di log.
Spesso, gli applicativi presenti nel sistema, registrano un log degli eventi o di problemi riscontrati su disco: se non eliminati periodicamente, questi file possono crescere di dimensione fino a riempire il disco e causare malfunzionamenti.
Logrotate rappresenta la soluzione più comune per controllare periodicamente i file di log e gestire automaticamente la loro rotazione, compressione ed eliminazione al superamento di una determinata dimensione e/o età.
Configurazioni di base
Logrotate permette di definire alcuni parametri di base, che verranno utilizzati da tutte le configurazioni definite successivamente, attraverso il file presente al percorso /etc/logrotate.conf:
# imposta la rotazione dei file con cadenza settimanale
weekly
# Imposta quante rotazione conservare (4 settimane in questo esempio)
rotate 4
# create un nuovo file di log vuoto dopo aver ruotato il precedente
create
# include tutti i file di configurazione presenti nella seguente directory
include /etc/logrotate.d
In questo estratto di logrotate.conf, oltre ad applicare tutti i parametri sopra descritti, viene anche specificato di leggere tutte le configurazioni presenti nella directory /etc/logrotate.d : in questo modo puoi suddividere ogni configurazione per applicativo e/o contesto.
Le configurazioni di logrotate definiscono un set di regole per 1 o più file:
[FILE] [FILE?] [FILE?] {
[SETTINGS]
}
Un classico esempio è la configurazione di /var/log/messages:
/var/log/messages {
# Salva 5 rotazioni
rotate 5
# Rotazione file ogni settimana
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
Nell’esempio usato qui sopra, viene preso in considerazione solo il file messages e ne viene impostata la rotazione ogni settimana, fino a un massimo di 5. Al termine della quinta rotazione troverai quindi, nella stessa directory del file di log i seguenti file:
-rw-r----- 1 root adm 1215 Jul 29 06:47 messages
-rw-r----- 1 root adm 3895 Jul 28 06:49 messages.1
-rw-r----- 1 root adm 454 Jul 21 06:37 messages.2.gz
-rw-r----- 1 root adm 506 Jul 15 06:40 messages.3.gz
-rw-r----- 1 root adm 456 Jul 7 06:41 messages.4.gz
Alcune tra le impostazioni più importanti sono:
-
daily, monthly, weekly, yearly: Indica con quale cadenza effettuare la rotazione del file di log
-
compress, nocompress: Se comprimere o no le vecchie rotazioni del file
-
maxage: Dopo quanti giorni eliminare le vecchie rotazioni
-
size: Imposta la rotazione solo se i file indicati sono più grande della dimensione specificata. É possibile usare dei suffissi per indicare il formato della dimensione (ad esempio “k” per kilobytes, “M” per megabytes)
-
rotate: Numero di log ruotati che devono essere salvati prima di essere rimossi definitivamente. Se impostato a 0, i file di log verranno cancellati senza essere ruotati.
Nel caso in cui volessi impostare le stesse regole per più file, puoi accodare più percorsi, separandoli con la virgola. Ad esempio:
/var/log/custom_log, /var/log/alternative_log_file, /var/log/another_log {
…
}
Questa configurazione verrà utilizzata per il file custom_log, alternative_log_file e another_log.
In alternativa puoi utilizzare maschere di file come ad esempio:
/var/custom/logs/*, /var/log/custom_log {
# Questa configurazione ruoterà tutti i file presenti nella directory
# /var/custom/logs/* e il file /var/log/custom_log
...
}
Utilizzare l’impostazione dateext
L’impostazione dateext ti permette di aggiungere al nome file la data di rotazione, in modo da riconoscere facilmente la data dei log.
/var/log/custom.log {
size 100M
dateext
rotate 3
compress
maxage 100
}
La configurazione indicata sopra, archivierà il file custom.log non appena raggiunge i 100M, fino a un massimo di 3 volte oppure al raggiungimento di 100 giorni. Attraverso l’opzione compress, il file archiviato verrà inoltra compresso in formato gzip.
I nomi dei file, una volta ruotati avranno la data di rotazione come indicato sotto:
# ls /var/log
-rw-r--r-- 1 user user 8980 2019-06-09 22:10 custom.log-20180609.gz
-rwxrwxrwx 1 user user 0 2019-06-09 22:11 custom.log
Inviare i log via email
Logrotate ti permette di eseguire script personalizzati allo scatenarsi di determinati eventi, come ad esempio, dopo ogni rotazione di log, sfruttando le parole chiave postrotate / endscript.
Un possibile utilizzo, può essere l’invio dei log tramite email a rotazione completata: per procedere devi prima creare uno script per inviare i file al tuo indirizzo email:
#!/bin/bash
# Impacchettiamo tutti i log
tar -cvf /tmp/logpack.tar /var/log/messages*
# Inviamo l email
echo "Pacchetto log" | mail -s "Pacchetto log" [email protected] -A /tmp/logpack.tar
Salva il file sopra indicato nella tua directory home, ad esempio /home/[nome_utente]/sendlog.sh e assicurati di abilitare i permessi necessari attraverso:
# sudo chmod u+x /home/user/sendlog.sh
Adesso modifica il file di configurazione logrotate come segue:
/var/log/messages {
...
postrotate
…
/home/user/sendlog.sh
endscript
}
Salva la configurazione per applicare le modifiche.
Una volta completato, riceverai un’email con l’archivio dei log sopra descritti ad ogni rotazione log.