Tempo di lettura: 2 minuti

File di log di grandi dimensioni possono causare enormi problemi: dalla consultazione allo stesso spazio occupato sulla macchina. La stessa gestione sarebbe veramente onerosa.
A tale inconveniente pone rimedio logrotate.

logrotate è un software creato per facilitare l’amministrazione di sistemi che generano grandi numeri di file di log. Permette in maniera automatica la rotazione, la compressione, la rimozionee l’invio per email dei file di log. I file di log possono essere processati giornalmente, settimanalmente, mensilmente o quando crescono troppo.

logrotate ha delle pagine di manuale molto chiare: questa guida non intende sostituirsi alla consultazione delle pagine di man. Riporto solo una configurazione che ho avuto necessità di creare per una applicazione web-based creata per un cliente.

Applicazione pratica di logrotate

Dopo aver creato l’applicazione secondo le specifiche dell’azienda, è emersa la necessità di valutare i log con un particolare software che la stessa azienda ha fatto realizzare. Il software di analisi esamina file compressi ma di dimensioni non troppo grandi (rallenta il sistema e se si blocca va riprocessato da capo) e mette in relazione gli accessi al server web con i log personalizzati, generati dalla stessa applicazione. Inoltre l’azienda utilizza AWStats per le statistiche di accesso all’applicazione.

Nella cartella /etc/logrotate.d/ è stato creato un file di configurazione simile a quello che segue:

  1. /www/myapp/logfiles/*.log {
  2.     size 300M
  3.     rotate 30
  4.     olddir /www/myapp/logfiles/parsed/
  5.     compress
  6.     delaycompress
  7.     create 777 user group
  8.     sharedscripts
  9.     prerotate
  10.         wget -O - http://myapp/cgi-bin/awstats.pl?config=myapp
  11.           \&framename=mainright\&update=1 > /dev/null
  12.     endscript
  13.     postrotate
  14.         /etc/init.d/apache2 reload > /dev/null
  15.     endscript
  16. }

Analizziamo la configurazione riga per riga.

  • Riga 1: /www/myapp/logfiles/*.log {:
    indica il percorso dei file di log e apre le direttive di configurazione.
  • Riga 2: size 300M:
    attiva la rotazione se il file è superiore ai 300 Mb
  • Riga 3: rotate 30:
    indica il numero di rotazioni prima che i vecchi files siano cancellati, in questo caso 30. Se il numero viene impostato a zero 0, i vecchi file vengono rimossi durante la rotazione.
  • Riga 4: olddir /www/myapp/logfiles/parsed/:
    sposta nella cartella parsed i vecchi file di log.
  • Riga 5: compress:
    comprime i vecchi file con gzip.
  • Riga 6: delaycompress:
    posticipa la compressione alla prossima esecuzione di logrotate.
  • Riga 7: create 777 user group:
    ricrea il file di log con i permessi (777) attributiti alla coppia utente/gruppo.
  • Riga 8: sharedscripts:
    normalmente i comandi nelle direttive prerotate e postrotate vengono eseguiti per ciascun file di log. Questo significa che un singolo script viene eseguito tante volte quanti sono i file da analizzare. Nel nostro caso è meglio usare questa direttiva in modo da “dire” a logrotate di eseguire lo script una volta sola.
  • Riga 9: prerotate:
    attiva una serie di operazioni prima di eseguire logrotate.
  • Righe 10 e 11: wget -O - http://myapp/cgi-bin/awstats.pl?config=myapp\&framename=mainright\&update=1 > /dev/null:
    le righe 10 e 11 fanno parte di un unico comando e vanno scritte senza spazi. Con questo comando andiamo a forzare l’aggiornamento di AWStats per non perdere righe utili alle statistiche di accesso.
  • Riga 12: endscript:
    termine delle istruzioni di prerotate.
  • Riga 13: postrotate:
    attiva una serie di operazioni dopo l’esecuzione di logrotate.
  • Riga 14: /etc/init.d/apache2 reload > /dev/null:
    ricarica il server web per rendere operativa la scrittura sui nuovi file di log.
  • Riga 15: endscript:
    termine delle istruzioni di postrotate.
  • Riga 16: }:
    chiusura delle direttive di configurazione.

Spero possa essere utile a voi come lo è stato a me 😉