Введение
Мониторинг zabbix славится своей гибкостью. Я его люблю в основном за это. Можно придумать какой угодно функционал в скриптах и прикрепить его в виде триггера к заббиксу. То же самое можно делать с различными метриками, но сегодня мы будем говорить именно о триггерах.
Asterisk умеет совершать исходящие звонки на основе информации в так называемых call файлах. Ему достаточно положить в определенную папку файл, где будут указаны параметры звонка и он позвонит. Таким образом, наша задача по настройке оповещений в виде звонков на мобильный телефон сводится к созданию таких файлов на нужные нам события.
Мы можем позвонив, проговорить записанную ранее аудиозапись, либо прочитать текст из файла. Второй вариант более сложный, требует установку дополнительных программ, умеющих читать текст. Мне это было не нужно, так как набор фраз был ограниченный и его не сложно записать заранее. Так что у меня zabbix будет звонить через asterisk и говорить заранее подготовленные записи.
Первым делом мы напишем скрипт, который будет генерировать call файлы для asterisk и подготовим dialplan астериска для исходящих звонков через zabbix. А потом настроим выполнение этого скрипта по определенным событиям в мониторинге.
Все действия будут выполняться на серверах под управлением CentOS.
Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:
- Установка CentOS 8.
- Настройка CentOS 8.
- Установка и настройка zabbix сервера.
То же самое на Debian 10, если предпочитаете его:
- Установка Debian 10.
- Базовая настройка Debian.
- Установка и настройка zabbix на debian.
Когда все готово, можно приступать к реализации задуманного.
Введение
Кратко о системе мониторинга Zabbix я уже писал в предыдущей своей статье по установке zabbix 2.4, поэтому не буду повторяться. О наиболее важны изменениях я тоже уже рассказывал в материале по обновлению zabbix 2.4 до 3.0, можно ознакомиться. Добавлю новую информацию. Я уже обновил несколько серверов мониторинга до последней версии. В плане функциональности у меня нет претензий, все работает как минимум не хуже чем раньше, но новые возможности я пока не использовал.
А вот внешний вид двух предложенных тем лично мне не нравится. Старая кажется более гармоничной и наглядной. Это сдерживает меня от обновления всех систем на новую версию. Ну не нравятся мне новые темы, не хочу на них смотреть. Я дольше и труднее воспринимаю информацию в них. Скорее всего это мое субъективное мнение, всегда трудно привыкать к новым вещам. Так что предлагаю не ориентироваться на мои впечатления, а ставить новую версию и смотреть.
Было бы любопытно услышать вашу версию того, насколько стали удобнее и приятнее новые темы оформления, по сравнению со старой. Есть еще такие же ретрограды и консерваторы, как я?
Введение
Я буду использовать очень простую проверку. В интернете находится много рецептов по мониторингу asterisk с помощью zabbix. Есть готовые наборы скриптов на питоне, есть шаблоны. Можно настроить мониторинг практически всего, что только пожелаешь.
Мне не хотелось во всем этом разбираться и нагромождать в систему, так как нужно только состояние транков — зарегистрирован или нет. Усложнять чем-то еще свои системы мониторинга не хотелось. Больше никакие данные мне не нужны. Я стараюсь настраивать мониторинг только тех параметров, которые реально необходимы. Это позволяет экономить время и ресурсы сервера.
С помощью простого sh скрипта я буду проверять суммарное количество транков в системе и сравнивать это число с числом зарегистрированных транков. Если разница этих чисел будет отлична от нуля, значит как минимум одна регистрация отвалилась. Нужно на всякий случай проверить сервер и выяснить причину.
После этой проверки можно тем же скриптом и перезапустить регистрации, но я в статье ограничусь только мониторингом состояния. Лично мне перезапуск в данном случае не нужен, так как ситуации бывают редко и я хочу сам проверить, почему регистрации отвалились.
Дополнительные материалы по Zabbix
Онлайн курсы по Mikrotik
Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую пройти курсы по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Помимо официальной программы, в курсах будут лабораторные работы, в которых вы на практике сможете проверить и закрепить полученные знания. Все подробности на сайте .
Стоимость обучения весьма демократична, хорошая возможность получить новые знания в актуальной на сегодняшний день предметной области. Особенности курсов:
- Знания, ориентированные на практику;
- Реальные ситуации и задачи;
- Лучшее из международных программ.
Рекомендую полезные материалы по 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. Отправка оповещений по событиям из лога. |
Вводная
Постановка задачи
- Отловить отказ транка в течение 1-2 часов после падения
- Отловить массовый отказ внутренних номеров (отключение 10-20% внутренних номеров в течение 10-20 минут)
- Отказ любого из кабинетов либо появление ошибок на них
- Поймать выход из строя ключевых внутренних номеров (входящие группы, випы и пр.)
- Следить за состоянием DECT-баз, подключенных к станциям
- Ну и хорошо бы получить актуальную информацию о версии ПО на станциях, серийных номерах и прочем.
Что имеем из оборудования
- Более 30 станций Avaya Aura версий от R13 до R16;
- 10-300 транков разных типов (CO, E1, H323, SIP и т.п.) на каждой станции, транки добавляются или удаляются крайне редко;
- 100-3000 телефонов на каждой станции. Есть как IP-аппараты, так и аналоговые и цифровые;
- С каждой DECT-станцией работают от 5 до 100 DECT-баз. По моделям: Avaya DECT R3, Avaya DECT R4, Spectralink IP-DECT Server 6500 и Spectralink IP-DECT Server 6500
- Linux-сервер, на котором развернуть zabbix
- Все объекты доступны по сети
Подготовительные работы
Настроим zabbix-сервер
- Условимся, что сервер уже настроен на работу с SNMP и SNMPtrap;
-
Настроим разбивку rsyslog по разным файлам и разрешим принимать ему сообщения с других хостов. Для этого отредактируем конфиг rsyslog.conf
а затем перезапустим rsyslog;
- Положим файлы trunk2type.sh, trunk2ip.sh, и trunk2alive.sh из архива в каталог externalscripts;
- Положим файл convert_trunks.sh в любое место и настроим его выполнение через cron раз в 10 минут.
PATH_TXT
Настроим Avaya Aura Communication Manager
Включим SNMP
- Зайдем браузером на веб-интерфейс Communication Manager
- В меню Administration → Server Maintenance → Alarms → SNMP Agent установим следующие параметры:
- Access from IP-addressess: Any или укажем IP-адрес Zabbix-сервера
- Включим SNMP Community v2 и установим имя read-only community в public
- Сохраним настройки.
- Применим настройки, перезапустив агента (Alarms → Agent Status)
- В меню Security → Firewall разрешим snmp и snmptrap (надо поставить обе галки напротив соответствующих служб)
Включим сбор статистики по транкам
-
Запустим Avaya Site Administration, подключимся к станции и выполним команду:
А затем укажем все номера транков, по которым надо собирать статистику. На версиях R13 и ранее количеств наблюдаемых транков ограничено 20 транками.
Настроим DECT-станции
Avaya DECT R4
- При включении SNMP укажем IP-адрес сервера Zabbix и комюнити public.
- Его же укажем Syslog-сервере. Порт 514. уровень логирования 4 (Warnings) или 3 (Errors).
Spectralink IP-DECT Server 400/6500
При применении настроек SNMP база потребует перезагрузки!!!
- При включении SNMP укажем IP-адрес сервера Zabbix, и комюнити public
- Его же укажем Syslog-сервере. Порт 514. уровень логирования 4 (Warnings) или 3 (Errors)
Метрики нагруженности Asterisk PBX как системы (программы)
К данной группе относится намного меньше команд, и что конкретно отслеживать в конкретной ситуации — зависит от ситуации.
— asterisk -rx ‘core show taskprocessors’ — здесь можно посмотреть сколько задач с момента запуска Asterisk PBX было выполнено каждым из модулей (Processed), сколько находится в очереди (In Queue), какой был максимум задач в очереди (Max Depth), а также какие заданы threshold-ы, при достижении которых будут выведены предупреждения в CLI (Low water / High Water). Отслеживать все смысла нет, но посмотреть те модули, которые чаще всего используются и поставить на мониторинг их — будет явно не лишним, чтобы вовремя принять меры по корректировке или откату изменений в настройках Asterisk PBX;
— asterisk -rx ‘core show threads’ — отображает список запущенных thread-ов приложений внутри Asterisk PBX. По большей части информация тут нужна для отладки конкретной аварийной ситуации, но, возможно, вы захотите отслеживать конкретные счетчики по приложениям.
Возможные ошибки
Если ваш новый item не работает, получает статус not supported, а в описании причины ошибка:
Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
Необходимо разрешить пользователю zabbix, от которого работает скрипт, запускать asterisk. Для этого добавляем в файл /etc/sudoers в самый конец следующую строку:
zabbix ALL = NOPASSWD: /usr/sbin/asterisk
После этого проверяем выполнение скрипта от пользователя zabbix:
# sudo -u zabbix /etc/zabbix/scripts/asterisk.trunk.sh
Если получаете вывод значения, значит все в порядке. Если же все равно видите ошибку:
Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
Добавьте в скрипт перед /usr/sbin/asterisk выполнение /usr/bin/sudo. Должно получиться так:
reg_tranks=`/usr/bin/sudo /usr/sbin/asterisk -rx "sip show registry" | grep Registered | wc -l`
После этого отцепите шаблон от хоста и добавьте заново. Подождите несколько минут обновления данных. Вы можете снова получить ошибку, но уже другого рода:
sudo: sorry, you must have a tty to run sudo
Эта ошибка появится, если у вас пользователь zabbix создан без какой-либо оболочки. Это зависит от системы и версии заббикс агента. Проверить можно в файле /etc/passwd:
# cat /etc/passwd | grep zabbix zabbix:x:496:496:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
Пользователям без оболочки по-умолчанию запрещено использовать sudo, которое мы добавили в скрипт. Исправить это можно в фале /etc/sudoers, закомментировав параметр:
#Defaults requiretty
После этого снова отцепляем шаблон и прикрепляем заново. Теперь должно быть все в порядке.
Постарался предусмотреть все варианты развития событий. Наличие тех или иных ошибок будет зависеть от операционной системы и версии zabbix и asterisk.
Настройка агента для мониторинга транков (trunks)
Создадим папку для пользовательских скриптов в каталоге zabbix:
# mkdir /etc/zabbix/scripts
Создаем в ней скрипт asterisk.trunk.sh следующего содержания:
#!/bin/sh # Получаем количество всех транков в системе number_tranks=`/usr/sbin/asterisk -rx "sip show registry" | grep "SIP registrations" | awk '{print $1}'` # Считаем количество зарегистрированных транков reg_tranks=`/usr/sbin/asterisk -rx "sip show registry" | grep Registered | wc -l` # Вычисляем разницу между полученными значениями let result=$number_tranks-$reg_tranks # Выводим результат вычисления echo $result
Назначаем владельцем файла пользователя zabbix и выставляем права на выполнение скрипта:
# chown zabbix. /etc/zabbix/scripts/asterisk.trunk.sh # chmod 0750 /etc/zabbix/scripts/asterisk.trunk.sh
Теперь просто запустите скрипт и посмотрите результат. Если все регистрации подключены, то скрипт должен вернуть значение 0:
# /etc/zabbix/scripts/asterisk.trunk.sh 0
Открываем на редактирование конфиг агента и добавляем параметр UserParameter:
UserParameter=asterisk.trunk,/etc/zabbix/scripts/asterisk.trunk.sh
Перезапускаем zabbix-agent той командой, что соответствует вашей системе. В CentOS 7 делаем так:
# systemctl restart zabbix-agent
Теперь проверим с помощью zabbix_agentd какое значение будет отправлять агент на сервер:
# zabbix_agentd -t asterisk.trunk asterisk.trunk
Все в порядке, то что надо. На этом настройка агента на сервере asterisk закончена. Переходим на сервер мониторинга.
Создание шаблона мониторинга asterisk на сервере zabbix
Нам нужно создать шаблон на сервере, для назначения его серверам с астериском. Здесь ничего сложного, делаем все то же самое, что мы делали ранее, настраивая мониторинг рейда mdadm. Идем в раздел Configuration -> Templates, нажимаем Create template.
Пишем название и добавляем его в группу с шаблонами.
Открываем шаблон, переходим в раздел Items и жмем на Create item. Заполняем параметры нового итема как на картинке.
Я поставил интервал проверок 120 секунд = 2 минуты. Вы можете поменять под свои нужды этот параметр. Сохраняем новый итем.
Для сбора данных все готово. Теперь назначаем шаблон серверам с астериском, где мы подготовили агенты мониторинга и скрипты и ждем поступления данных. Проверять как обычно идем в Latest data. Через пару минут должны поступить значения.
У меня пришло значение 0 как и должно быть. Все регистрации на месте. Теперь нам нужно добавить триггер, который будет отправлять уведомление, если какая-нибудь из регистраций отвалится. Для этого идем в созданный шаблон и переходим в раздел Triggers. Жмем Create trigger и указываем значения, как у меня.
Если 3 последние проверки покажут значение, отличное от 0, сработает триггер и прилетит уведомление на почту. Сохраняем триггер. На этом все. Можете проверить работу любым способом, который придумаете. Например, временно измените пароль на одном из транков, или добавив новый с несуществующими параметрами. Можно и не проверять, все должно и так работать
Настройка оповещений через 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
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
На астериске настройку закончили. У нас все готово для совершения звонков по событиям.
Метрики нагруженности Asterisk PBX как сервиса телефонии
Здесь я могу порекомендовать ряд команд, которые могут выводить ряд полезной информации:
— asterisk -rx ‘core show channels concise’ — список активных каналов и ряда их параметров с разделителем. Можно парсить с помощью awk для получения каких-то сгруппированных блоков информации для построения графиков в Grafana;
— asterisk -rx ‘core show calls’ — отображает количество активных звонков. Те кто в курсе того, как Asterisk PBX работает со звонками абонентов и считает их — знает, что точность этой цифры может колебаться в пределах от 70% до 100% (реальное число звонков может быть ниже отображаемого из-за особенностей конкретного dialplan-а), однако для получения обобщенной статистики по нагрузке этого в целом достаточно;
— asterisk -rx ‘sip show registry’ — вывод состояния регистрации аккаунтов у внешних провайдеров.
— asterisk -rx ‘sip show peer PeerName’ — вывод информации о конкретном peer-е (в данном примере PeerName). Полезно в комбинации с опцией qualify=yes, чтобы видеть его статус и задержку отклика. Если у вас есть аккаунт без регистрации — его можно проверять через данную команду.
Настройка агента для мониторинга транков (trunks)
Создадим папку для пользовательских скриптов в каталоге zabbix:
Создаем в ней скрипт asterisk.trunk.sh следующего содержания:
Назначаем владельцем файла пользователя zabbix и выставляем права на выполнение скрипта:
Теперь просто запустите скрипт и посмотрите результат. Если все регистрации подключены, то скрипт должен вернуть значение 0:
Открываем на редактирование конфиг агента и добавляем параметр UserParameter:
Перезапускаем zabbix-agent той командой, что соответствует вашей системе. В CentOS 7 делаем так:
Теперь проверим с помощью zabbix_agentd какое значение будет отправлять агент на сервер:
Все в порядке, то что надо. На этом настройка агента на сервере asterisk закончена. Переходим на сервер мониторинга.
Возможные ошибки
Если ваш новый item не работает, получает статус not supported, а в описании причины ошибка:
Необходимо разрешить пользователю zabbix, от которого работает скрипт, запускать asterisk. Для этого добавляем в файл /etc/sudoers в самый конец следующую строку:
После этого проверяем выполнение скрипта от пользователя zabbix:
Если получаете вывод значения, значит все в порядке. Если же все равно видите ошибку:
Добавьте в скрипт перед /usr/sbin/asterisk выполнение /usr/bin/sudo. Должно получиться так:
После этого отцепите шаблон от хоста и добавьте заново. Подождите несколько минут обновления данных. Вы можете снова получить ошибку, но уже другого рода:
Эта ошибка появится, если у вас пользователь zabbix создан без какой-либо оболочки. Это зависит от системы и версии заббикс агента. Проверить можно в файле /etc/passwd:
Пользователям без оболочки по-умолчанию запрещено использовать sudo, которое мы добавили в скрипт. Исправить это можно в фале /etc/sudoers, закомментировав параметр:
После этого снова отцепляем шаблон и прикрепляем заново. Теперь должно быть все в порядке.
Постарался предусмотреть все варианты развития событий. Наличие тех или иных ошибок будет зависеть от операционной системы и версии zabbix и asterisk.
Заключение
На сегодня это все, что я хотел рассказать. С помощью этой пошаговой инструкции вы сможете быстро развернуть эффективную систему мониторинга для наблюдения за linux и windows системами.
Тема настройки мониторинга zabbix обширна и охватить ее в одном материале невозможно. Для расширения функционала и добавления различных элементов мониторинга используйте мои статьи из раздела zabbix. Все, что написано до этого материала, относится к версии 2.4, но оно не потеряло актуальность, все приемы, скрипты, шаблоны, все работает и соответствует текущей версии, можно смело пользоваться.