Logrotate

← Torna ad Linux / Debian / Ubuntu

Cos’è logrotate

logrotate è uno strumento che:

  • ruota i file di log (li rinomina)
  • li comprime
  • li elimina dopo un certo tempo
  • evita che i log crescano all’infinito

Su Debian è usato di default per log di sistema, Apache, Nginx, ecc.

Come viene eseguito

Su Debian 11, logrotate:

  • non gira come demone
  • viene eseguito una volta al giorno tramite cron
    /etc/cron.daily/logrotate

Configurazione globale

Il file di configurazione con le opzioni globali del programma è

/etc/logrotate.conf

Opzioni:

  • weekly rotazione settimanale
  • rotate 4 mantiene 4 file ruotati
  • create crea un nuovo file vuoto dopo la rotazione
  • compress comprime i log vecchi (.gz)
  • delaycompress comprime dal secondo giro in poi
  • include /etc/logrotate.d carica le config dei servizi

I file di configurazione dei servizi sono in

/etc/logrotate.d

Configurazioni per singolo servizio

Cartella con i servizi configurati:

/etc/logrotate.d/

Ogni file in questa directory definisce come ruotare i log di uno specifico servizio.

Esempio: /etc/logrotate.d/apache2

/var/log/apache2/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    sharedscripts
    postrotate
        systemctl reload apache2 > /dev/null
    endscript
}

Esempio: /etc/logrotate.d/lsyncd

/var/log/lsyncd/lsyncd.log /var/log/lsyncd/lsyncd.status {
    daily
    rotate 7
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
}

Direttive più importanti

  • Frequenza daily
  • Numero di rotazioni rotate 7 mantiene 7 log vecchi, poi elimina i più vecchi
  • Compressione compress e delaycompress
  • Creazione del nuovo file create 640 root adm Permessi + utente + gruppo
  • Gestione errori
    • missingok se il file non esiste, non è errore
    • notifempty non ruota se il file è vuoto

Script primala rotazione

prerotate
   comando
endscript

Script dopo la rotazione

postrotate
   comando
endscript

Usato per:

  • ricaricare servizi
  • inviare segnali
  • aggiornare PID

Come avviene la rotazione (passo passo)

Supponiamo:

/var/log/app.log {
   daily
   rotate 3
   compress
}

Dopo la rotazione:

app.log        ← nuovo file
app.log.1.gz
app.log.2.gz
app.log.3.gz

Al giro successivo:

  • app.log.3.gz viene eliminato
  • tutto scala di un numero

Stato delle rotazioni

logrotate mantiene lo stato in:

/var/lib/logrotate/status

Serve per sapere quando è stata fatta l’ultima rotazione, anche se il job è giornaliero.

Testare una configurazione

Debug (non modifica nulla)

logrotate -d /etc/logrotate.conf

Forzare la rotazione

logrotate -f /etc/logrotate.conf

Verificare un file specifico

logrotate -d /etc/logrotate.d/mioservizio