Applicare la conoscenza
Un articolo precedente Comprendere l'utilità logrotate ha descritto cosa fa logrotate e come è possibile configurarlo. Questo articolo applica queste conoscenze alla creazione di una soluzione di rotazione dei registri per uno o più host virtuali personalizzati. Identifica anche alcune opzioni per il test e la risoluzione dei problemi di logrotate.
Collegando tutto insieme:log degli host virtuali
Per mostrare come puoi usare logrotate per le tue applicazioni, ecco un esempio che tornerà utile a molte persone:rotazione dei log per i tuoi host virtuali personalizzati. L'esempio utilizza Apache ®, ma puoi modificarlo per altri server web come nNinx® o Lighttpd® , di solito semplicemente modificando lo script di post-ruotazione.
Innanzitutto, crea un file per contenere la configurazione che dice a logrotate cosa fare con i file di registro dell'host virtuale. Non modificare il file mainconfig o il file di configurazione del server web perché un futuro aggiornamento del pacchetto potrebbe voler sovrascrivere la configurazione. Invece, crea il tuo file con il seguente comando:
/etc/logrotate.d/virtualhosts
Questo esempio lancia tutti gli host virtuali in un unico file, ma se hai un host più occupato di altri potresti voler creare file di configurazione separati per gestire le esigenze dei tuoi diversi domini. L'esempio specifica diversi elementi che probabilmente sono già impostati nella tua configurazione principale, solo per coprire tutte le basi.
I file
Supponi di avere due domini virtuali, domain1.com e dominio2.com e che i file di registro per ciascuno si trovano in /home/demo/public_html/(nome dominio)/log .Il tuo file di configurazione deve dire a logrotate dove trovare i file di registro, quindi avviare il blocco di configurazione per loro:
/home/demo/public_html/domain1.com/log/*log /home/demo/public_html/domain2.com/log/*log {
Se hai più directory o file di log da aggiungere, inseriscili in quell'elenco.
Ruota
Quindi, assicurati che logrotate conservi solo tutti i vecchi log che desideri:
rotate 14
L'esempio utilizza 14 file per conservare due settimane di registri, ma puoi modificare quel numero per soddisfare le tue esigenze.
Intervallo
Ora, dì al server web di ruotare questi registri ogni giorno (di nuovo, cambialo se preferisci un intervallo più lungo):
daily
Taglia (opzionale)
L'impostazione della dimensione specifica una dimensione massima per i tuoi log. Quando il registro raggiunge tale dimensione, viene attivata una rotazione del registro.
size 50M
L'impostazione della dimensione è facoltativa qui perché sovrascrive qualsiasi condizione di rotazione basata sul tempo. Puoi specificare sia un intervallo di tempo che una dimensione massima, ma se lo fai, logrotate ignora l'impostazione dell'intervallo di tempo.
Compressione
Specifica se desideri comprimere questi registri quando vengono nuovamente archiviati. Questo esempio usa delaycompress
comando per tenere conto del riavvio regolare di Apache, il che significa che devi anche attivare la compressione:
compress
delaycompress
Script condivisi
Potresti avere diversi host virtuali e ciò significherebbe che diversi registri ruotano. Per assicurarti che il server web venga riavviato solo al termine di tutte le rotazioni, aggiungi la seguente riga:
sharedscripts
Postrota
Specifica uno script post-rotazione per riavviare il server web:
postrotate
/usr/sbin/apachectl graceful > /dev/null
endscript
E infine, chiudi il blocco di configurazione con una parentesi graffa:
}
L'intero file
Di seguito è riportato il file di configurazione completo:
/home/demo/public_html/domain1.com/log/*log /home/demo/public_html/domain2.com/log/*log {
rotate 14
daily
compress
delaycompress
sharedscripts
postrotate
/usr/sbin/apachectl graceful > /dev/null
endscript
}
Testare lo script osservando le cose quando vengono eseguiti i lavori cron notturni o eseguendologrotate manualmente con il seguente comando:
/usr/sbin/logrotate /etc/logrotate.conf
Se non ricevi alcun errore, dovresti essere a posto. Ma se vuoi essere sicuro puoi eseguire alcuni dei seguenti test.
Test logrotate
Se sospetti che logrotate stia avendo qualche problema, o vuoi semplicemente assicurarti che una nuova configurazione che hai messo in atto funzioni, puoi passare alcuni utili flag per logrotate quando lo esegui dalla riga di comando:
Prolisso
Il flag dettagliato, -v
, dice a logrotate di dire ogni operazione che esegue. Questo aiuta quando vuoi scoprire perché logrotate non ruota un registro come previsto.
Debug
Il flag di debug, -d
, dice a logrotate di eseguire i movimenti dei registri rotanti, ma non effettivamente ruotali. Può essere utile se stai lavorando su un server di produzione e vuoi testare un nuovo file di configurazione ma non vuoi che venga eseguita alcuna rotazione del registro effettiva quando esegui il test.
Il debug verifica anche che il file di configurazione sia formattato correttamente e che logrotate possa trovare i file di registro che ruoterebbe. Tuttavia, poiché non esegue le rotazioni, non verifica alcune parti del processo come gli script di post-rotazione.
Forza
Il flag di forza, -f
, forza logrotate a ruotare tutti i log durante l'esecuzione, indipendentemente dal fatto che debbano essere ruotati normalmente in quel momento. Se vuoi testare a fondo le configurazioni di logrotate, questa è la bandiera da usare. Ricorda solo che logrotate ruota i registri ed elimina quelli vecchi in base alla configurazione, quindi non ruotare accidentalmente un registro recente che devi conservare.
Può anche essere utile se ritieni che logrotate debba ruotare un registro, ma non lo è. Forzare il problema ti aiuta a identificare:
- Se il problema è che logrotate ritiene che il log non necessiti di rotazione (se esegui il flag di forza e il log è ruotato)
- Se il problema è che logrotate non è in grado di influenzare il file di registro (se lo esegui e non succede nulla al registro).
Nota: Se hai configurato logrotate per aggiungere una data al nome di un registro archiviato, anche usando il flag di forza logrotate crea un nuovo archivio lo stesso giorno. Poiché in tal caso il nome da utilizzare per un secondo archivio è già stato preso, potrebbe essere necessario rinominare l'archivio più recente prima di poter forzare una rotazione del registro.
Combinazione di flag
Puoi usare i flag di test insieme in modo abbastanza efficace. Per avere logrotate dirti cosa farebbe se lo facessi ruotare tutto, ma non in realtà rotateanything, puoi combinarli tutti e tre:
/usr/sbin/logrotate -vdf /etc/logrotate.conf
Questo comando fornisce un lungo elenco di cose che logrotate farebbe, inclusi i file di registro che ruoterebbe e cosa farebbe durante quel processo.
Se poi vuoi testare tutte le configurazioni di rotazione nella loro interezza, inclusi gli script eseguiti dopo le rotazioni, puoi eseguire logrotate senza il flag di debug:
/usr/sbin/logrotate -vf /etc/logrotate.conf
Logrotate ruota tutti i log. Scremare l'output dovrebbe aiutarti a rilevare eventuali problemi evidenti. Dovresti anche assicurarti che tutti i tuoi servizi funzionino ancora bene, che non ci sia nulla di sbagliato negli script post-rotazione e che tutti i registri siano stati ruotati.
Come ricorda logrotate
Se scopri che un registro non sta ruotando anche se è abbastanza vecchio da poterlo fare, esegui manualmente logrotate con il -f
bandiera. Ma se vuoi sapere perché qualcosa non va, c'è un altro file che puoi controllare prima di forzare una rotazione:
/var/lib/logrotate.status
Logrotate memorizza le informazioni sull'ultima rotazione di ciascun file di registro nel file di stato. Se guardi dentro, vedi qualcosa del tipo:
logrotate state -- version 2
"/var/log/acpid.log" 2010-6-18
"/var/log/iptables.log" 2010-6-18
"/var/log/uucp.log" 2010-6-29
...
È un formato semplice, la posizione del file di registro è a sinistra e la data dell'ultima rotazione è a destra. A volte, le date sul tuo server si confondono (se stavi armeggiando con un servizio NTP o simili) e la data in cui un registro è stato ruotato l'ultima volta finisce per essere una data futura. Se è successo, lo vedi in questo file di stato.
Se vuoi controllare logrotate con un particolare file di registro ma non vuoi forzare la rotazione di tutto, puoi eliminare la voce del registro dal file logrotatestatus. Quindi, quando esegui normalmente logrotate, dovrebbe creare una nuova voce per il registro con la data odierna (anche se potrebbe non ruotare effettivamente il registro:utilizza quella prima esecuzione come linea di base se è solo basato su intervalli).
Riepilogo
Per qualcosa che viene eseguito silenziosamente in background ed esegue solo un tipo di attività, logrotate fa un bel po'. Dovresti essere in grado di impostare i file di configurazione newlogrotate per i tuoi scopi, creandoli da zero o copiando le configurazioni esistenti e modificandole in modo appropriato. E, soprattutto, puoi evitare che i tuoi log sfuggano al controllo.