Pull to refresh

Оповещение по телефону из Zabbix

Lumber room
Awaiting invitation

Проблема


В качестве системы мониторинга ИТ-инфраструктуры у нас используется Zabbix.
Для критичных триггеров, о срабатывании которых администраторы должны быть оповещены 24/7, настроены SMS-уведомления.

Но субботний вечер показал, что при неудачном стечении обстоятельств SMSки могут остаться незамеченными.
И случилось это конечно тогда, когда сообщение гласило: «UPS Alert — No power!».
Хорошо, что в офисе работали люди, и сообщили по телефону об отключении энергии во всем здании.

Почему бы нам не заставить Zabbix звонить по телефону? Ведь пропустить звонок сложнее, чем SMS.

Решение


Интересно? Прошу под кат…

Нам понадобится один компьютер с zabbix-агентом и asterisk.

Подготовим фразу для сообщения

Её можно записать c микрофона, либо синтезировать.
У нас на asterisk установлен festival — используем его.
Создаем ups-fail.txt
Внимание!
Отключили электричество!

Генерим wave-файл
text2wave -F 8000 -o ups-fail.wav ups-fail.txt
Кладем файл в /var/lib/asterisk/sounds
Готово.

Добавляем нужный функционал в dialplan

Вносим изменения в /etc/asterisk/extensions_custom.conf (у нас используется сборка trixbox)
[admin-alert]
exten => s,1,Answer()
exten => s,n,Playback(ups-fail)
exten => s,n,Playback(ups-fail)
exten => s,n,Playback(ups-fail)
exten => s,n,Hangup()

Готово.

Создаем call-файл для дозвона

Пусть он будет /etc/asterisk/scripts/ups_fail.call
Channel: Local/89210000000@from-internal
CallerID: MyCompany <8120000000>
MaxRetries: 2
RetryTime: 45
WaitTime: 30
Context: admin-alert
Extension: s
Priority: 1
AlwaysDelete Yes

Не забудем выставить владельца asterisk:asterisk.
Готово.

Делаем php-скрипт

Чтобы не мудрить, воспользуемся уже имеющимся web-сервером.
Создаем /var/www/html/alert.php (у нас trixbox).
<?php
echo exec('cp /etc/asterisk/scripts/ups_fail.call /var/spool/asterisk/outgoing/');
?>

Готово.

Первую часть можно проверить, открыв asterisk_host/alert.php из браузера.

Настраиваем zabbix-агент

Для выполнения задачи нам потребуются удаленные команды.
На выбранном zabbix-агенте разрешаем их выполнение.
Для этого в /etc/zabbix/zabbix_agentd.conf исправляем
EnableRemoteCommands=1
LogRemoteCommands=1

Перезапускаем агент: /etc/init.d/zabbix-agent restart
Готово.

Настраиваем действие в zabbix

Создаем действие на основе нужного нам триггера.
И в дополнение к рассылке уведомлений, добавляем «выполнить удаленную команду».
А команду мы будем выполнять вот такую:
zabbix_agent_host:wget -q -O /dev/null asterisk_host/alert.php
Сохраняем. Всё готово.

Проверяем: вырубаем входные автоматы в щите… получаем звонок на телефон с грозным синтезированным голосом!

В нашем случае будет три попытки дозвона на номер 89210000000: 30 секунд ждем ответа, через 15 секунд набираем заново. Если удается дозвониться, в трубку три раза проигрывается звуковой файл и вызов завершается.

Успехов! И поменьше вам таких звонков!
Tags:
Hubs:
You can’t comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.