Tutorial > Utilizzare Logrotate per gestire i file di log

Utilizzare Logrotate per gestire i file di log

Pubblicato il: 15 ottobre 2019

Log Logrotate Ubuntu

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.