Проблема
В качестве системы мониторинга ИТ-инфраструктуры у нас используется 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 секунд набираем заново. Если удается дозвониться, в трубку три раза проигрывается звуковой файл и вызов завершается.
Успехов! И поменьше вам таких звонков!