Нотификации Munin. Хочу все знать.

В этом посте я бы хотел рассказать о том как же  узнать о происходящих событиях мониторинга в Munin. Можно конечно держать открытым веб-интерфейс и постоянно наслаждаться красивыми графиками, а заодно и оперативно видеть возникающие события. Но есть способ лучше: получить от Munin нотификацию.

События в Munin.

Для начала, давайте посмотрим как в munin возникают события:
— Сервер собирает со своих нод сведения о всех сенсорах, имеющихся на них;
— Полученные для каждой метрики мгновенные значения сравниваются с заданными порогами;
— Если это значение выходит за допустимые пределы, то для соответствующей метрики возникает событие.

Как мы с Вами уже знаем в Munin есть два интересных нам события — превышение «предупреждающего» и «критического» порогов. На самом деле нам будет интересно и еще одно состояние метрики — «unknown», которое как бы намекает нам о том что реальное состояние неизвестно (а значит может быть и критическим). Таким образом, по критичности можно разделить события на три типа: «critical», «warning» и «unknown».

Пороговые значения.

Пороги определяют границы, при выходе за которые генерируется то или иное событие и бывают двух типов, соответствующих критичности возникающего события — «critical» и «warning». Пороги могут определять как верхнюю, так и нижнюю границы, то есть, всего существует 4 границы, по две для каждого состояния. При этом порог «critical» имеет более высокий приоритет, то есть если значение выходит за границы для обоих состояний, то используется именно он.

Пороги могут устанавливаться как в самом плагине, так и в конфигурационном файле и задаются в следующем формате:  <нижний порог>:<верхний порог> . В этом примере, для ноды my_pc, задаются пороги для двух метрик (channel1 и channel2) плагина myplagin:

Разберем что же это значит:
— channel1 переходит в «warning», если его значение МЕНЬШЕ 20 или БОЛЬШЕ 80;
— channel1 переходит в «critical», если его значение МЕНЬШЕ 10 или БОЛЬШЕ 90;
— channel2 переходит в «warning», если его значение НЕ РАВНО 5;
— channel2 переходит в «critical», если его значение ОТЛИЧАЕТСЯ ОТ 5 БОЛЬШЕ ЧЕМ НА 1 (т. е. МЕНЬШЕ 4 или БОЛЬШЕ 6);

Обработка событий.

Критическое событие в MuninУ нас нас произошло событие для какой-то метрики и что же дальше? А дальше происходит следующее: график этой метрики теперь отображается в соответствующей группе  раздела «problems» и его граница окрашена в желтый или красный цвет. То есть мы сразу видим существующие проблемы.

Но самое главное — выполняется действие определенное в конфигурационном файле Munin. Официальная документация рассказывает нам следующее:

Munin при наступлении события может уведомить нас двумя способами:
— самостоятельно запустить определенную команду;
— передать информацию о событии в Nagios.

Вот пример как в конфигурации можно определить какую команду запускать:

В принципе этого уже достаточно для отправки нотификации, но мы же наверняка захотим большего. Поэтому почитав документацию еще чуть-чуть, мы узнаем что текст этой нотификации передается команде через стандартный поток ввода. А еще, текст можно изменить задав его в директиве  contact.<название>.text  и при этом, можно не только использовать переменные Munin, но и использовать модуль perl — Text::Balanced!!! Конечно мы с Вами не сможем удержаться и не  использовать такие богатые возможности :).

Передача события в формате JSON.

Да да, именно JSON, ведь всегда очень хорошо если решение задачи будет максимально простым и универсальным. Так как этот пост, к сожалению, не о perl, то я сразу представлю решение, без введения в этот замечательный язык программирования. Тем более, что используя три абзаца документации и наше решение Вы сможете легко разобраться и сами. Итак:

С таким кодом, для картинки выше, будет следующий вывод (обратите внимание на секцию «critical»):

Все что осталось это создать скрипт который будет разбирать этот JSON и, например, писать нам красивое письмо!

Скрипт для отправки письма.

Давайте в этот раз воспользуемся… ruby! И даже не спрашивайте почему — просто так. Вот ловите:

Не забываем сделать скрипт исполняемым, пропишем в munin.conf что будем запускать его и с каким текстом:

И в результате получим такую табличку:

нотификация мониторинга

Оставить ответ