Добрый день, хабровчане.
В этом посте я хотел бы рассказать о том, как мы осуществляем мониторинг серверов Asterisk. Безусловно, посты по использованию Zabbix для мониторинга Asterisk уже есть на хабре, в них мы почерпнули множество интересной информации и добавили еще ряд необходимых, на наш взгляд, вещей.
Что из этого вышло — можно посмотреть под катом.
Телефония является критичным сервисом в работе компании. Важнейшей задачей после развертывания и настройки телефонной инфраструктуры является ее мониторинг. Своевременное оповещение ответственных за функционирование телефонных сети лиц сможет сэкономить компании огромное количество времени и денег и минимизировать время простоя телефонной станции.
Изначально для мониторинга сервера Asterisk нужно выбрать инструмент, которым будет производиться мониторинг. Безусловно в сети существует огромное количество самописных скриптов, которые позволяют осуществлять поверхностный мониторинг сервера, но зачастую они малофункциональны, требуют глубоких знаний linux и естественно не имеют GUI.
Для мониторинга состояния серверов телефонии нами была выбрана система мониторинга Zabbix. Zabbix — довольно мощный инструмент мониторинга, который имеет большое количество шаблонов для мониторинга узлов сети и процессов и позволяет встраивать пользовательские. Для нормального функционирования сервера Asterisk мы выделили следующие компоненты, которые нужно мониторить и написали под них скрипты на python, которые будем портировать в Zabbix:
- Использование CPU, RAM, HDD (графики, отчеты и уведомления)
- Сетевой трафик на каждом интерфейсе
- Мониторинг процесса и памяти для Asterisk
- Анализ процесса и памяти для Mysql
- Мониторинг процесса и памяти для Apache
- Отслеживание процесса fail2ban
- Регистрация и статус SIP провайдеров
- Статус каждого SIP пеера (peer)
- Количество текущих звонков в Asterisk
- Мониторинг очередей
- Отслеживание количества звонков в очереди
- Мониторинг Агентов очереди
При возникновении проблем с одним из вышеназванных параметров, Zabbix отправляет уведомление (варианты оповещения: уведомления на e-mail, jabber, SMS) администратору АТС или любому другому ответственному лицу для принятия мер по оперативному устранению проблемы.
Архитектура Zabbix включает в себя:
- непосредственно сам сервера мониторинга, получающий и обрабатывающий данные, а также запускающий скрипты оповещения
- базы данных
- веб-интерфейса
- Zabbix-агента, установленного на наблюдаемом сервере.
Рассмотрим процесс установки zabbix-агента.
Изначально на вашем сервере должны быть удовлетворены следующие зависимости:
- python 2.7+
- python-all-dev
- Zabbix 2.4+
- asterisk 1.8+
- argparse 1.2.1+
- pexpect 3.3+
- posix-ipc 0.9.9+
- wsgiref 0.1.2+
Устанавливаем непосредственно сам Zabbix-агент:
Устанавливаем python-модули для исполнения наших пользовательских скриптов Zabbix:
Качаем необходимые нам скрипты (для удобства собрали их на bitbucket):
Изменяем settings.py в соответствии с нашими настройками Asterisk:
Добавляем в конце конфигурационного файла /etc/asterisk/manager.conf следующие строки:
После выполнения данных действий перезагружаем Asterisk:
Далее в конфигурационный файл zabbix-агента /etc/zabbix/zabbix_agentd.conf добавляем в самом низу:
и перезагружаем zabbix-агент:
Имеющиеся команды:
- channel — CoreShowChannels
- member — SIP member
- peer — SIP peers
- queue — SIP queue
- registry — SIP registrations
Параметры:
./run.py -a Discovery.
./run.py -f <field_name> -p Return the param of the field
./run.py -f <field_name> -p -r Regular expression for field value. (Return group 1)
./run.py -v Verbose
Примеры:
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py registry -a Return all SIP Registrations
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer -a Return all SIP Peers
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer -f Address-IP -p 101 Return ip address peer 101
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer -f Status -r "(\d+)" -p 101 Return Qualify user 101
Описание модуля
Модуль для опроса Asterisk работает через AMI.
settings.py — настройки модуля
userparameter_asterisk.conf — команды zabbix и параметры, передающейся модулю
zasterisk/ami.py — подключение к AMI используя pexpect
commands/ — папка с командами
Модуль универсальный, и если нет нужного параметра, то его можно легко добавить. К примеру нужно получить контекст sip-пира 101:
получим ответ from-users (мое название контекста)
или к примеру узнать используемые кодеки:
получим ответ (g722|ulaw|alaw|g729)
Для более детального вывода информации к командам можно добавлять опцию "-v"
Если нам нужны дополнительные команды, то по аналогии с файлами из commands добавляем свой, к примеру iax2.py, который будет мониторить IAX-пиры:
В результате получим возможность мониторить параметры IAX пиров:
результат: 216.207.245.47
В заключении хотелось бы отметить, что мы привели только некоторые, важные по нашему мнению, процессы для мониторинга. С помощью данного модуля для Zabbix вы можете мониторить другие необходимые вам процессы. Надеюсь данный топик может вам получать более подробную информацию о «жизнедеятельности» вашего Asterisk и максимально минимизировать время простоя:)