I registri sono utili quando si desidera tenere traccia dell'utilizzo o risolvere i problemi di un'applicazione. Man mano che vengono registrate ulteriori informazioni, tuttavia, i file di registro utilizzano più spazio su disco. Nel tempo un file di registro può raggiungere dimensioni ingombranti. L'esaurimento dello spazio su disco a causa di un file di registro di grandi dimensioni è un problema, ma un file di registro di grandi dimensioni può anche rallentare il processo di ridimensionamento o backup del server virtuale. Inoltre, è difficile cercare un evento particolare se hai un milione di voci di registro da sfogliare. Quindi è una buona idea mantenere i file di registro a una dimensione gestibile e potarli quando diventano troppo vecchi per essere molto utili.
Fortunatamente, l'utilità logrotate semplifica la rotazione dei registri. La "rotazione dei registri" si riferisce alla pratica di archiviare il registro corrente di un'applicazione, avviare un nuovo registro ed eliminare i registri precedenti. Il sistema di solito esegue logrotate una volta al giorno e, quando viene eseguito, controlla le regole che possono essere personalizzate per directory o per log.
Come funziona logrotate
Il sistema esegue logrotate in base a una pianificazione, di solito giornaliera. Su mostdistributions, lo script che esegue logrotate daily si trova in/etc/cron.daily/logrotate
.
Alcune distribuzioni utilizzano una variazione. Ad esempio, su Gentoo lo script logrotate si trova in /etc/cron.daily/logrotate.cron
.
Se vuoi che logrotate venga eseguito più spesso (per la rotazione oraria del registro, ad esempio) devi usare cron per eseguire logrotate tramite uno script in/etc/cron.hourly
.
Quando logrotate viene eseguito, legge i suoi file di configurazione per determinare dove trovare i file di registro che deve ruotare, la frequenza con cui i file devono essere ruotati e quanti registri archiviati da conservare.
logrotate.conf
Il file di configurazione principale di logrotate si trova in /etc/logrotate.conf
.
Il file contiene i parametri predefiniti utilizzati da logrotate quando ruota i log. Il file è commentato, quindi puoi sfogliarlo per vedere come è impostata la configurazione. Molti dei comandi specifici in quel file sono descritti più avanti in questo articolo.
Nota che una riga nel file recita:
include /etc/logrotate.d
Quella directory contiene la maggior parte dei file di configurazione specifici dell'applicazione.
logrotate.d
Utilizzare il comando seguente per elencare il contenuto della directory che memorizza le impostazioni di registro specifiche dell'applicazione:
ls /etc/logrotate.d
A seconda di quanto è installato sul tuo server, questa directory potrebbe non contenere file o diversi. In generale, le applicazioni installate tramite il tuopackage manager creeranno anche un file di configurazione in /etc/logrotate.d
.
Di solito la directory contiene un file di configurazione per il tuo servizio syslog, che logrotate legge quando ruota i log di sistema. Questo file contiene una voce per vari log di sistema, insieme ad alcuni comandi simili a quelli contenuti in logrotate.conf
.
NOTA: Sulle versioni dei sistemi operativi Ubuntu precedenti a Karmic Koala (9.10) non c'è alcuna voce per un servizio syslog. Prima di quel rilascio, i log di sistema erano ruotati da un savelog
comando eseguito da /etc/cron.daily/sysklogd
copione.
All'interno di un file di applicazione
Ad esempio, considera il contenuto di un file di configurazione logrotate che potrebbe essere inserito quando installi Apache su un sistema Fedora:
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
Quando logrotate viene eseguito, verifica la presenza di file in /var/log/httpd
che terminano con log
e li ruota, se non sono vuoti. Se controlla la directory httpd e non trova alcun file di registro, non genera un errore. Quindi esegue il comando nel postrotate/endscript
block (in questo caso, un comando che dice ad Apache di riavviarsi), ma solo dopo aver elaborato tutti i log specificati.
Questo file di esempio non contiene alcune impostazioni incluse in logrotate.conf
file. I comandi in logrotate.conf
agiscono come impostazioni predefinite per la rotazione del registro. È possibile specificare impostazioni diverse per qualsiasi applicazione quando si desidera ignorare le impostazioni predefinite. Ad esempio, se sei un server web occupato, potresti voler includere un daily
comando nel blocco di configurazione di Apache in modo che i log di Apache ruotino quotidianamente invece della rotazione settimanale predefinita.
La prossima sezione descrive alcuni dei comandi più comunemente usati in un file di configurazione logrotate.
Comandi di configurazione
Puoi ottenere un elenco completo dei comandi utilizzati nei file di configurazione logrotate controllando la pagina man:
man logrotate
Questa sezione descrive i comandi più comunemente usati.
Ricorda, i file di configurazione per le applicazioni in /etc/logrotate.d
eredita le loro impostazioni predefinite dal /etc/logrotate.conf
principale file.
File di registro
Un file di registro e il suo comportamento di rotazione sono definiti elencando il file o i file di registro seguiti da una serie di comandi racchiusi tra parentesi graffe. La maggior parte dei file di configurazione dell'applicazione conterrà solo uno di questi blocchi, ma è possibile inserirne più di uno in un file o aggiungere blocchi di file di registro al logrotate.conf
principale file.
È possibile elencare più di un file di registro per un blocco utilizzando un carattere jolly nel nome o separando i file di registro nell'elenco con spazi. Ad esempio, per specificare tutti i file nella directory /var/foo che terminano con .log
e il file/var/bar/log.txt
, imposteresti il blocco come segue:
/var/foo/*.log /var/bar/log.txt {
rotate 14
daily
compress
delaycompress
sharedscripts
postrotate
/usr/sbin/apachectl graceful > /dev/null
Endscript
}
Ruota conteggio
Il rotate
comando determina quanti registri archiviati vengono restituiti prima chelogrotate inizi a eliminare quelli più vecchi. Ad esempio:
rotate 4
Questo comando dice a logrotate di conservare quattro registri archiviati alla volta. Se esistono quattro registri archiviati quando il registro viene ruotato di nuovo, il più vecchio viene eliminato per fare spazio al nuovo archivio.
Intervallo di rotazione
È possibile specificare un comando che indica a logrotate la frequenza con cui ruotare un registro particolare. I possibili comandi includono:
daily
weekly
monthly
yearly
Se non viene specificato un intervallo di rotazione, il registro verrà ruotato ogni volta che viene eseguito logrotate (a meno che un'altra condizione come size
è stato impostato).
Se si desidera utilizzare un intervallo di tempo diverso da quelli definiti, è necessario utilizzare cron per creare un file di configurazione separato. Ad esempio, se desideri ruotare ogni ora un particolare file di registro, puoi creare un file in/etc/cron.hourly
(potrebbe essere necessario creare anche quella directory) che conterrebbe una riga come la seguente:
/usr/sbin/logrotate /etc/logrotate.hourly.conf
Quindi inseriresti la configurazione per quell'esecuzione oraria di logrotate (la posizione del file di registro, se comprimere o meno i vecchi file e così via) in /etc/logrotate.hourly.conf
.
Taglia
Puoi utilizzare la size
comando per specificare una dimensione di file per logrotate da controllare quando si determina se eseguire una rotazione. Il formato del comando indica quali unità stai utilizzando per specificare la dimensione:
size 100k
size 100M
size 100G
Il primo esempio ruota il registro se supera i 100 kilobyte, il secondo se supera i 100 megabyte e il terzo se supera i 100 gigabyte. Non consiglio di utilizzare un limite di 100G, attenzione, l'esempio è appena sfuggito di mano lì.
Il comando size ha la priorità e sostituisce un intervallo di rotazione se entrambi sono impostati.
Compressione
Se vuoi che i file di log archiviati siano compressi (in formato gzip), puoi includere il seguente comando, solitamente in /etc/logrotate.conf
:
compress
La compressione è normalmente una buona idea, perché i file di registro di solito sono tutti testo e il testo si comprime bene. Se, tuttavia, hai alcuni log archiviati che non desideri comprimere, ma desideri comunque che la compressione sia attiva per impostazione predefinita, puoi includere il seguente comando in una configurazione specifica dell'applicazione:
nocompress
Un altro comando degno di nota per quanto riguarda la compressione è il seguente:
delaycompress
Questo comando è utile se si desidera comprimere i log archiviati, ma si desidera ritardare la compressione. Quando delaycompress
è attivo, un log archiviato viene compresso alla successiva rotazione del log. Questo può essere importante quando hai un programma che potrebbe ancora scrivere nel suo file oldlog per un po' di tempo dopo che ne è stato ruotato uno nuovo. Nota che delaycompress
funziona solo se hai compress
nella tua configurazione.
Un esempio di un buon momento per usare delaycompress
sarebbe quando a logrotate viene detto di riavviare Apache con la direttiva "graceful" o "reload". Poiché i vecchi processi Apache non terminano finché le loro connessioni non sono terminate, potrebbero potenzialmente tentare di registrare più elementi nel vecchio file per un po' di tempo dopo il riavvio. Ritardare la compressione assicura di non perdere quelle voci di registro extra quando i registri vengono ruotati.
Postrota
Logrotate esegue il postrotate
script ogni volta che ruota un log specificato in un blocco di configurazione. Solitamente si desidera utilizzare questo script per riavviare un'applicazione dopo la rotazione del registro in modo che l'app possa passare a un nuovo registro.
postrotate
/usr/sbin/apachectl restart > /dev/null
endscript
>/dev/null
dice a logrotate di reindirizzare l'output del comando da nessuna parte. In questo caso, non è necessario visualizzare l'output se l'applicazione è stata riavviata correttamente.
Il postrotate
il comando dice a logrotate che lo script da eseguire, viene avviato nella riga successiva e endscript
comando dice che lo script è terminato.
Script condivisi
Normalmente logrotate esegue postrotate
script ogni volta che gira un log. Ciò vale anche per più registri che utilizzano lo stesso blocco di configurazione. Ad esempio, un blocco di configurazione del server Web che fa riferimento sia al registro di accesso che al registro degli errori, se ruota entrambi, eseguirà il postrotate
script due volte (una volta per ogni file ruotato). Se entrambi i file vengono ruotati, il server Web viene riavviato due volte.
Per evitare che logrotate esegua lo script per ogni registro, puoi includere il seguente comando:
sharedscripts
Questo comando dice a logrotate di controllare tutti i log per quel blocco di configurazione prima di eseguire postrotate
sceneggiatura. Se uno o entrambi i log vengono ruotati, il postrotate
lo script viene eseguito solo una volta. Se nessuno dei log è stato ruotato, il postrotate
lo script non viene eseguito.
Dove andare dopo
Questo articolo fornisce una panoramica di ciò che fa logrotate e del tipo di opzioni di configurazione disponibili. Ora dovresti essere in grado di esplorare le configurazioni esistenti e adattarle alle tue esigenze. Per informazioni su come creare una configurazione di esempio (per ruotare i log per host virtuali personalizzati), consulta Esempi di configurazioni di logrotate e risoluzione dei problemi.