Pull to refresh

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

Reading time3 min
Views23K
Замечательная система мониторинга 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.
Tags:
Hubs:
Total votes 21: ↑20 and ↓1+19
Comments6

Articles