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

Замечательная система мониторинга Zabbix предлагает «из коробки» несколько способов оповещения администратора о возникших проблемах: e-mail, SMS и Jabber.

В этом топике я расскажу вам как подружить Zabbix и офисную АТС на основе Asterisk. Когда произойдет нештатная ситуация вам позвонит робот и проговорит сообщение с описанием проблемы.

Зачем это нужно

Оповещения по e-mail неплохо работают, когда их мало. При большом количестве писем возникает вероятность пропустить критическую ошибку. Поэтому логично настроить на e-mail оповещения по всем уровням проблем, а на SMS — только самые критичные.
Но, к сожалению, не у всех коллег администраторов есть бюджет на покупку GMS-модема и оплату SMS. Отсылка SMS через онлайн сервисы не надежна, т.к. у нас может упасть канал в Интернет. А оповещение через свою АТС будет бесплатным. Вы сможете настроить звонок на внутренний номер в офисе, группу абонентов или на мобильный. Если АТС подключена к физической телефонной линии, то падение канала в Интернет ей будет не страшно.

Как это работает

В сети я нашел па ру примеров скриптов для решения этой задачи. Однако оба они обладают существенными недостатками: используют PHP (зачем?) и не умеют зачитывать текст сообщения — только стандартное сообщение, что есть какая-то проблема.

Наш скрипт будет работать так:

  1. при возникновении alert Заббикс запускает bash-скрипт
  2. bash-скрипт готовит call-файл для Asterisk и сообщение об ошибке в текстовом виде
  3. файлы пересылаются по SCP на сервер Asterisk
  4. по SSH на Asterisk запускается text2wave, зачитывающий текст в wav-файл
  5. wav-файл и call-файл копируются в соответствующие папки Asterisk
  6. 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/

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *