Pull to refresh

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

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

Все действия выполняются на 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
Tags:nagiosmonitoringsipnotifications
Hubs: System administration
Rating +43
Views 9.1k Add to bookmarks 100
Comments
Comments 37

Popular right now

Senior System Analyst
from 4,000 to 5,000 $Spotware SystemsRemote job
Cистемный архитектор/System architect
from 250,000 to 350,000 ₽C-Executives LLCRemote job
DevOps Engineer
from 150,000 ₽Droice LabsRemote job
Системный аналитик/ System analyst
from 200,000 to 300,000 ₽C-Executives LLCRemote job