Zabbix - мониторинг Asterisk
Администратор, 28.01.2015
Реализация мониторинга IP АТС Asterisk c помощью Zabbix

На сегодняшний день существует множество систем мониторинга Asterisk, наша компания решила привести пример реализации мониторинга IP-телефонии посредством Open Source решения - Zabbix
В каждом Open Source решении для интеграции под нужный проект необходима помощь специалиста, мы решили поделиться опытом настройки Zabbix для удаленного мониторинга Asterisk. В интернете существуют множество информации по настройке этой системы, мы решили выбрать наиболее подходящие функции, добавить на наш взгляд необходимые параметры и реализовать эту идею.
Наша разработка позволяет отслеживать систему телефонии начиная от связи с провайдером, нагрузки на сервер, заканчивая телефонными аппаратами.

Нами были написаны скрипты на python для внедрения компонентов которые необходимы для отслеживания серверов Asterisk:
- - Использование RAM, CPU, HDD (отчеты, графики и уведомления)
- - Мониторинг процесса и памяти для Asterisk
- - Сетевой трафик на каждом интерфейсе
- - Мониторинг процесса и памяти для Apache
- - Анализ процесса и памяти для Mysql
- - Регистрация и статус SIP провайдеров
- - Отслеживание процесса fail2ban
- - Количество текущих звонков в Asterisk
- - Статус каждого SIP пеера (peer)
- - Отслеживание количества звонков в очереди
- - Мониторинг очередей
- - Мониторинг агентов очереди
При возникновении проблем с одним из вышеназванных параметров, Zabbix отправляет уведомление ( на e-mail, jabber, SMS) администратору IP АТС Asterisk для принятия мер по оперативному устранению проблемы.
Архитектура Zabbix включает в себя:
Zabbix-агент, установленный на наблюдаемом сервере
сервер мониторинга, получающий и обрабатывающий данные, который запускает скрипты оповещения
веб-интерфейса
базы данных
Процесс установки zabbix-агента:

Изначально на вашем сервере должны быть удовлетворены следующие зависимости:
asterisk 1.8 +
python 2.7 +
Zabbix 2.4 +
python-all-dev
pexpect 3.3 +
argparse 1.2.1 +
wsgiref 0.1.2 +
posix-ipc 0.9.9 +
Вы можете самостоятельно установить программу для мониторинга Asterisk и в случае необходимости по результатам мониторинга обратиться к нам за помощью если самостоятельно не в силах их устранить, так же мы можем установить систему мониторинга и отслеживать все проблемы возникающие с IP АТС и устранять их в оперативном режиме.
Устанавливаем непосредственно сам Zabbix-агент:
aptitude install zabbix-agent
Устанавливаем python-модули для исполнения наших пользовательских скриптов Zabbix:
aptitude install python-pip python-all-dev
pip install argparse pexpect posix-ipc wsgiref
Качаем необходимые нам скрипты (для удобства собрали их на bitbucket):
cd /etc/zabbix/
git clone https://pbxware@bitbucket.org/pbxware/asterisk-zabbix-py.git
cd asterisk-zabbix-py
Изменяем settings.py в соответствии с нашими настройками Asterisk:
vim setting.py
# coding=utf-8
HOST = "localhost" - адрес, на котором работает наш сервер Asterisk
PORT = "5038" - порт AMI из manager.conf
USERNAME = "zabbix" - пользователь AMI
PASSWORD = "zabbixpasswordami" - пароль пользователя AMI
DEFAULT_TIMEOUT = 3
AMI_VERSION = "1.3" - версия AMI, чтобы узнать наберите в терминале telnet localhost 5038
Добавляем в конце конфигурационного файла /etc/asterisk/manager.conf следующие строки:
[zabbix] ; username from settings.py
secret=zabbixpasswordami ; password from settings.py
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,agent,user,command,reporting,message
allowmultiplelogin = yes
displayconnects = no
writetimeout = 100
После выполнения данных действий перезагружаем Asterisk:
service asterisk restart
Далее в конфигурационный файл zabbix-агента /etc/zabbix/zabbix_agentd.conf добавляем в самом низу:
Include=/etc/zabbix/asterisk-zabbix-py/userparameter_asterisk.conf
и перезагружаем zabbix-агент:
/etc/init.d/zabbix-agent restart
Имеющиеся команды:
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:
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer -f Context -p 101
получим ответ from-users (мое название контекста)
или к примеру узнать используемые кодеки:
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer -f Codecs -p 101
получим ответ (g722|ulaw|alaw|g729)
Для более детального вывода информации к командам можно добавлять опцию "-v"
Если нам нужны дополнительные команды, то по аналогии с файлами из commands добавляем свой, к примеру iax2.py, который будет мониторить IAX-пиры:
# coding=utf-8
from zasterisk.base import DiscoveryFieldCommand
class Command(DiscoveryFieldCommand):
help = '''
IAX2 peers
'''
def discovery(self, ami):
def callback(connect, timeout):
events = self.parse_events(connect)
return self.create_discovery(events.get("PeerEntry"), "{#USERNAME}", "ObjectName")
return ami.execute("IAXpeers", {}, callback)
def get_field(self, ami, field_name, param):
return ami.execute("IAXpeers", {"Peer": param}, lambda connect, timeout: self.expect_field(
connect, field_name, timeout))
def count(self, ami):
return 0
В результате получим возможность мониторить параметры IAX пиров:
sudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py iax2 -v -f IPaddress -p demo
результат: 216.207.245.47
В заключении хотелось бы отметить, что мы привели только некоторые, важные по нашему мнению, процессы для мониторинга. С помощью данного модуля для Zabbix вы можете мониторить другие необходимые вам процессы. Надеюсь данный топик может вам получать более подробную информацию о «жизнедеятельности» вашего Asterisk и максимально минимизировать время простоя:)
Наша компания предоставляет услуги по мониторингу Asterisk в которой уже включен один час бесплатной технической поддержки в месяц, соответственно при возникновении критических проблем наш специалист может подключиться и устранить проблему.