Оповещения из Nagios телефонным звонком

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

Все действия выполняются на Ubuntu, в качестве sip-провайдера выступает sipnet.ru

Загружаем и собираем pjsip:

wget http://www.pjsip.org/release/1.10/pjproject-1.10.tar.bz2
tar xfv pjproject-1.10.tar.bz2
cd pjproject-1.10
./configure --disable-sound
make dep
make

Из всего что насобиралось понадобится только pjsua:

sudo cp pjsip-apps/bin/pjsua-x86_64-unknown-linux-gnu /usr/bin/pjsua

Создадим файл /etc/pjsuarc со следующим содержанием:

--duration=1		#если снимем трубку, то сервер тут же отключится
--null-audio		#чтобы pjsua не ругалась на отсутствие звукового устройства
--id sip:SIPID@sipnet.ru	#конфиг для sipnet.ru
--registrar sip:sipnet.ru
--realm etc.tario.ru
--username SIPID
--password PASSWORD

Теперь самое время проверить конфигурацию и сделать тестовый звонок:

pjsua --config-file=/etc/pjsuarc sip:+12345678901@sipnet.ru

В случае с sipnet, если не включена услуга «АОН» в разделе «Премиум услуги» (не знаю почему премиум, услуга бесплатная), или выбран тот же номер, на который совершается звонок, то определится номер +74993462198 (по крайней мере для России), это не позволяет идентифицировать, что звонит наш сервер.
Поэтому я поступил так: зарегистрировал в sipnet свой второй номер и указал его в качестве отображаемого номера. В телефоне сохранил его под именем Nagios и поставил ему приятную громкую мелодию.

Далее изменим права на /etc/pjsuarc, чтобы видеть пароль могли только root и nagios:

sudo chmod 640 /etc/pjsuarc
sudo chown root:nagios /etc/pjsuarc

В /etc/nagios3/commands.cfg добавим следующие строки:

# 'notify-host-by-sip' command definition
        define command{
        command_name    notify-host-by-sip
        command_line    (sleep 120 && echo q) | /usr/bin/pjsua --config-file=/etc/pjsuarc sip:$CONTACTEMAIL$
        }

# 'notify-service-by-sip' command definition
define command{
        command_name    notify-service-by-sip
        command_line    (sleep 120 && echo q) | /usr/bin/pjsua --config-file=/etc/pjsuarc sip:$CONTACTEMAIL$
        }

В /etc/nagios3/conf.d/contacts_nagios2.cfg добавим контакт:

define contact{
        contact_name                    user_sip
        alias                           useralias
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    c
        host_notification_options       d
        service_notification_commands   notify-service-by-sip
        host_notification_commands      notify-host-by-sip
        email                           +12345678901@sipnet.ru
        }

Nagios будет звонить в любое время, но только в критических случаях.

И не забудем добавить новый контакт в том же конфиге в нужную группу:

define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 root,user_email,user_sip
        }

На всякий случай убеждаемся, что в критическом случае сервер действительно нам звонит, например исправив пароль для доступа к MySQL на неверный в /etc/nagios3/conf.d/services_nagios2.cfg

Перезапускаем Nagios:

sudo service nagios3 restart

И ждём звонка.

При желании можно пойти дальше и добавить text-to-speech, но мне оказалось достаточно звонка с определённого номера, чтобы увидеть что появилась проблема, а детали можно узнать, проверив почту.

Мануал по pjsua
Поделиться публикацией

Комментарии 37

    0
    Интересно, но не ясно зачем? Гораздо информативнее получать смски и дублировать их письмами в почту.
    Да и такие звонки будут быстрее съедать батарею нежели смс
      +9
      Основная причина — получение критических уведомлений, которые требуют быстрой реакции. Телефонный звонок сложнее пропустить, чем sms.
      Такие уведомления в нормальной ситуации должны быть редки, поэтому о батарее волноваться не стоит.
        +4
        телефонный звонок ночью сложнее пропустить.
          +1
          Уровни аварий бывают разные и наиболее критичные можно как раз сделать и через звонки.
          +1
          Советую команду которая звонит вынести в скрипт, в скрипте предварительно захватывать мутекс, чтобы не порождать шквал звонков при падении сегмента сети или отвалившиегося сервиса -> куча сервисов в состоянии Critical c сообщением Service check timeout
            0
            > отвалившиегося хоста -> куча сервисов в состоянии Critical c сообщением Service check timeout
            fixed
            +21
            (sleep 120 && echo q) | /usr/bin/pjsua ...

            — Холмс, что это за зловещее молчание?
            — Это рыба Баскервилей, Ватсон.
              +4
              Это наиболее простой костыль, который удалось придумать, чтобы останавливать pjsua через две минуты, отправляя в неё 'q'. Если сможете предложить что-то проще — буду рад подсказкам.
              +13
              Жена с мужем:
              -кто звонил?
              -сервер
              Далее разговор на пол часа :)
                +27
                Дорогой, пока ты был в душе, несколько раз звонила какая-то pjsua и говорила про ужин при свитчах.
                  +11
                  Дорогой, почему ты ездил ночью поднимать сервер, а от тебя пахнет какой-то pjsua.
                  0
                  у меня мониторинг в телефоне бывшая девушка переименовала в «любовница» и уже не особо парилась потом, что любовница звонит мне по ночам :)
                  0
                  Идея со звонками — хороша, но сам по себе звонок — малоинформативен. А вот дублирование события (звонок) по SMS — должно свести потерю нервных клеток к минимуму.
                    0
                    > должно свести потерю нервных клеток к минимуму.
                    Смотря во сколько позвонит :)
                    –2
                    А не лучше ли подключить к офисной АТС модем, чтобы он набирал номер через POTS/IDSN/что_там? SIP — это хорошо, но оповещения о падении шлюза или провайдерского интернета можно будет ждать долго.
                      0
                      Сервера иногда стоят в гермозонах, где особо модем и не поставишь.
                        +1
                        Всё зависит от ситуации. В моём случае сервер находится далеко и в другой стране и ни о какой офисной АТС речи не идёт.
                        • НЛО прилетело и опубликовало эту надпись здесь
                          0
                          Ну надо отметить, то чтобы сделать аккаунт постоянным нужно положить денежку на счёт. По крайней мере раньше так было. Ну и приготовьтесь к критическим дням, когда sipnet показывает аттракцион невиданной щедрости в виде бесплатных звонков — в эти дни позвонить куда-либо невозможно. Ну а в целом, решение интересное.
                          Могу предложить в качестве альтернативы сервер Asterisk с установленным на нём 3G-USB модемом Huawei. Но в данном случае нужно дополнительное железо, а точнее софт не из лёгких. А возможно кто-то подскажет как убрать ненужную прослойку в виде Asterisk и напрямую с модемом работать.
                            0
                            Можно попробовать сказать в порт модема ATD номер телефона
                              0
                              Если для смс, то можно использовать gnokii. У меня на zabbix-е используется такой скрипт:

                              #!/bin/bash

                              export HOME=/etc/zabbix
                              LOG="/var/log/zabbix/sms_message.log"
                              phone="$1"
                              theme="$2"
                              message="$3"
                              send_message="PHONE: $phone; THEME: $theme; MESSAGE: $message"
                              echo "`date`: $send_message" >> $LOG
                              echo "$message" | /usr/bin/gnokii --sendsms $phone


                              Модем:
                              $gnokii --identify
                              GNOKII Version 0.6.28
                              IMEI : 358811036450763
                              Manufacturer : huawei
                              Model : E1550
                              Product name : E1550
                              Revision : 11.608.13.02.00


                              Работает отлично.
                              +14
                              Мечты:
                              Кто это?
                              Алло, это Нагиос, у нас там Апач лег, я поправил конфиги и перезапустил демона.
                                0
                                Я поправила и перезапустила! А Нагиосу сменить имя.
                                  +16
                                  Звонит один сервер другому:
                                  — Можешь набрать админа, чего-то не могу дозвониться?
                                  +2
                                  Ждем топика с реализацией обратной связи на основе распознавания речи.
                                    0
                                    Звонить на сервер и рассказывать ему что делать?
                                      0
                                      по команде "*ля" отменять последние изменения конфигов :)
                                    0
                                    очень интересная реализация, спасибо! сейчас буду пробовать прикрутить это к Zenoss'у)
                                      +1
                                      у меня pjsip прикручен к zabbix'у уже пару лет :) только он у меня еще и забавный звуковой файл крутит
                                        0
                                        Подробности в студию!
                                          0
                                            0
                                            не, все жосче :) там синтезированный женский голос, рассказывающий о том, что он теперь живет в кронтабе и мы навсегда вместе :D
                                        +3
                                        Ждем вторую часть с text-to-speech — так действительно можно и информативности добавить и алерт получается гораздо лучше смски!
                                          0
                                          Тока что сделал, щаз напишу как.
                                          0
                                          А я люблю заббикс — у него гуй.
                                            0
                                            попробуйте zenoss, у него гуй больше)
                                              +2
                                              А вы че тут в каментах гуями то мереетись?

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Самое читаемое