Универсальный способ мониторинга Asterisk с помощью Zabbix

imageДобрый день, хабровчане.

В этом посте я хотел бы рассказать о том, как мы осуществляем мониторинг серверов 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-агент:

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 -p Return the param of the field./run.py -f -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 Registrationssudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer -a Return all SIP Peerssudo -u zabbix /etc/zabbix/asterisk-zabbix-py/run.py peer -f Address-IP -p 101 Return ip address peer 101sudo -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 используя pexpectcommands/ — папка с командами

Модуль универсальный, и если нет нужного параметра, то его можно легко добавить. К примеру нужно получить контекст 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 и максимально минимизировать время простоя:)

© Habrahabr.ru