Gostaria de monitorar um arquivo de log grande (próximo a 1 GB) quanto a erros. Eu quero que isso seja quase em tempo real (alguns segundos de atraso é bom). Meu plano é usar tail -f | grep
. Há algum problema de desempenho ao usar esse método ao executá-lo por um longo período, digamos de zero bytes a 1 GB? Existem práticas padrões usadas para esse monitoramento. Observe que eu gostaria de fazer isso usando comandos unix padrão disponíveis no Solaris 10.
Se isso for possível, meu arquivo ainda rola e eu tenho mais um problema para resolver :). using tail -F
( --follow=name
) não é uma opção para mim porque -F
não é suportado no servidor em que desejo executar isso. Meu plano é usar um script que inicie essa cauda e faça uma pesquisa para descobrir se o arquivo está rolando. Se sim, então mate o rabo e reinicie-o. Alguma abordagem melhor?
fonte
tail
", certo?Respostas:
No meu sistema Linux (GNU coreutils 8.12), pude verificar (usando
strace
) setail -f
¹ usa alseek
chamada do sistema para pular a maior parte do arquivo rapidamente:Isso significa que o tamanho do arquivo rastreado não deve importar de forma alguma.
Talvez você possa verificar se o mesmo se aplica ao seu sistema. (Obviamente, deve ser o caso.)
-
1. Tentei também desativar o suporte para inotificar os não documentados
---disable-inotify
, apenas por precaução.fonte
strace
;)tail -F
não é suportado, as chances são de questrace
não está disponível ...truss
é o utilitário correspondente no Solaris.Se for invocado em um arquivo regular (em oposição a um pipe), tanto a cauda GNU quanto a cauda do OpenBSD (a menos que seja chamada com
-n +N
) procuram o final do arquivo, depois trabalham para trás para encontrar a linha onde deve começar a imprimir. Não sei se o Solaris faz o mesmo, mas é uma abordagem razoável, por isso espero que a maioria das empresas faça o mesmo. Portanto, o tamanho do arquivo é irrelevante para o desempenho.fonte
Eu faço isso todos os dias. Geralmente, varro uma dúzia de logs nos nossos servidores de teste e produção usando
tail -f logs/*.{log,err,out}
. O carregamento inicial é um pouco demais (dependendo do número de arquivos globbed), mas depois disso, o streaming é em tempo real.Em vez de enviar para o grep, uso a
exec
funcionalidade,screen
pois geralmente desejo ver toda a saída (para rastreamentos completos e mensagens relacionadas ao problema). Por exemplo,Para fazer o terminal emitir um bipe (ou piscar) sempre que a palavra Exceção for encontrada.
fonte