Меня однажды попросили настроить оповещение о некоторых событиях в zabbix в виде звонка на мобильный телефон с проговоркой определенного текста. Сам я в своей практике не сталкивался с ситуациями, когда нужно было бы именно звонить. Обычно хватает почты, смс или на худой конец telegram. Но раз просят, почему не настроить. Делается это довольно просто, и я сейчас расскажу как.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Содержание:
Введение
Мониторинг zabbix славится своей гибкостью. Я его люблю в основном за это. Можно придумать какой угодно функционал в скриптах и прикрепить его в виде триггера к заббиксу. То же самое можно делать с различными метриками, но сегодня мы будем говорить именно о триггерах.
Asterisk умеет совершать исходящие звонки на основе информации в так называемых call файлах. Ему достаточно положить в определенную папку файл, где будут указаны параметры звонка и он позвонит. Таким образом, наша задача по настройке оповещений в виде звонков на мобильный телефон сводится к созданию таких файлов на нужные нам события.
Мы можем позвонив, проговорить записанную ранее аудиозапись, либо прочитать текст из файла. Второй вариант более сложный, требует установку дополнительных программ, умеющих читать текст. Мне это было не нужно, так как набор фраз был ограниченный и его не сложно записать заранее. Так что у меня zabbix будет звонить через asterisk и говорить заранее подготовленные записи.
Первым делом мы напишем скрипт, который будет генерировать call файлы для asterisk и подготовим dialplan астериска для исходящих звонков через zabbix. А потом настроим выполнение этого скрипта по определенным событиям в мониторинге.
Все действия будут выполняться на серверах под управлением CentOS.
Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:
То же самое на Debian 10, если предпочитаете его:
Когда все готово, можно приступать к реализации задуманного.
Настройка оповещений через asterisk
Я не буду рассказывать о формате call файлов астериск. В интернете есть полная информация. Привожу сразу готовый скрипт с комментариями, который будет генерировать файл звонка. Этот скрипт должен располагаться на сервере с asterisk. И на нем обязательно должен стоять zabbix-agent. Можно и без этого обойтись, генерировать call файл в любом месте и потом по сети тем или иным способом передавать на сервер с asterisk. Но мне удобнее все делать сразу на астериске, так как у меня всегда все сервера под мониторингом.
Создадим директорию для скрипта, выставим на нее права и напишем скрипт для формирования call файла.
# mkdir /etc/zabbix/scripts && chown zabbix. /etc/zabbix/scripts # mcedit /etc/zabbix/scripts/make-call.sh
#!/bin/bash callname=/etc/zabbix/scripts/zabbix-alert.call # Call-файл Asterisk echo "Channel: SIP/89659036455@num-mango" > $callname # Каким номером представляемся echo "Callerid: 101" >> $callname # Сколько раз звонить в случае неответа echo "MaxRetries: 2" >> $callname # Через сколько времени перезваниваем (сек) echo "RetryTime: 90" >> $callname # Сколько ждем ответа (сек) echo "WaitTime: 60" >> $callname # Контекс звонка в dialplan echo "Context: zabbix_alarm" >> $callname echo "Extension: s" >> $callname echo "Priority: 1" >> $callname cp $callname /var/spool/asterisk/outgoing/zabbix-alert.call rm -f $callname
89659036455 | Мобильный телефон, куда будем звонить |
num-mango | Имя транка для исходящих звонков |
zabbix_alarm | Имя контекста в dialplan, по которому выполняется звонок |
Мы создаем файл с нужными параметрами и копируем его в папку /var/spool/asterisk/outgoing. После этого asterisk сразу совершает звонок.
Теперь добавим указанный контекст в dialplan. Редактируем файл /etc/asterisk/extensions.conf
[zabbix_alarm] exten => s,1,Answer exten => s,n,Wait(1) exten => s,n,Background(yourcallisimportant) exten => s,n,hangup
В этом контексте мы снимаем трубку и говорим абоненту стандартную фразу из поставки астериска: "Ваш звонок очень важен для нас бла бла бла...." Поставил для теста ее, потому что она достаточно длинная. Удобно проверять функционал. Если у вас уже готовы ваши фразы, можете использовать сразу их.
В данном примере один скрипт и один контекст с одной фразой. Если вам нужно несколько разных фраз проговаривать на разные события, то создавайте на каждое такое событие отдельный скрипт, в нем отдельный контекст, а уже в контекстах указывайте разные фразы. Я все покажу на одном примере.
Перечитываем диалплан и можно тестировать. После запуска скрипта вручную, астериск должен вам позвонить и проговорить указанную фразу. Если этого нет, то разбирайтесь сразу на месте, дальше в zabbix лезть нет смысла. Сначала надо настроить звонок. Обратите внимание на права файлов. Не забывайте, что скрипт будет исполняться от пользователя, под которым работает мониторинг. Скорее всего это zabbix. У него должны быть права для записи в папку /var/spool/asterisk/outgoing, иначе он не сможет создать call файл. Я просто добавил права на запись в эту папку группе zabbix:
# chown root:zabbix /var/spool/asterisk/outgoing && chmod 0775 /var/spool/asterisk/outgoing
Нам нужно разрешить выполнение внешних скриптов в zabbix-agent. Заодно включим их логирование. Для этого выставляем в файле конфигурации агента следующие параметры:
EnableRemoteCommands=1 LogRemoteCommands=1
Перезапускаем агента:
# systemctl restart zabbix-agent
На астериске настройку закончили. У нас все готово для совершения звонков по событиям.
Звонок на мобильный телефон по событию в zabbix
Настраиваем сам сервер мониторинга zabbix. Я для примера буду использовать следующее событие - будем звонить на мобильный телефон, когда количество ssh пользователей на сервере будет больше, чем 2. Эта метрика есть в стандартном шаблоне для серверов linux. Триггер создам для этого вручную. Открываем необходимый для теста хост и добавляем новый триггер.
В данном случае asterisk это имя сервера. Сервер может быть любым.
Дальше идем в раздел Configuration -> Actions и создаем новое действие с Event source в виде Triggers. Выбираем в качестве условия только что добавленный триггер.
Переходим на вкладку Operations и добавляем там новое действие в соответствии с нашей задачей.
Обращаю внимание, что вы можете привязаться к триггеру на любом сервере, а действие по оповещению в виде скрипта будет выполнено на сервере с астериском. Сохраняйте все данные и можно проверять.
Проверка работы оповещения на сотовый
Осталось проверить работу всей конструкции. Для этого заходим 3-мя пользователя по ssh на сервер asterisk и ждем звонка. При срабатывании триггера на дашборде будет следующая информация.
В это же время вам придет звонок на мобильник. Если не ответите на звонок, через 90 секунд позвонит еще раз. В логе агента заббикс появится следующая запись:
# cat /var/log/zabbix/zabbix_agentd.log 44152:20170407:175635.453 Executing command '/etc/zabbix/scripts/make-call.sh'
А в логе звонков астериск будет информация о совершенном звонке:
# cat /var/log/asterisk/cdr-csv/Master.csv "","101","s","zabbix_alarm",""""" <101>","SIP/num-mango-00007561","","BackGround","yourcallisimportant","2017-04-07 14:58:15","2017-04-07 14:58:15","2017-04-07 14:58:20",4,4,"ANSWERED","DOCUMENTATION","1491577085.45519",""
Если все сделали правильно, у вас будет примерно то же самое. Статью написал по рабочему примеру, который во время написания настроил. Реализовать подобные оповещения можно по-разному, но принцип будет тот же самый - формирование call файла и создание необходимого action. Создавать call файлы и настраивать action можно различными способами.
Помогла статья? Подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Рекомендую полезные материалы по Zabbix: |
Настройки системы |
---|
Видео и подробное описание установки и настройки Zabbix 4.0, а также установка агентов на linux и windows и подключение их к мониторингу.
Подробное описание обновления системы мониторинга zabbix версии 3.4 до новой версии 4.0.
Пошаговая процедура обновления сервера мониторинга zabbix 2.4 до 3.0. Подробное описание каждого шага с пояснениями и рекомендациями.
Подробное описание установки и настройки zabbix proxy для организации распределенной системы мониторинга. Все показано на примерах.
Подробное описание установки системы мониторинга Zabbix на веб сервер на базе nginx + php-fpm.
|
Мониторинг служб и сервисов |
Мониторинг температуры процессора с помощью zabbix на Windows сервере с использованием пользовательских скриптов.
Настройка полноценного мониторинга web сервера nginx и php-fpm в zabbix с помощью скриптов и пользовательских параметров.
Мониторинг репликации mysql с помощью Zabbix. Подробный разбор методики и тестирование работы.
Описание настройки мониторинга tcp служб с помощью zabbix и его инструмента простых проверок (simple checks)
Настройка мониторинга рейда mdadm с помощью zabbix. Подробное пояснение принципа работы и пошаговая инструкция.
Подробное описание мониторинга регистраций транков (trunk) в asterisk с помощью сервера мониторинга zabbix.
Подробная инструкция со скриншотами по настройке мониторинга по snmp дискового хранилища synology с помощью сервера мониторинга zabbix.
|
Мониторинг различных значений |
Настройка мониторинга web сайта в zabbix. Параметры для наблюдения - доступность сайта, время отклика, скорость доступа к сайту.
Один из способов мониторинга бэкапов с помощью zabbix через проверку даты последнего изменения файла из архивной копии с помощью vfs.file.time.
Подробное описание настройки мониторинга размера бэкапов в Zabbix с помощью внешних скриптов.
Пример настройки мониторинга за временем делегирования домена с помощью Zabbix и внешнего скрипта. Все скрипты и готовый шаблон представлены.
Пример распознавания и мониторинга за изменением значений в обычных текстовых файлах с помощью zabbix.
Описание мониторинга лог файлов в zabbix на примере анализа лога программы apcupsd. Отправка оповещений по событиям из лога.
|
"Дальше идем в раздел Configuration -> Actions и создаем новое действие с Event source в виде Triggers." Чтото не нашол как это сделать на версии 5,4. Нет такого пункта (. Не подскажете как это реализовать теперь - привязать к триггеру скрипт.
В 5.4 надо идти в Администрирование -> Скрипты. Добавлять скрипт. А потом уже его выбирать в Действиях (actions). Вся остальная логика та же самая. Просто скрипты вынесли в отдельный раздел, чтобы один и тот же скрипт было удобно использовать в разных действиях.
Логика понятна. В том то и дело, что в пункте "Настройка-Действия-Действия триггеров" есть всеголиш 2 меню. Действие и Операции. в 1 - выбрали Условие я так понимаю условия срабатывания, а во 2 - только отправка сообщений. А где привязывать наш скрипт? непонятно. Жаль не могу приложить скрин - бьюсь уже неделю. Все маны относятся к старым версиям(((
Отвечу сам себе ))) Оказывается чтоб наш скрипт был доступен в выпадающем меню действия. Нужно при создании самого скрипта выбрать Область "Операция действия"!!! Спасибо
Здравствуйте.
Please need some help.
Пытался сделать все по инструкции, но немного запутался.
На ESXI 7 работают отдельно Zabbix 5.0.7 и Asterisk FreePBX 15.0.16.20, находятся в одной подсети.
Выполненные шаги:
1. Установил zabbix-agent в FreePBX, отредактировал конфигурационный файл и добавил в Zabbix;
2. Скопировал скрипт и изменил номер телефона, имя транка;
3. При попытке создать директорию (FreePBX) mkdir /etc/zabbix/scripts получаю ошибку "mkdir: cannot create directory ‘etc/zabbix/scripts’: No such file or directory". Создал с помощью WinSCP и сохранил скрипт по пути /etc/zabbix/scripts/make-call.sh. В make-call.sh вставил изменный выше код и сохранил.
4. На данном шаге пытаюсь выполнить команду chown zabbix. /etc/zabbix/scripts и получаю ошибку "chown: invalid user: ‘zabbix.’" Под пользователем zabbix подразумевается имя хоста на сервере Zabbix или логин при авторизации на веб-страницу?
5. Мы создаем файл с нужными параметрами и копируем его в папку /var/spool/asterisk/outgoing. После этого asterisk сразу совершает звонок. В скрипте есть команда cp $callname /var/spool/asterisk/outgoing/zabbix-alert.call, стало быть она копирует файл zabbix-alert.call в /var/spool/asterisk/outgoing автоматический?
6. Добавил указанный контекст в dialplan. Отредактировал файл /etc/asterisk/extensions.conf и сохранил.
7. Обратите внимание на права файлов. Не забывайте, что скрипт будет исполняться от пользователя, под которым работает мониторинг. Скорее всего это zabbix. У него должны быть права для записи в папку /var/spool/asterisk/outgoing, иначе он не сможет создать call файл. Я просто добавил права на запись в эту папку группе zabbix:
# chown root:zabbix /var/spool/asterisk/outgoing && chmod 0775 /var/spool/asterisk/outgoing
Здесь аналогичный вопрос: Под пользователем zabbix подразумевается имя хоста на сервере Zabbix или логин при авторизации на веб-страницу? Права нужно выставить на сервере Zabbix или Asterisk?
Благодарю за внимание.
Добрый день. У меня какая-то шляпа с правами на outgoing. Назначил zabbix владельцем, и через ls -l вижу что владелец zabbix но при:
sudo -u zabbix nano /var/spool/asterisk/outgoing говорит что нет доступа.
[2020-05-21 12:56:23] VERBOSE[15902] pbx_spool.c: Attempting call on SIP/896000000@88005114810 for s@zabbix_alarm:1 (Retry 7)
подскажите что можно посмотреть?
Надо еще лог смотреть. Идет попытка звонка, но безуспешная. А почему не получается - не понятно. Более подробный лог надо смотреть.
Вроде пошел звонок и я даже разобрался как мне нужный звуковой файл приаттачить! Теперь другая проблема не перезванивает когда я не беру трубку
Добрый день! Подскажите про нюанс с правами - скрипт генерит .call файл с правами root. Каталог outgoing не очищается. Необходимо чтобы .call файл был с правами asterisk. Как обойти проблему?
Добавьте в скрипт назначение прав пользователю asterisk.
звонок проходит, снимаю трубку, а файл уже проигрывается, то есть если трубку не взять, то он все равно проиграется и звонок отобьется, соответственно ни о каких попытках повторного дозвона и речи не может быть, так как астер думает, что звонок состоялся
Вы что-то путаете. Не может он проиграть ничего, пока трубку не снимете, либо вы что-то в диалплане напутали. Там стоит ожидание ответа - Answer.
Извиняюсь, но это вы путаете, Answer - это не ожидание ответа
Да, я ошибся. За ожидание ответа на вызов отвечает параметр call файла WaitTime. Потом уже идет звонок через контекст с Answer.
Тем не менее, по этой инструкции все работает так, как заявлено. Я много раз настраивал звонки через астериск. Он начинает проговаривать текст после снятия трубки. Единственное, что приходилось делать - ставить подольше задержку перед воспроизведением. Начальная фраза иногда проглатывалась.
тогда подскажите, куда посмотреть, у меня независимо поднял я трубку или нет, файл проигрывается
если звоню на внутренний номер, то файл проигрывается после поднятия трубки, а если на мобильный - то сразу играет независимо поднята трубка или нет
Я не знаю, что тут посоветовать. Похоже, при звонке на мобильный идет какое-то перенаправление у провайдера или где-то еще. Сигнал ответа на звонок поступает раньше, чем он реально доходит до абонента.
А если просто звонить на мобильный, там все как обычно - длинные гудки во время дозвона?
да всё как обычно, уже не знаю что придумать, спасибо за обратную связь, если будут идеи - буду рад услышать
Не подскажете, а как можно передать аргумент в скрипт, который будет содержать default message?
Т.е. я хочу отправить смс с текстом, который как раз в этом default message
[Sep 22 13:19:11] NOTICE[1263]: pbx_spool.c:197 parse_line: Syntax error at line 3 of /var/spool/asterisk/outgoing/make-call.sh
[Sep 22 13:19:11] WARNING[1263]: pbx_spool.c:292 parse_line: Unknown keyword 'echo "Channel' at line 6 of /var/spool/asterisk/outgoing/make-call.sh
[Sep 22 13:19:11] WARNING[1263]: pbx_spool.c:292 parse_line: Unknown keyword 'echo "Callerid' at line 8 of /var/spool/asterisk/outgoing/make-call.sh
[Sep 22 13:19:11] WARNING[1263]: pbx_spool.c:292 parse_line: Unknown keyword 'echo "MaxRetries' at line 10 of /var/spool/asterisk/outgoing/make-call.sh
[Sep 22 13:19:11] WARNING[1263]: pbx_spool.c:292 parse_line: Unknown keyword 'echo "RetryTime' at line 12 of /var/spool/asterisk/outgoing/make-call.sh
[Sep 22 13:19:11] WARNING[1263]: pbx_spool.c:292 parse_line: Unknown keyword 'echo "WaitTime' at line 14 of /var/spool/asterisk/outgoing/make-call.sh
[Sep 22 13:19:11] WARNING[1263]: pbx_spool.c:292 parse_line: Unknown keyword 'echo "Context' at line 16 of /var/spool/asterisk/outgoing/make-call.sh
[Sep 22 13:19:11] WARNING[1263]: pbx_spool.c:292 parse_line: Unknown keyword 'echo "Extension' at line 17 of /var/spool/asterisk/outgoing/make-call.sh
[Sep 22 13:19:11] WARNING[1263]: pbx_spool.c:292 parse_line: Unknown keyword 'echo "Priority' at line 18 of /var/spool/asterisk/outgoing/make-call.sh
[Sep 22 13:19:11] NOTICE[1263]: pbx_spool.c:197 parse_line: Syntax error at line 20 of /var/spool/asterisk/outgoing/make-call.sh
[Sep 22 13:19:11] NOTICE[1263]: pbx_spool.c:197 parse_line: Syntax error at line 21 of /var/spool/asterisk/outgoing/make-call.sh
[Sep 22 13:19:11] WARNING[1263]: pbx_spool.c:329 apply_outgoing: At least one of app or extension must be specified, along with tech and dest in file /var/spool/asterisk/outgoing/make-call.sh
[Sep 22 13:19:11] WARNING[1263]: pbx_spool.c:514 scan_service: Invalid file contents in /var/spool/asterisk/outgoing/make-call.sh, deleting
Asterisk настроен но на echo ругается
pbx_spool.c:292 parse_line: Unknown keyword
Syntax error at line
Астериск выдает такие ошибки, в чем может быть проблема?
Гуглить надо ошибку. Здесь используется штатная возможность астериска, так что ошибок быть не должно, если астериск корректно настроен и работает.