Monitorar continuamente os logs com cauda que são ocasionalmente girados

21

Estamos usando o tail para monitorar continuamente vários logs, mas quando um log é girado, o tail para esse arquivo cessará.

Pelo que entendi, o problema é que, quando o log é girado, há um novo arquivo criado e o processo de execução em execução não sabe nada sobre esse novo identificador de arquivo.

xkcd150
fonte

Respostas:

34

Ah, há uma bandeira para isso.

em vez de usar tail -f /var/log/file, deveríamos estar usandotail -F /var/log/file


tail -Ftraduz para tail --follow=name --retrycomo em;

  • --follow=name: siga o nome do arquivo em vez do descritor do arquivo
  • --retry: se o arquivo estiver inacessível, tente novamente mais tarde, em vez de morrer
xkcd150
fonte
Por que eles teriam a opção "-f"? Esse deve ser o padrão!
Dominic Cerisano 26/10
27
# tail --follow=mylog.log

Da cauda do homem :

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.

Portanto, neste caso, usar a -Fopção estaria correta.

-F     same as --follow=name --retry
djhowell
fonte
11

A resposta exata depende do seu sistema operacional - mas, em muitos casos, tail -Ffará a coisa certa.

Jim Zajkowski
fonte
3
Se tail -F não funcionar, compile uma versão do tail -F que funcione. A outra alternativa é um caminho curto para a cidade louca.
chris
5

tail -F ou tail --follow = name

retrátil
fonte
2

IMHO, é um pouco estranho alterar seu arquivo de log por SIZE, e não por data. A maioria dos logs do sistema (em unix ou linux) gira semanalmente ou mensalmente, e não com base no tamanho ... Isso é algo que eu gosto por várias razões, e também algo que, se implementado, resolveria o seu problema.

Oito anos depois, eu não sei do que diabos eu estava falando aqui: existem vários lugares onde você deseja girar por tamanho, porque as rotações diárias / semanais / mensais podem gerar arquivos MASSIVOS, o que pode causar problemas sérios.

De uma perspectiva mais experiente, a verdadeira questão é por que você deseja sentar e seguir continuamente um arquivo que está crescendo tão rápido que você o está girando mais do que diariamente ... Seria como assistir o Matrix passar.

Hoje em dia, seria melhor procurar uma agregação de log de big data como Splunk ou Sumologic, onde ele pode filtrar eventos de log em classes e disparar com base em valores específicos de log ... Não há necessidade de assistir a logs ao vivo.

Satanicpuppy
fonte
Eu concordo e isso é uma coisa que percebi que deveria procurar. Espero que o log4j o suporte. Obrigado!
DivideByHero 10/11/2009
1
Uma clara vantagem da rotação por tamanho é a certeza de que todo o conjunto de logs será menor que um tamanho conhecido.
9119 Jim Zajkowski
1

Eu uso o comando no meu servidor de produção:

tail --follow var/log/apache-access_log --retry
mulher
fonte
-1

Além disso, pode ser um pouco pesado demais para seus objetivos, mas o splunk tem um recurso de cauda para fazer exatamente o que você deseja. É gratuito por até 500 MB / dia, mas se seus dados estiverem além desse tamanho, não valerá o custo.

thepocketwade
fonte