Звонок-оповещение Zabbix через Asterisk на мобильный телефон
Меня однажды попросили настроить оповещение о некоторых событиях в zabbix в виде звонка на мобильный телефон с проговоркой определенного текста. Сам я в своей практике не сталкивался с ситуациями, когда нужно было бы именно звонить. Обычно хватает почты, смс или на худой конец telegram. Но раз просят, почему не настроить. Делается это довольно просто, и я сейчас расскажу как.
Содержание:
- 1 Введение
- 2 Настройка оповещений через asterisk
- 3 Звонок на мобильный телефон по событию в zabbix
- 4 Проверка работы оповещения на сотовый
Введение
Мониторинг zabbix славится своей гибкостью. Я его люблю в основном за это. Можно придумать какой угодно функционал в скриптах и прикрепить его в виде триггера к заббиксу. То же самое можно делать с различными метриками, но сегодня мы будем говорить именно о триггерах.
Asterisk умеет совершать исходящие звонки на основе информации в так называемых call файлах. Ему достаточно положить в определенную папку файл, где будут указаны параметры звонка и он позвонит. Таким образом, наша задача по настройке оповещений в виде звонков на мобильный телефон сводится к созданию таких файлов на нужные нам события.
Мы можем позвонив, проговорить записанную ранее аудиозапись, либо прочитать текст из файла. Второй вариант более сложный, требует установку дополнительных программ, умеющих читать текст. Мне это было не нужно, так как набор фраз был ограниченный и его не сложно записать заранее. Так что у меня zabbix будет звонить через asterisk и говорить заранее подготовленные записи.
Первым делом мы напишем скрипт, который будет генерировать call файлы для asterisk и подготовим dialplan астериска для исходящих звонков через zabbix. А потом настроим выполнение этого скрипта по определенным событиям в мониторинге.
Все действия будут выполняться на серверах под управлением CentOS 7. Если у вас ничего нет и вы только думаете как настроить то, что я описал выше, приведу для вас все необходимые ссылки с описанием настройки всего, что понадобится:
- Необходимо установить и настроить centos 7.
- Подготовить сервер мониторинга zabbix.
- Настроить сервер телефонии asterisk.
Если вы предпочитаете систему Debian, то вот то же самое, только для нее:
- Установка Debian 9.
- Базовая настройка Debian 9.
- Установка и настройка zabbix на debian.
Когда все готово, можно приступать к реализации задуманного.
Настройка оповещений через asterisk
Я не буду рассказывать о формате call файлов астериск. В интернете есть полная информация. Привожу сразу готовый скрипт с комментариями, который будет генерировать файл звонка. Этот скрипт должен располагаться на сервере с asterisk. И на нем обязательно должен стоять zabbix-agent. Можно и без этого обойтись, генерировать call файл в любом месте и потом по сети тем или иным способом передавать на сервер с asterisk. Но мне удобнее все делать сразу на астериске, так как у меня всегда все сервера под мониторингом.
Создадим директорию для скрипта, выставим на нее права и напишем скрипт для формирования 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
89659036455 | Мобильный телефон, куда будем звонить |
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
Настраиваем сам сервер мониторинга zabbix. Я для примера буду использовать следующее событие — будем звонить на мобильный телефон, когда количество ssh пользователей на сервере будет больше, чем 2. Эта метрика есть в стандартном шаблоне для серверов linux. Триггер создам для этого вручную. Открываем необходимый для теста хост и добавляем новый триггер.
В данном случае asterisk это имя сервера. Сервер может быть любым.
Дальше идем в раздел Configuration -> Actions и создаем новое действие с Event source в виде Triggers. Выбираем в качестве условия только что добавленный триггер.
Переходим на вкладку 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 можно различными способами.
- Ограничение на звонки для группы номеров в asterisk
- Настройка мониторинга asterisk в zabbix
- 1С Не совпадает версия временного файла
- Процесс 1С rmngr.exe грузит процессор
- Установка и настройка postgresql на debian 8 для работы с 1С
- Ускорение работы 1С с postgresql и диагностика проблем производительности
- Бэкап и восстановление базы 1С в бд postgresql, обслуживание базы
- Asterisk — SIP АТС для офиса, пошаговая инструкция по настройке с нуля
- Как расшифровать файл с расширением vault после вируса шифровальщика
- Сетевые настройки в CentOS 7