В Nagios легко проверить, что за последние 48 часов появилось сообщение журнала, и включить звуковой сигнал.
Но как я могу настроить Nagios, чтобы он подавал звуковой сигнал, если сообщение не появлялось в течение последних 48 часов? Почему это так сложно?
Я использую плагин «Check WMI Plus» (агент не требуется) для проверки журнала событий в окне Windows.
Я думаю, что вопрос действительно в том, как структурировать запрос WMI, чтобы он возвращал истину, когда не возвращаются результаты. (Я бы добавил к вопросу теги «WQL» или «WMI» или оба сразу).
Один из лучших способов получить опыт работы с запросами WMI - это загрузить WMI Code Creator от Microsoft. Конечно, вам нужно запустить это в окне Windows, но вы сможете сосредоточиться на запросе, который вам нужно передать в плагин Nagios, используя графический интерфейс.
http://www.microsoft.com/en-us/download/confirmation.aspx?id=8572
Язык запросов, используемый для WMI, - это язык запросов WMI (WQL). Подобно SQL, вы можете запросить, существует ли конкретный код события в течение последних 48 часов. Вот несколько полезных ссылок о синтаксисе, приемлемом для WQL.
Ключевые слова WQL: ссылка на сайт
Операторы WQL: ссылка на сайт
Поддерживаемые WQL форматы даты: ссылка на сайт
Пространство имен: root \ CIMV2
Класс события: [зависит от того, что вы ищете]
TargetClass: Win32_NTLogEvent ссылка на сайт
Вы будете использовать наиболее распространенное пространство имен root \ CIMV2, и вам понадобится класс Win32_NTLogEvent для получения искомой информации. Остальное - это просто структура запроса.
Поскольку мы не знаем, какое именно событие вы ищете, есть несколько свойств, которые вы можете использовать для изменения запроса.
Logfile = В каком журнале событий вы хотите посмотреть? «Приложение» или «Система» и т. Д.
Пользователь = Кто создал событие? "NT AUTHORITY \ SYSTEM" или, может быть, вы ищете кого-то конкретно.
Вы можете сузить запрос с помощью предложения WHERE, как и в SQL, используя свойство TimeGenerated. TimeGenerated имеет формат IntervalFormat (или формат UTC) ссылка на сайт.
Вот краткое руководство по работе с датой и временем с помощью WMI. ссылка на сайт
ГДЕ DateDiff ("чч", TimeGenerated, GetDate ()) <48
Итак, чтобы собрать все это вместе, это должно выглядеть примерно так.
SELECT * FROM Win32_NTLogEvent WHERE EventCode=4001
AND DateDiff(hh,TimeGenerated,GetDate()) < 48
4001 - это просто выдуманный номер, найдите идентификатор события, о котором вы хотите запросить. ;)
Вы можете добавить дополнительные операторы AND, чтобы включить свойства, чтобы сузить результаты по мере необходимости. Это в дополнение к ответу Фила должно привести вас туда, где вам нужно быть.
У меня нет большого опыта работы с WMI, поэтому я не уверен, как поступают запросы для получения информации из журнала событий, но, предполагая, что вы можете написать эту часть (и вы указываете, что можете), вы можете использовать Check WMI Plus, чтобы установить более низкий порог для количества совпадающих сообщений журнала, примерно так:
[section check]
query=SELECT * FROM <your query here ...>
test=_ItemCount
display=_DisplayMsg||~|~| - ||
display=_ItemCount|#
perf=_ItemCount||Log Entries
Имея это место, вы можете запустить check_wmi_plus.pl
с участием -c 1:
для возврата КРИТИЧЕСКОГО статуса, если есть меньше найдено более одной записи журнала. (Дополнительная информация о пороговых значениях в Check WMI Plus находится на странице "Не могли бы вы показать мне несколько примеров предупреждений / критических критериев?".)
Это не трудно. Вы можете просто объединить обычную проверку журнала с стандартный плагин отрицания для достижения этой цели.