В этом топике я расскажу вам как подружить Zabbix и офисную АТС на основе Asterisk. Когда произойдет нештатная ситуация вам позвонит робот и проговорит сообщение с описанием проблемы.
Зачем это нужно
Оповещения по e-mail неплохо работают, когда их мало. При большом количестве писем возникает вероятность пропустить критическую ошибку. Поэтому логично настроить на e-mail оповещения по всем уровням проблем, а на SMS — только самые критичные.
Но, к сожалению, не у всех коллег администраторов есть бюджет на покупку GMS-модема и оплату SMS. Отсылка SMS через онлайн сервисы не надежна, т.к. у нас может упасть канал в Интернет. А оповещение через свою АТС будет бесплатным. Вы сможете настроить звонок на внутренний номер в офисе, группу абонентов или на мобильный. Если АТС подключена к физической телефонной линии, то падение канала в Интернет ей будет не страшно.
Как это работает
В сети я нашел па ру примеров скриптов для решения этой задачи. Однако оба они обладают существенными недостатками: используют PHP (зачем?) и не умеют зачитывать текст сообщения — только стандартное сообщение, что есть какая-то проблема.
Наш скрипт будет работать так:
- при возникновении alert Заббикс запускает bash-скрипт
- bash-скрипт готовит call-файл для Asterisk и сообщение об ошибке в текстовом виде
- файлы пересылаются по SCP на сервер Asterisk
- по SSH на Asterisk запускается text2wave, зачитывающий текст в wav-файл
- wav-файл и call-файл копируются в соответствующие папки Asterisk
- Asterisk видит файлы, совершает звонок и проигрывает сообщение
Весь процесс занимает всего 1-2 секунды.
Скрипт
Заббикс умеет запускать скрипты при возникновении проблем. Скрипты лежат в папке, указанной в переменной AlertScriptsPath серверного конфига Заббикс.
Как и все такие скрипты, наш скрипт должен принимать 3 параметра: адресат, тема сообщения, текст сообщения.
#!/bin/bash # Asterisk сервер server="asterisk@pbx.roga-i-kopyta.com" # Уникальная метка ts=$(date +%s%N) # Создаем два файла txtname=/tmp/zabbix-alert.$ts.txt callname=/tmp/zabbix-alert.$ts.call # Наговариваемый текст. # Приветствие. Запятые для паузы. echo "Zabbix alert,,,,,,,,,,,,,,,,," > $txtname # $2 - subject триггера. Можно поставить $3 - сообщение. echo "$2" >> $txtname # Call-файл Asterisk echo "Channel: Local/$1@from-internal" > $callname echo "Extension: s" >> $callname echo "MaxRetries: 2" >> $callname echo "RetryTime: 60" >> $callname echo "WaitTime: 30" >> $callname # С какого номера звоним echo "Callerid: 999" >> $callname echo "Application: Playback" >> $callname # Повторяем 3 раза echo "Data: zabbix-alert.$ts&zabbix-alert.$ts&zabbix-alert.$ts" >> $callname scp $txtname $server:$txtname scp $callname $server:$callname rm -f $txtname rm -f $callname ssh $server "cat $txtname | /usr/bin/text2wave -F 8000 > /var/lib/asterisk/sounds/zabbix-alert.$ts.wav && mv $callname /var/spool/asterisk/outgoing/ && rm -f $txtname && find /var/lib/asterisk/sounds/ -name 'zabbix-alert*' -type f -mmin +10 -delete"
Настраиваем серверы
Тут все зависит от используемой вами ОС/дистрибутива, поэтому 100% точных рекомендаций дать не могу.
Если вкратце, во-первых, нам нужно на Asterisk установить программу text2wave (пакет Festival), по желанию установить русский голос.
Во-вторых, нужно настроить беспарольную SSH аутентификацию между Zabbix и Asterisk. Можно воспользоваться этой инструкцией (пп. 1-6). Ключ придется сделать без passphrase. Вы можете настроить аутентификацию как для пользователей, под которыми работают Zabbix и Asterisk, так и завести других, но во втором случае в скрипте надо будет использовать sudo.
Также проследите, чтобы у Asterisk были все права на создаваемый call-файл.
Если нужно, заведите отдельный extension, с которого будет происходить звонок.
После того, как все настроено, можно проверить работу скрипта запустив его из консоли:
./call_sip.sh номер "текст" ""
Если не получается, ковыряем логи Zabbix, ssh и Asterisk. Я большую часть времени потратил как на раз на настройку sudo и ssh.
Настраиваем Zabbix
Самое простое:
В Administration — Media types создаем новый тип оповещения.
У нужных пользователей (Administration — Users) в закладке Media указываем их телефон. Это может быть как внутренний номер, так и мобильный — в соответствие с планом набора вашей АТС.
В Actions редактируем или создаем новое действие, указав оповещаемых пользователей. Я рекомендую заголовок сообщения установить в {TRIGGER.STATUS} {TRIGGER.NAME} {HOSTNAME}, чтобы было понятно на какой машине произошла беда.
Итого
Мы получили еще один канал оповещения администраторов в дополнение к e-mail и SMS.
ссылка на оригинал статьи http://habrahabr.ru/post/184154/
Добавить комментарий