6 января 2013 г. Nagios СМС Мониторинг

Nagios. Отправка смс через сервис LittleSMS

Уведомления по email это конечно удобно, но не оперативно. Если вы в поездке или просто отошли от рабочего места, то вы никогда не узнаете что ваши сервера или сервисы неожиданно перестали работать.

Чтобы исправить эту ситуацию я использую отправку уведомлений посредствам смс-сообщений. И сегодня расскажу как настроить отправку смс в Nagios.

Выбор шлюза для отправки

Существует несколько способов отправки смс:

  • Купить телефон и sim-карту какого-либо провайдера связи, подключить телефон к серверу и отправлять через него смс. Этот способ не удобен тем, что требует физического доступа к серверу, добавляет проблем с обслуживанием самого телефона и т.д. А каких-то плюсов я не знаю вообще, думаю это просто было актуально в былые времена.
  • Халявные смс через email-гейты и сервисы отсылающие смс по каким-то событиям, например через Google Calendar. Если нет совсем денег и имеется много времени на бесполезный труд - это ваш выбор.
  • Отправка через сервисы, естественно не бесплатно, но и не так дорого. Например, есть такой достаточно дешевый (от 30 копеек за смс), удобный и с виду качественный сервис LittleSMS, с помощью которого я и решил отправлять смс.

Естественно я сначала обсудил с друзьями какими сейчас сервисами они пользуются, получился вот такой топик на форуме. Помимо LittleSMS можно воспользоваться другими сервисами и даже комбинировать их, но это вы уже сами, в статье я сделаю реализацию только для одного сервиса.

Регистрируемся в LittleSMS и пишем скрипт для отправки смс

Идем на страницу регистрации и указываем данные, которые требует форма. После регистрации входим в раздел Настройки API и копируем API-key. После чего, войдите в раздел Имена отправителя и укажите имя отправителя, тоже самое имя надо будет указать в скипте sendsms.py (переменная DEFAULT_SENDER), либо можно каждый раз передавать аргументом при вызове:

sendsms --sender MYSENDER ...

Изучив API сервиса LittleSMS я написал вот такой простой скрипт sendsms.py. Он не заточен только под Nagios, а может использоваться повсеместно на сервере для разных нужд. Давайте его установим:

wget --no-check-certificate -O /usr/local/sendsms.py https://gist.github.com/raw/4463243/sendsms.py
ln -s /usr/local/sendsms.py /usr/bin/sendsms
chmod +x /usr/bin/sendsms

Теперь надо указать наш email и API-key:

emacs /usr/bin/sendsms
# И заполняем значения переменных USER_EMAIL и USER_APIKEY соответственно
# Там же вы можете поменять DEFAULT_SENDER

Отправленные смс можно посмотреть на странице Сообщения, а отправлять можно так:

sendsms --recipients 79119876543 --sender MYSENDER --message TestMessage
sendsms --recipients 79119876543 --message TestMessage
sendsms -R 79119876543 -M TestMessage
# или даже так:
echo "Some message" | sendsms -R 79119876543

Для избежания ошибок отправки большого сообщения (т.е. множества маленьких смс), например через pipe, я предусмотрел флаг --read-bytes READ_BYTES, которой по умолчанию отправляет первые 256 байт, вы можете изменять это значение:

cat /path/to/report.txt | sendsms -R 79119876543 --read-bytes 2048

Кстати, после того как написал статью, то обнаружил вот такой раздел на сайте Скачать готовые решения, там есть вполне хорошие готовые решения.

Настраиваем Nagios

Перейдите в каталог конфигов Nagios, во FreeBSD это обычно /usr/local/etc/nagios/objects, а в Debian это /etc/nagios3.

Сначала добавим команды, откройте на редактирование файл commands.cfg и добавьте следующее:

define command{
    command_name    notify-host-by-sms
    command_line     /usr/bin/sendsms --recipients $_CONTACTPHONE$ --message \
                      '$NOTIFICATIONTYPE$ on "$HOSTNAME$": $HOSTOUTPUT$'
}
define command{
    command_name    notify-service-by-sms
    command_line     /usr/bin/sendsms --recipients $_CONTACTPHONE$ --message \
                      '$NOTIFICATIONTYPE$ for "$SERVICEDESC$" on "$HOSTNAME$": $SERVICEOUTPUT$'
}

Все эти стандарные макросы можно посмотреть в документации.

Далее надо указать, что для наших пользователей, помимо команды notify-host-by-email и notify-service-by-email нужно вызывать также команды notify-host-by-sms и notify-service-by-sms, для этого надо изменить шаблон для контактов, откройте файл templates.cfg:

define contact{
    name                            generic-contact
    ...
    service_notification_commands   notify-service-by-email, notify-service-by-sms
    host_notification_commands      notify-host-by-email, notify-host-by-sms
    ...
    }

В Debian, по умолчанию, не используют шаблоны для контактов, поэтому директивы service_notification_commands и host_notification_commands надо задавать непосредственно в контакте (либо вы сами должны сделать шаблон и использовать его, помоему это будет правильнее).

Ну и наконец, укажем наши номера телефонов в контактах, откройте на редактирование файл contacts.cfgDebian это conf.d/contacts_nagios2.cfg):

define contact{
    contact_name                    adw0rd
    use                               generic-contact
    alias                             Mikhail Andreev
    email                             info@adw0rd.com
    # service_notification_commands   notify-service-by-email, notify-service-by-sms
    # host_notification_commands      notify-host-by-email, notify-host-by-sms
    _phone                            79119876543
    }

Здесь мы указали "_phone" вместо "phone", так как кастомные переменные назначаются с префиксом "_", за подробностями идите на страницу Custom Object Variables.

Перезагружаем Nagios и ждём sms'ок:

# во FreeBSD
/usr/local/etc/rc.d/nagios restart
# или в Debian
/etc/init.d/nagios3 restart

Если нетерпится, то входим в веб-интерфейс Nagios, выбираем любой сервис и жмем на "Send custom service notification", заполняем форму и сабмитим. Через секунды вы должны получить смс.

В том же веб-интерфейсе Nagios можно посмотреть оповещения и команды которые эти оповещения отправили, это раздел "Reports > Notifications", ищите там "notify-service-by-sms" в столбце "Notification Command".

Что ещё почитать?

Комментарии

iryndin@gmail.com 25 января 2013 г. 12:29

Попробуй заюзать http://sms.ru.
У них ценник чуть пониже, + если ты отправляешь на свой номер (который указал при регистрации), то это делается бесплатно.

Прикольно, потом расскажи понравились ли они тебе в обслуживании?

Решил продублировать список сервисов с пыхи:

  • http://littlesms.ru/price
    Стоимость 1 СМС составит от 30 коп.

  • http://sms.ru/
    Стоимость 1 СМС составит от 25 коп. На свой номер (указанный при регистрации) БЕСПЛАТНО

  • http://smsc.ru/
    Стоимость 30 коп.

  • http://www.sms16.ru/
    Стоимость 1 СМС составит 50 коп.

  • http://sms24x7.ru/price/
    До 50 копеек за 1 СМС. + можно юзать бесплатно (аттачат рекламу) http:// sms24x7.ru/api/free-sms-gate/

  • http://www.mxtelecom.com/
    Были проблемы с киррилицей иногда (когда смс разбивалась на части) и для некоторых клиентов доходило в неправильной кодировке

  • https://www.bytehand.com/tariffs

Вот еще некий список, но пока никто не советовал:

  • http://www.twilio.com/sms
  • http://api.orange.com/
  • https://www.tropo.com/home.jsp
  • http://www.clickatell.com/
  • http://www.bulksms.com/
  • http://j2a.ru/post/967426877/sms-gateways-shootout

Пользуюсь smsc.ru цена: 30 коп

А кто что может сказать по поводу www.sms.gt , обещают за 7 копеек от любого количества, неужели действительно и 50 штук можно отправить по такой цене?

Пиарщики сервиса sms.gt сюда даже заходят, ну ладно, оставим... пока

Любомир 18 июля 2013 г. 4:18

Feedgee вот сервис каким пользуюсь я. 15 коп.за смс

smstraffic.ru - проверенно нагрузками :)

avisosms.ru - очень доволен, хороше api, проблем никаких нет.

Теперь актуален 1й вариант =) все сервисы быстренько сворачиваются.
sim + huawei e173 + dongle + asterisk. и звонить можно по voip Чего хотели- того добились скажи нет роумингу по всему миру =)

avisosms закрылся =) успели перекинуть клиентов.
smsunion закрылся без предупреждения, 1к.р. денег ушло в фонд помощи озеленения луны.

Да, littlesms тоже помер в том году, всех клиентов перенесли на http://smsc.ru/

этот вот из новеньких smsonnet.com

Оставьте свой комментарий

Markdown