Pergunta

Eu estou trabalhando para adicionar alguns Nagios alertas para o nosso sistema - alguns dos quais irão monitorar a taxa de determinados eventos bater o nginx / apache registros (ou analisar valores a partir desses logs.) A maneira que eu tenho abordado o problema para agora é com uma cauda shell script simples -f'ing o log por 25 segundos ou mais para um arquivo temporário, matando o processo e, em seguida, executando awk, etc sobre o arquivo temporário. O objetivo aqui é para obter um log "amostra" com mais de 25 segundos e, em seguida, executar a análise.

Isso é menos do que o ideal, obviamente, por causa do aumento no disco IO devido a esses arquivos temporários - o que eu realmente gostaria é uma "reforçada" tail -f que iria encerrar o tubo limpa após um determinado número de segundos. Ou seja:

tail -f --interval '5 segundos' | grep "/ servir"

cauda Será que o log por 5 segundos e me mostrar todas as linhas que têm "/ servir".

Eu imagino eu posso chicotear acima de um script ruby ??para fazer isso muito rapidamente, mas eu queria ter certeza de que não havia uma maneira mais UNIXy para alcançar este objetivo. Em um nível alto, há uma maneira melhor para tomar amostras de um log dos segundos último N (e não, eu prefiro não ser analisar timestamps, etc.)

Foi útil?

Solução

Uma abordagem ligeiramente diferente:

(tail -f /var/log/messages & P=$! ; sleep 5; kill -9 $P) | grep /serve

Outras dicas

Encontrado da solução. "Apt-get install timeout":)

Edit: Na verdade isso mata cauda, ??não causá-lo para sair normalmente, por isso perdemos toda a tubulação. O que eu quero para o trabalho é:

tempo limite -15 5 tail -f /mnt/log/nginx/nginx-access.log | grep '/ javascripts' | wc -l

Para me dizer quantos arquivos javascript servido no últimos 5 segundos, etc.

Eu estou pensando que, como um usuário Nagiios mim, você não quer que os processos de sonda parando por quantidades arbitrárias de tempo. Isso vai, na pior das hipóteses, fazer Nagios verificar outras coisas com menos frequência, ou "moita" os cheques.

Que tal um script que é executado rapidamente (instantaneamente) e analisa as últimas linhas do arquivo, retornando apenas coisas interessantes com um timestamp mais tarde do que num dado momento?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top