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

 

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

Автор: admin от 28-01-2015, 12:27, посмотрело: 2610

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

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

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

Источник: Хабрахабр

Категория: Операционные системы » Linux

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *