Стоял как-то раз админ в курилке и думал — а как бы ему так в нерабочее время вдали от компьютера и интернетов узнать, что на каком-то из его серверов проблема возникла. Можно конечно посадить студента за монитор с Nagios, чтоб он если что звонил админу и говорил «Тут красненькое что-то появилось»… Стоп. Звонил. На мобильный. Нафиг студента, SMS можно получать. На этом мысль остановилась и админ пошёл пить кофе. Потом вернулся и сел за рабочее место, где в браузуре был загружен Google Calendar… и решение пришло само.
Итак, у нас есть настроенный Nagios и желание получать SMS о возникающих проблемах на свой телефон.
Для удобства регистрируем отдельный аккаунт Google — что-нибудь типа nagios_alert@your-company-domain.com и идём настраивать календарь для этого аккаунта. Нас интересуют уведомления для календаря по-умолчанию — выставляем уведомление за 1 минуту до события по SMS.
Также нужно привязать к этому аккаунту номер своего мобильного (это делается там же, в настройках календаря).
Далее, следуем по этой ссылке: github.com/insanum/gcalcli и качаем GCalCLI — консольная утилита на Python, которая позволяет работать с гугловым календарём.
Всё, что требуется для работы утилиты — описано на странице проекта, там буквально пара Python-модулей.
Для нормальной работы gcalcli нужно его немного допилить (куда ж без этого).
Открываем файл на редактирование идём на строку 226 и меняем её на это:
Далее, кладём этот скрипт куда-нибудь поудобнее, где аккаунт из-под которого крутится Nagios-демон мог его пускать. Я выбрал /usr/bin.
Рядом с gcalcli кладём bash-скрипт примерно такого содержания:
Скрипт добавит «быстрое» событие в календарь аккаунта nagios_alert@your-company-domain.com с текстом, который будет передан в параметрах (см. далее).
Замечу также, что время на Nagios-сервере и моё локальное время отличаются на 1 час — в скрипте эта разница учтена.
Далее конфигурируем сам Nagios.
Добавляем команду notify-service-by-sms:
Добавляем отдельный контакт для SMS-уведомлений (так просто удобней):
Добавляем этот контакт в нужную группу, рестартуем Nagios — всё. Теперь админ всегда будет знать где-чо лежит. У меня по тестам сообщение приходит ровно через 8 минут после того, как появилась проблема (у вас может быть больше/меньше в зависимости от настроек Nagios).
По поводу номера мобильного телефона — я тестировал на МТС — работает на 5.
По поводу платных сервисов отправки SMS — да, я про них знаю, но в названии топика потому и есть слова «малой кровью».
Итак, у нас есть настроенный 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 — да, я про них знаю, но в названии топика потому и есть слова «малой кровью».