Cronolog vs logrotate


Risposte:


14

Nella mia esperienza, logrotate è fantastico. È molto flessibile e funziona bene con la maggior parte dei software.

Tuttavia, ci sono alcuni problemi con esso, e poiché cronolog è principalmente una funzione di rotazione del registro web, scriverò la mia esperienza con logrotate + apache che è stata problematica:

Quando si ruotano i log, è necessario notificare ad apache che un log viene ruotato, come anche se logrotate rinomina access.log in access.log.1, apache continuerà a scrivere su access.log.1, mentre sta scrivendo sull'inode, e rinominare il file non influisce sul numero dell'inode.

Su debian etch (e probabilmente su molte altre distro), logrotate viene utilizzato per ruotare i log di apache. Ora, apache ha un riavvio grazioso che avvisa i processi figlio di apache di uscire una volta terminata la gestione delle connessioni esistenti, apache quindi rilegge la sua configurazione, genera nuovi processi figlio, che iniziano a scrivere in un nuovo file di registro (nel caso in cui il precedente fosse ruotato).

Sembra un'ottima soluzione, tuttavia il riavvio grazioso non funziona sempre in determinate condizioni (come un carico pesante), quindi gli sviluppatori debian hanno deciso di utilizzare un riavvio di Apache invece di un riavvio grazioso, nella configurazione di Apache Logrotate. Sfortunatamente questo fa sì che tutte le connessioni vengano interrotte in una sola volta, il che è molto male per i siti molto caricati. Inoltre, il riavvio di apache può anche causare problemi come l'arresto e il mancato avvio di apache (anche in determinate situazioni di carico), vedere i collegamenti ai bug di seguito per i dettagli.

La linea di fondo è che logrotate è eccezionale, ma può portare a determinati problemi per determinati programmi. Non ho molta esperienza con cronolog, ma mentre scrive i log attraverso una pipe, non richiede alcun ricaricamento di Apache quando ruota i file di log, il che sostanzialmente risolve tutto ciò che è descritto sopra.

Bug debian logrotate / apache correlati:

  1. Bug Debian # 301702
  2. Bug Debian # 400455

1
la soluzione per quanto sopra è usare troncato! ciò che fa è copiare il contenuto di access.log in access.log.1 e quindi svuotare access.log (come vedi l'inode rimane di access_log rimane lo stesso). Di solito non hai registri di dimensioni superiori a pochi GB (nel peggiore dei casi), quindi l'intero processo non richiederà molto tempo!
Nikolaidis Fotis

3

Preferisco cronolog, ma non è una preferenza molto forte.

logrotate dove viene avviato cron, e se un sistema è inattivo per qualche motivo quando dovrebbe avvenire la rotazione, i file di registro non verranno ruotati.

Mi piace anche che i file di registro abbiano la data (% Y% m.combined.access.log) nel nome perché tengo questi registri per molto tempo. Sulla maggior parte dei sistemi, per impostazione predefinita, apache logrotate nominerà i file access.log, access.log.1, ecc. Potrebbe essere possibile utilizzare una data nei file di log con logrotate, ma non sono riuscito a capire come fare l'ultima volta che ho guardato.


2
Il problema per cui logrotate non funziona se è passato il cron time può essere risolto installando il pacchetto "anacron".
andrewd18

o ancora meglio puoi salvare i tuoi log nel formato desiderato - questo può essere fatto con i template in rsyslog - (% year% -% month% -% day% _lala.log). in questo caso, non è nemmeno necessario ruotare i registri, perché ogni giorno il nome viene cambiato!
Nikolaidis Fotis

2

Logrotate usato sempre. È quello che Debian usa di default e non ho mai avuto lamentele con esso.


2

Io uso quasi esclusivamente cronologsopra logrotate. logrotateviene fornito con Debian e gli consento di continuare a funzionare per i servizi di sistema come i log del server di posta. Ma per Apache e lighttpdfile di registro, è tutto cronolog.

Uno dei motivi per cui utilizzo cronologè che tutta la configurazione avviene nella riga del file di registro della configurazione del server Web

ad esempio in un lighttpdfile di configurazione, è possibile inserire:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"

E tutti ottengono un nuovo file di registro ogni settimana senza alcuna altra configurazione. Oppure potresti essere creativo e fare qualcosa del tipo:

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"

E ottieni un file di registro che mostra il traffico per giorno della settimana. ad es. tutte le domeniche, tutti i martedì.

La cosa migliore è che anche se il server è inattivo per un certo periodo di tempo, al riavvio verrà utilizzato il file di registro corretto.


1
Assomiglia molto a svlogd (del lignaggio runit e daemontools).
Tobu
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.