Мониторинг транков (trunk) в asterisk с помощью zabbix
Мне понадобился простой мониторинг состояния транков в asterisk. Иногда после проблем с интернетом на некоторых серверах автоматически не восстанавливаются транки к sip провайдерам. Приходится дергать их вручную через sip reload после того, как пользователи начинают жаловаться. А так как провайдеров может быть несколько, не всегда сразу становится понятно, что какой-то из каналов отвалился.
Полный мониторинг всего сервера asterisk я рассмотрел отдельно — настройка мониторинга asterisk. Там в том числе есть мониторинг транков, но более продвинутый и удобный, нежели здесь. Так что рекомендую ознакомиться с новой статьей.
Введение
Я буду использовать очень простую проверку. В интернете находится много рецептов по мониторингу asterisk с помощью zabbix. Есть готовые наборы скриптов на питоне, есть шаблоны. Можно настроить мониторинг практически всего, что только пожелаешь.
Мне не хотелось во всем этом разбираться и нагромождать в систему, так как нужно только состояние транков — зарегистрирован или нет. Усложнять чем-то еще свои системы мониторинга не хотелось. Больше никакие данные мне не нужны. Я стараюсь настраивать мониторинг только тех параметров, которые реально необходимы. Это позволяет экономить время и ресурсы сервера.
С помощью простого sh скрипта я буду проверять суммарное количество транков в системе и сравнивать это число с числом зарегистрированных транков. Если разница этих чисел будет отлична от нуля, значит как минимум одна регистрация отвалилась. Нужно на всякий случай проверить сервер и выяснить причину.
После этой проверки можно тем же скриптом и перезапустить регистрации, но я в статье ограничусь только мониторингом состояния. Лично мне перезапуск в данном случае не нужен, так как ситуации бывают редко и я хочу сам проверить, почему регистрации отвалились.
Настройка агента для мониторинга транков (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 [t|0]
Все в порядке, то что надо. На этом настройка агента на сервере asterisk закончена. Переходим на сервер мониторинга.
Создание шаблона мониторинга asterisk на сервере zabbix
Нам нужно создать шаблон на сервере, для назначения его серверам с астериском. Здесь ничего сложного, делаем все то же самое, что мы делали ранее, настраивая мониторинг рейда mdadm. Идем в раздел Configuration -> Templates, нажимаем Create template.
Пишем название и добавляем его в группу с шаблонами.
Открываем шаблон, переходим в раздел Items и жмем на Create item. Заполняем параметры нового итема как на картинке.
Я поставил интервал проверок 120 секунд = 2 минуты. Вы можете поменять под свои нужды этот параметр. Сохраняем новый итем.
Для сбора данных все готово. Теперь назначаем шаблон серверам с астериском, где мы подготовили агенты мониторинга и скрипты и ждем поступления данных. Проверять как обычно идем в Latest data. Через пару минут должны поступить значения.
У меня пришло значение 0 как и должно быть. Все регистрации на месте. Теперь нам нужно добавить триггер, который будет отправлять уведомление, если какая-нибудь из регистраций отвалится. Для этого идем в созданный шаблон и переходим в раздел Triggers. Жмем Create trigger и указываем значения, как у меня.
Если 3 последние проверки покажут значение, отличное от 0, сработает триггер и прилетит уведомление на почту. Сохраняем триггер. На этом все. Можете проверить работу любым способом, который придумаете. Например, временно измените пароль на одном из транков, или добавив новый с несуществующими параметрами. Можно и не проверять, все должно и так работать 🙂
Возможные ошибки
Если ваш новый 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.
Заключение
В очередной раз zabbix подтвердил свою простоту и гибкость настроек. Буквально за несколько минут, после беглого безрезультатного поиска в гугле, я смастерил простенький скрипт и добавил его к системе мониторинга. Поставленную задачу он успешно выполняет. Так как ставил на разные системы, пришлось отловить несколько ошибок.