Monitorare continuamente i registri con la coda che vengono occasionalmente ruotati


21

Stiamo usando tail per monitorare continuamente diversi log, ma quando un log viene ruotato la coda per quel file cesserà.

Per quanto ho capito, il problema è che quando il registro viene ruotato, viene creato un nuovo file e il processo di coda in esecuzione non sa nulla del nuovo handle di file.

Risposte:


34

Ah, c'è una bandiera per questo.

invece di usare tail -f /var/log/filedovremmo usaretail -F /var/log/file


tail -Fsi traduce in tail --follow=name --retrycome in;

  • --follow=name: segui il nome del file anziché il descrittore di file
  • --retry: se il file non è accessibile, riprovare più tardi invece di morire

Perché dovrebbero anche avere l'opzione "-f"? Questo dovrebbe essere il valore predefinito!
Domenico Cerisano,

27
# tail --follow=mylog.log

Dalla coda dell'uomo :

With --follow (-f), tail defaults to  following  the  file  descriptor,
       which  means that even if a tail’ed file is renamed, tail will continue
       to track its end.  This default behavior  is  not  desirable  when  you
       really want to track the actual name of the file, not the file descrip‐
       tor (e.g., log rotation).  Use --follow=name in that case.  That causes
       tail  to track the named file by reopening it periodically to see if it
       has been removed and recreated by some other program.

Quindi in questo caso l'utilizzo -Fdell'opzione sarebbe corretto.

-F     same as --follow=name --retry

11

La risposta esatta dipende dal tuo sistema operativo, ma in molti casi tail -Ffarà la cosa giusta.


3
Se tail -F non funziona, compila una versione di tail -F che funziona. L'altra alternativa è una breve strada per la città pazza.
chris,


2

IMHO, è un po 'strano cambiare il file di registro in base alle dimensioni piuttosto che alla data. La maggior parte dei registri di sistema (in unix o linux) ruotano su base settimanale o mensile e non in base alle dimensioni ... Questo è qualcosa che mi piace per vari motivi e anche qualcosa che, se implementato, risolverebbe il tuo problema.

Otto anni dopo, non so di che diavolo stavo parlando qui: ci sono tonnellate di posti in cui vuoi ruotare per dimensione, perché le rotazioni giornaliere / settimanali / mensili possono produrre file MASSIVI che possono causare seri problemi.

Da una prospettiva più esperta, la vera domanda è perché vorresti sederti e mettere continuamente in coda un file che sta crescendo così velocemente che lo stai ruotando più del quotidiano ... Sarebbe come guardare il flusso di Matrix.

In questi giorni saresti meglio esaminare alcune aggregazioni di log di dati di grandi dimensioni come Splunk o Sumologic, dove può filtrare gli eventi di log in classi e attivarli in base a valori di log specifici ... Non è necessario guardare i log live.


Sono d'accordo e questa è una cosa che ho capito che avrei dovuto esaminare. Spero che log4j lo supporti. Grazie!
DivideByHero,

1
Un chiaro vantaggio della rotazione in base alle dimensioni è che si può essere certi che l'intero set di registri sarà inferiore a una dimensione nota.
Jim Zajkowski,

1

Uso il comando sul mio server di produzione:

tail --follow var/log/apache-access_log --retry

-1

Inoltre, potrebbe essere un po 'troppo pesante per i tuoi scopi, ma splunk ha una funzione di coda per fare esattamente quello che vuoi. È gratuito fino a 500 MB / giorno, ma se i tuoi dati superano le dimensioni non varrebbero il costo.

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.