[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Monitorando ocorrências em log e disparando alarme
From: |
Julio C. Neves |
Subject: |
Re: [shell-script] Monitorando ocorrências em log e disparando alarme |
Date: |
Fri, 29 Apr 2011 14:16:01 -0300 |
Aloha Kurt,
gostei do teu pitaco com relação à dúvida de um colega com relação ao whois.
Mas vamos ao que vc pediu.
Creio que a saída mais segura para o seu problema se o uso de um named pipe
(FIFO) como ponte. Os arquivos deste tipo precisam de um processo falador de
um lado (tail -f) e de um ouvinte do outro.
Assim sendo qdo o seu processo parar de ouvir para atualizar o grep e
esvaziar o arquivo de saída, a saída do tail do processo tagarela ficará
contida até o ouvinte voltar ao grep.
A teoria é essa, mas nunca testei FIFO com um tail -f. Fiz exatamente o que
te descrevi em uma CGI para contar os acessos na minha página que tem cerca
de 20.000 acessos/mês, que não é como um log, mas tb é um número bastante
expressivo.
Cordialmente,
Julio Neves
*Quer programar bem em Shell?*
*Use este endereço de e-mail, o Skype ou ☎ (21)8112-9988 ☎*
My profiles: [image: Twitter] <http://twitter.com/juliobash>
Contact me: [image: Skype/] julioneves1
Em 29 de abril de 2011 12:29, Kurt Kraut <address@hidden> escreveu:
>
>
> Aloha,
>
> Tenho que monitorar um daemon proprietário que felizmente gera um arquivo
> .log em tempo real, com uma transação por linha. Eu preciso detectar a
> ocorrência de linhas nesse log que tenham os termos 'publish' ou
> 'unpublish'
> e tomar ações baseado no surgimento desses termos no log. É tolerável que a
> solução leve 5 minutos ou menos para detectar a ocorrência desses termos.
>
> Minha dúvida é, qual a melhor abordagem? O que pensei foi:
>
> tail -f arquivo.log | grep -F "publish" >> /tmp/arquivo.log.buffer
>
> E fazer um cronjob que rodasse a cada minuto verificando linha a linha do
> /tmp/arquivo.log.buffer para tomada de decisão e apagando o conteúdo do
> arquivo após analizado. Porém, como esse arquivo não parará de ser escrito,
> corre o risco de acontecer a seguinte sequência de eventos:
>
> 1) /tmp/arquivo.log.buffer é escrito com conteúdo
> 2) o cronjob que realmente analiza o conteúdo dele é disparado
> 3) Uma nova ocorrência é gravada em /tmp/arquivo.log.buffer
> 4) O arquivo /tmp/arquivo.log.buffer é apagado/limpo sem que a ocorrência
> do
> item acima seja detectada
>
> Uma forma de evitar isso seria sempre copiar o /tmp/arquivo.log.buffer para
> um arquivo temporário $(mktemp) antes de ser analisado. Mas fico com a
> sensação que já é gambiarra demais. Gostaria de ter uma solução limpa pois,
> no futuro, pretendo transformar isso num script do Nagios para que ele se
> encarregue de monitorar as ocorrências e disparar os alarmes.
>
> Alguém sugere alguma abordagem?
>
> Cordialmente,
>
> Kurt Kraut
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
[As partes desta mensagem que não continham texto foram removidas]