Qual a melhor maneira de monitorar e alertar sobre a ausência de um evento nos logs?

3

Com os logs sendo capturados no syslog-ng, eu gostaria de poder monitorar automaticamente os logs e receber um alerta se aparecerem eventos de log NO que correspondam a um determinado critério. Por exemplo, para um site baseado em assinatura, se transcorrerem 6 horas sem pedidos, envie um e-mail ou envie uma mensagem de texto para essa pessoa ou grupo de pessoas.

O que é uma boa maneira de fazer isso?

    
por Matt V. 11.10.2012 / 17:46

8 respostas

2

link é um plugin do Nagios que é usado para monitorar arquivos de log. Geralmente você verifica, se houver um determinado padrão (mensagem de erro). Mas é possível reverter isso. Por exemplo, se você executar check_logfiles --logfile /var/log/mybackup.log --criticalpattern '! backup bem-sucedido' todas as manhãs, você receberá um alerta se não houver uma entrada de mensagem de 'backup bem-sucedido' desde a última execução de check_logfiles.

Gerhard

    
por 24.10.2012 / 23:11
2

Como a informação de que um determinado evento deve ocorrer pelo menos a cada seis horas é específica da gravação do aplicativo no log, seria melhor se ele pudesse monitorar a si mesmo e escrever uma entrada de log se o evento não acontecesse como deveria . Se as informações de log de gravação do aplicativo forem desenvolvidas localmente, eu recomendaria essa solução.

Se isso não for possível, manterei o mecanismo que garante que o evento tenha ocorrido o mais próximo possível do aplicativo. Talvez um watchdog possa ser iniciado em segundo plano a partir do mesmo script de início que inicia o aplicativo executando logs. Quando o aplicativo é interrompido, o script também pára o watchdog.

Outra opção, no caso de você querer manter o script de início em sua condição original por algum motivo, seria criar um cron-job que realize a observação do log.

Em ambos os casos. Certifique-se de que o nível da entrada do registro seja grave o suficiente para que você seja alertado para dar uma olhada nele usando qualquer ferramenta que estiver usando para monitorar os registros. É melhor, mais à prova de futuro e inclusivo para coisas que você não pensou, mas deve monitorar, então, para ouvir um nível de log do que uma entrada de log específica. Isso significa pelo menos nível de AVISO.

    
por 11.10.2012 / 18:04
2

O Zabbix é outra solução de monitoramento semelhante ao Nagios. O Zabbix tem a capacidade de monitorar arquivos para várias cadeias de caracteres e iniciar um alerta acionado baseado nos critérios especificados (encontrado ou não encontrado). O Zabbix também suporta "look" de volta ou de vários pontos no tempo no log, o que ajuda a evitar que eventos antigos sejam falsos positivos. Os alertas podem ser configurados para enviar e-mails ou SMS.

Website da Zabbix: link

Alguns dos documentos de monitoramento de logs do Zabbix: link

    
por 24.10.2012 / 20:16
1

O Nagios pode fazer isso com facilidade. Pessoalmente, gosto de qualquer coisa que eu possa facilmente executar na linha de comando e / ou configurar facilmente via Nagios ou Crontab.

LOGROBOT pode fazer exatamente o que o OP está pedindo ... em uma entrada de linha de comando simples:

./ logrobot autonda / prod / aplicativos / mylogfile 60m 'pedidos enviados' '.' 1 2 subscription_orders -ndnotfoundn

Basta alterar as cadeias em negrito e, claro, o caminho do arquivo de log para atender às suas necessidades.

Basicamente, este comando alertará como aviso se pelo menos 1 entrada 'pedidos enviados' NÃO for encontrada no arquivo de log / prod / apps / mylogfile. Ele alertará como crítico se pelo menos 2 entradas 'pedidos enviados' não forem encontrados no log.

    
por 26.04.2013 / 17:48
0

Você pode usar os Scripts Shell / Perl para executar essa tarefa. Você pode executar os scripts Shell / Perl através do Cron.

O Nagios seria uma solução melhor. É uma ferramenta de código aberto, portanto, não precisa pagar nada, mas precisa lutar com ela para configurá-la. ;)

Se você quiser um produto comercial, o Splunk é conhecido pela análise do arquivo de log.

    
por 12.10.2012 / 18:57
0

A maneira como eu abordei isso no passado é encaminhando o tráfego do syslog para um banco de dados e, em seguida, apenas consultando o banco de dados para a última mensagem de log recebida de um nome de host específico, com seu timestamp.

Qual é apenas um dos benefícios positivos do registro em um banco de dados.

    
por 19.10.2012 / 04:01
0

Eu acredito que a maneira mais fácil de cuidar disso é escrevendo um script muito simples em uma linguagem de sua escolha. Você só precisa grep através do syslog para mensagens específicas e enviar e-mail se não encontrar nenhum. Incluindo algumas verificações de sanidade não consigo imaginar mais de 20 linhas. Cole isso é cron e está tudo pronto. A desvantagem é que, usando esse método, o cron job deve ser executado como root para ler os logs.

O que você também pode fazer é dar uma olhada em LogAnalyzer . Infelizmente, não me lembro se é capaz de enviar e-mails. No entanto, ele usa o MySQL e armazena as informações de log lá. Com a configuração do LogAnalyzer, você teria duas cópias de seus logs, como eles vão em paralelo - um no syslog, um no banco de dados. Se você tiver um usuário para este banco de dados, capaz de ler seu conteúdo, poderá evitar a execução do trabalho cron acima mencionado. Pode não ser muito melhor, mas poderia adicionar outra camada de proteção.

    
por 19.10.2012 / 05:37
0

Fizemos algo semelhante, onde somos alertados se não obtivermos um novo pedido no site nas últimas N horas. Criamos uma URL PushMon com uma programação de "a cada 3 horas". Em seguida, chamamos o URL do PushMon em nossa página de agradecimento (JavaScript). Se não recebermos um pedido, o PushMon notará a chamada em falta e enviará um alerta.

O PushMon funciona bem para alertá-lo sobre eventos que não ocorrem.

    
por 17.03.2013 / 21:11