Pull to refresh

SMS-уведомления из Nagios малой кровью

Reading time 2 min
Views 17K
Стоял как-то раз админ в курилке и думал — а как бы ему так в нерабочее время вдали от компьютера и интернетов узнать, что на каком-то из его серверов проблема возникла. Можно конечно посадить студента за монитор с Nagios, чтоб он если что звонил админу и говорил «Тут красненькое что-то появилось»… Стоп. Звонил. На мобильный. Нафиг студента, SMS можно получать. На этом мысль остановилась и админ пошёл пить кофе. Потом вернулся и сел за рабочее место, где в браузуре был загружен Google Calendar… и решение пришло само.

Итак, у нас есть настроенный Nagios и желание получать SMS о возникающих проблемах на свой телефон.
Для удобства регистрируем отдельный аккаунт Google — что-нибудь типа nagios_alert@your-company-domain.com и идём настраивать календарь для этого аккаунта. Нас интересуют уведомления для календаря по-умолчанию — выставляем уведомление за 1 минуту до события по SMS.
Также нужно привязать к этому аккаунту номер своего мобильного (это делается там же, в настройках календаря).
Далее, следуем по этой ссылке: github.com/insanum/gcalcli и качаем GCalCLI — консольная утилита на Python, которая позволяет работать с гугловым календарём.
Всё, что требуется для работы утилиты — описано на странице проекта, там буквально пара Python-модулей.
Для нормальной работы gcalcli нужно его немного допилить (куда ж без этого).
Открываем файл на редактирование идём на строку 226 и меняем её на это:
feedPrefix = 'https?://www.google.com/calendar/feeds/'

Далее, кладём этот скрипт куда-нибудь поудобнее, где аккаунт из-под которого крутится Nagios-демон мог его пускать. Я выбрал /usr/bin.
Рядом с gcalcli кладём bash-скрипт примерно такого содержания:
#!/bin/bash
# notify_sms for Nagios by Br0ziliy

NOW_HOUR=`date +%-H`
NOW_MIN=`date +%-M`

[ $NOW_HOUR -gt 0 ] && H=$(( $NOW_HOUR-1 )) || H=23
[ $NOW_MIN -lt 55 ] && M=$(( $NOW_MIN+5 )) || M=59

/usr/bin/gcalcli --user nagios_alert@your-company-domain.com --pw yourpass quick "$H:$M $@"

Скрипт добавит «быстрое» событие в календарь аккаунта nagios_alert@your-company-domain.com с текстом, который будет передан в параметрах (см. далее).
Замечу также, что время на Nagios-сервере и моё локальное время отличаются на 1 час — в скрипте эта разница учтена.
Далее конфигурируем сам Nagios.
Добавляем команду notify-service-by-sms:

define command{
  command_name notify-service-by-sms
  command_line /usr/bin/notify_sms '$NOTIFICATIONTYPE$ $HOSTALIAS$/$SERVICEDESC$: $SERVICEOUTPUT$'

}

Добавляем отдельный контакт для SMS-уведомлений (так просто удобней):
define contact{
  contact_name mobile mobile
  host_notification_period never # для хостов уведомлений не нужно
  service_notification_period nonworkhours # SMS получаем только в нерабочее время
  service_notification_options c,r # получать только критические уведомления
  service_notification_commands notify-service-by-sms
  host_notification_commands notify-host-by-email
}

Добавляем этот контакт в нужную группу, рестартуем Nagios — всё. Теперь админ всегда будет знать где-чо лежит. У меня по тестам сообщение приходит ровно через 8 минут после того, как появилась проблема (у вас может быть больше/меньше в зависимости от настроек Nagios).

По поводу номера мобильного телефона — я тестировал на МТС — работает на 5.

По поводу платных сервисов отправки SMS — да, я про них знаю, но в названии топика потому и есть слова «малой кровью».
Tags:
Hubs:
+27
Comments 120
Comments Comments 120

Articles