Notificar quando uma mensagem não ocorreu

2

No Nagios, é fácil verificar se uma mensagem de log aconteceu nas últimas 48 horas e um alarme sonoro.

Mas como posso configurar o Nagios que deve soar alarme quando uma mensagem não ocorreu nas últimas 48 horas? Por que isso é tão difícil?

Estou usando o plug-in "Check WMI Plus" (não é necessário agente) para verificar o log de eventos em uma caixa do Windows.

    
por buckley 26.05.2013 / 23:02

3 respostas

2

Acho que a questão é realmente sobre como estruturar a consulta WMI para que ela retorne true quando nenhum resultado for retornado. (Eu adicionaria "WQL" ou "WMI" ou ambos como tags à questão).

Uma das melhores maneiras de obter alguma experiência com a consulta WMI é baixar o WMI Code Creator da Microsoft. É claro que você tem que executar isso em uma caixa do Windows, mas você será capaz de zerar a consulta que você precisa para alimentar o plugin Nagios usando a GUI.

link

A linguagem de consulta usada para o WMI é WQL Query Language (WQL), semelhante ao SQL, você pode consultar se existe um determinado código de evento nas últimas 48 horas. Aqui estão alguns links úteis sobre a sintaxe que é aceitável para o WQL.

Palavras-chave WQL: link

Operadores WQL: link

Formatos de data compatíveis com WQL: link

Namespace: root \ CIMV2
Classe de evento: [depende do que você está procurando especificamente]
TargetClass: Win32_NTLogEvent link

Você estará usando o namespace root \ CIMV2 mais comum, e a classe que precisará é a classe Win32_NTLogEvent para obter as informações que procura. O resto é apenas a estrutura da consulta.

Como não sabemos qual evento específico você está procurando, há algumas propriedades que podem ser usadas para alterar a consulta.

Logfile = Em qual log de eventos você deseja procurar? "Aplicação" ou "Sistema" etc ...
Usuário = Quem gerou o evento? "NT AUTHORITY \ SYSTEM" ou talvez você esteja procurando alguém especificamente.

Você pode restringir a consulta usando a cláusula WHERE, assim como no SQL, usando a propriedade TimeGenerated. TimeGenerated está no formato IntervalFormat (ou UTC) link .

Aqui está um guia rápido sobre como trabalhar com datas e horários usando o WMI. link

WHERE DateDiff ("hh", TimeGenerated, GetDate ()) < 48

Então, para juntar tudo isso, deve ser algo como isso.

SELECT * FROM Win32_NTLogEvent WHERE EventCode=4001 
  AND DateDiff(hh,TimeGenerated,GetDate()) < 48

O 4001 é apenas um número inventado, procure o ID do evento sobre o que você deseja consultar. ;)

Você pode adicionar outras instruções AND para incluir propriedades para restringir os resultados, conforme necessário. Isso, além da resposta de Phil, deve levá-lo aonde você precisa estar.

    
por 29.05.2013 / 20:39
0

Eu não tenho muita experiência com o WMI, então não sei como as consultas para obter as coisas do log de eventos vão, mas supondo que você possa escrever essa parte (e você indicar que pode), você pode usar Verificar o WMI Plus para definir um limite mais baixo para o número de mensagens de log correspondentes com algo parecido com isto:

[section check]
query=SELECT * FROM <your query here ...>
test=_ItemCount
display=_DisplayMsg||~|~| - ||
display=_ItemCount|#
perf=_ItemCount||Log Entries

Com isso, você pode executar check_wmi_plus.pl com -c 1: para retornar um status CRITICAL se houver menos do que uma entrada de log encontrada. (Mais informações sobre os limites no Check WMI Plus estão em " Você pode me mostrar alguns exemplos de aviso / critérios críticos? ".)

    
por 29.05.2013 / 16:18
0

Não é difícil. Você pode simplesmente combinar sua verificação típica de log com o plug-in de negação padrão para conseguir isso.

    
por 03.06.2013 / 04:51

Tags