Оповещение Zabbix через Asterisk на телефон

Оповещение о событии zabbix на телефон -сценарий в котором почты, смс недостаточно. Например, событие zabbix генерируется на основе  запроса к базе данных,  результат запроса информация которую нужно передать голосом.
На сайте  serveradmin.ru просто рассказано как  настроить звонок оповещение zabbix через Asterisk.  Идея интересная.
Наша задача создать голосовые оповещения  по событиям генерируемым на основе  SQL запроса.
Статья в стадии разработки. Пишите комментарий, елси есть возможность принять участие.

Для Asterisk существуют .call файлы  достаточно положить в определенную папку файл, где будут указаны параметры звонка и он позвонит.
Необходим скрипт, который будет генерировать call файлы для asterisk и  dialplan астериска для исходящих звонков.

Срипт должен исплолняться на сервере Asterisk — zabbix агент обязателен.

Создадим директорию для скрипта, выставим на нее права и напишем скрипт для формирования call файла.

# mkdir /etc/zabbix/scripts && chown zabbix. /etc/zabbix/scripts
# mcedit /etc/zabbix/scripts/make-call.sh
#!/bin/bash

callname=/etc/zabbix/scripts/zabbix-alert.call

# Call-файл Asterisk
echo "Channel: SIP/89659036455@num-mango" > $callname
# Каким номером представляемся
echo "Callerid: 101" >> $callname
# Сколько раз звонить в случае неответа
echo "MaxRetries: 2" >> $callname
# Через сколько времени перезваниваем (сек)
echo "RetryTime: 90" >> $callname
# Сколько ждем ответа (сек)
echo "WaitTime: 60" >> $callname
# Контекс звонка в dialplan
echo "Context: zabbix_alarm" >> $callname
echo "Extension: s" >> $callname
echo "Priority: 1" >> $callname

cp $callname /var/spool/asterisk/outgoing/zabbix-alert.call
rm -f $callname
Мобильный телефон, куда будем звонить
num-mango Имя транка для исходящих звонков
zabbix_alarm Имя контекста в dialplan, по которому выполняется звонок

Мы создаем файл с нужными параметрами и копируем его в папку /var/spool/asterisk/outgoing. После этого asterisk сразу совершает звонок.

Теперь добавим указанный контекст в dialplan. Редактируем файл /etc/asterisk/extensions.conf

[zabbix_alarm]
exten => s,1,Answer
exten => s,n,Wait(1)
exten => s,n,Background(yourcallisimportant)
exten => s,n,hangup

В этом контексте мы снимаем трубку и говорим абоненту стандартную фразу из поставки астериска: «Ваш звонок очень важен для нас бла бла бла….» Поставил для теста ее, потому что она достаточно длинная.

Перечитываем диалплан и можно тестировать. После запуска скрипта вручную, астериск должен вам позвонить и проговорить указанную фразу. Если этого нет, то разбирайтесь сразу на месте, дальше в zabbix лезть нет смысла. Сначала надо настроить звонок. Обратите внимание на права файлов. Не забывайте, что скрипт будет исполняться от пользователя, под которым работает мониторинг. Скорее всего это zabbix. У него должны быть права для записи в папку /var/spool/asterisk/outgoing, иначе он не сможет создать call файл. Я просто добавил права на запись в эту папку группе zabbix:

# chown root:zabbix /var/spool/asterisk/outgoing && chmod 0775 /var/spool/asterisk/outgoing

Нам нужно разрешить выполнение внешних скриптов в zabbix-agent. Заодно включим их логирование. Для этого выставляем в файле конфигурации агента следующие параметры:

EnableRemoteCommands=1
LogRemoteCommands=1

Перезапускаем агента:

# systemctl restart zabbix-agent

На астериске настройку закончили. У нас все готово для совершения звонков по событиям.

Настраиваем сам сервер мониторинга zabbix. Я для примера буду использовать следующее событие — будем звонить на мобильный телефон, когда количество ssh пользователей на сервере будет больше, чем 2. Эта метрика есть в стандартном шаблоне для серверов linux. Триггер создам для этого вручную. Открываем необходимый для теста хост и добавляем новый триггер.

Создание триггера в zabbix

В данном случае asterisk это имя сервера. Сервер может быть любым.

Дальше идем в раздел Configuration -> Actions и создаем новое действие с Event source в виде Triggers. Выбираем в качестве условия только что добавленный триггер.

Добавление нового action

Переходим на вкладку Operations и добавляем там новое действие в соответствии с нашей задачей.

Настраиваем скрипт звонка на телефон

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

Осталось проверить работу всей конструкции. Для этого заходим 3-мя пользователя по ssh на сервер asterisk и ждем звонка. При срабатывании триггера на дашборде будет следующая информация.

В это же время вам придет звонок на мобильник. Если не ответите на звонок, через 90 секунд позвонит еще раз. В логе агента заббикс появится следующая запись:

# cat /var/log/zabbix/zabbix_agentd.log 

44152:20170407:175635.453 Executing command '/etc/zabbix/scripts/make-call.sh'

А в логе звонков астериск будет информация о совершенном звонке:

# cat /var/log/asterisk/cdr-csv/Master.csv

"","101","s","zabbix_alarm",""""" <101>","SIP/num-mango-00007561","","BackGround","yourcallisimportant","2017-04-07 14:58:15","2017-04-07 14:58:15","2017-04-07 14:58:20",4,4,"ANSWERED","DOCUMENTATION","1491577085.45519",""

Если все сделали правильно, у вас будет примерно то же самое. Статью написал по рабочему примеру, который во время написания настроил. Реализовать подобные оповещения можно по-разному, но принцип будет тот же самый — формирование call файла и создание необходимого action. Создавать call файлы и настраивать action можно различными способами.

Иточник https://serveradmin.ru/zvonok-opoveshhenie-zabbix-cherez-asterisk-na-mobilnyiy-telefon/

Добавить комментарий