Сейчас уже редко найдешь офис, в котором не установлена система мониторинга, cобирающая ежедневные показатели серверов и сетевого оборудования, и отслеживающая статусы различных сервисов. Нам захотелось отслеживать количество успешных вызовов и вызовов с 500 Internal Server Error /503 Service Unavailable релизами. В интернете есть куча платных программ, которые сделают это с легкостью, но мы не ищем легких путей, к тому же, для мониторинга мы уже давно используем Zabbix и не хотелось бы от него отказываться. Собирать статистику по вызовам мы будем с помощью Voipmonitor, после чего с помощью Zabbix агента и скриптов передавать данные на Zabbix сервер, где будут прорисовываться нужные нам графики. Наш метод не претендует на самый правильный и простой, но, может быть, кому-то пригодится и будет полезным. Что мы имеем: сервер CentOS 6.6 с установленным на нем Asterisk 11,Zabbix 2.4,MySQL.
Voipmonitor
Voipmonitor - OpenSource VoIP снифер, предназначенный для оценки и контроля качества VoIP связи. VoIPmonitor перехватывает вызовы в реальном времени и сохраняет статистику и дампы файлов в БД для последующего анализа. VoIPmonitor использует снифер на базе libpcap, обнаруживает SIP INVITE пакет и перехватывает RTP в обоих направлениях. Далее используется код Jitter буфера Asterisk'а для имитации буфера и получения статистики потери пакетов и джиттера при различных величинах и типах буфера.
Первым делом обновляемся и устанавливаем нужные нам программы и пакеты:
yum groupinstall 'Development Tools'yum install git unixODBC-devel mysql-devel libogg libogg-devel vorbis-tools libvorbis libvorbis-devel libpcap-devel zlib-devel
Переходим в /usr/src/ и скачиваем нужную нам версию снифера
64 bit
wget http://sourceforge.net/projects/voipmonitor/files/10.1/voipmonitor-amd64-10.1.23-static.tar.gz
32 bit
wget http://sourceforge.net/projects/voipmonitor/files/10.1/voipmonitor-i686-10.1.23-static.tar.gz
теперь распаковываем и устанавливаем
tar xzf voipmonitor-*-static.tar.gzcd voipmonitor-*-static./install-script.shcp voipmonitor.conf /etc/mysqladmin create voipmonitor
Теперь отредактируем конфигурационный файл /etc/voipmonitor.conf
Вносим изменения для подключения к нашей базе данных:
mysqlhost = 127.0.0.1mysqlport = 3306mysqlusername = rootmysqlpassword = *******
Указываем какой сетевой интерфейс и порт должен слушать снифер (в нашем случае все вызовы ходят через 5080):
interface = eth0sipport = 5080
По умолчанию снифер сохраняет весь sip и rtp трафик в pcap файлы. Нам данный функционал не нужен, так что его надо отключить:
savesip = no savertp = no saveudptl = no savertcp = no
Конфигурационный файл сопровождается очень хорошим описанием, так что при желании можно гибко настроить все под себя. Сохраняем настройки и запускаем программу
/etc/init.d/voipmonitor start
После запуска в MySQL будет создана база данных voipmonitor с различными таблицами.
Более подробно о структурах таблиц можно посмотреть тут. В нашем случае нам потребуются данные только из таблицы cdr. Теперь напишем небольшой скриптик, который будет вытягивать из базы данных voipmonitor и таблицы cdr вызовы, завершенные 500 и 503 релизом.
Создадим Bash скрипт InternalServer.sh со следующим содержимым:
#!/bin/bash U="root" B="voipmonitor" echo "select count(lastSIPresponseNum) from cdr WHERE calldate >= NOW() - INTERVAL 5 MINUTE and lastSIPresponseNum like '500' GROUP BY lastSIPresponseNum;" | mysql -N -s -u $U $B
Небольшие пояснения:
U="root" - логин для подключения к Mysql
B="voipmonitor" - База данных
select count(lastSIPresponseNum) from cdr WHERE calldate >= NOW() - INTERVAL 5 MINUTE and lastSIPresponseNum like '500' GROUP BY lastSIPresponseNum;" – выводит кол-во вызовов за последние 5 минут завершенные 500 релизом.
Создадим еще один скрипт ServiceUnavailable.sh, указав там lastSIPresponseNum like '503'
chmod 777 internalserver.shchmod 777 serviceunavailable.sh
Переходим к установке и настройке Zabbix агента.
Если Zabbix agent не установлен, устанавливаем
rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpmyum install zabbix-agent
и переходим к настройкам агента:
nano /etc/zabbix/zabbix_agentd.conf
переходим в секцию Option: UserParameter и добавляем наши параметры и прописываем путь до наших скриптов
UserParameter=internalserver,/usr/src/internalserver.shUserParameter=serviceunavailable,/usr/src/serviceunavailable.sh
Еще нам нужно выводить кол-во активных вызовов, так что добавим еще вот такую строчку:
UserParameter=asterisk.activecalls,sudo rasterisk -x "core show calls" | grep "active" | cut -c 1-2Теперь нужно разрешить zabbix выполнять команды sudo. Переходим /etc/sudoers и добавляем строку.
zabbix ALL = NOPASSWD: /usr/sbin/asteriskРестартим Zabbix агент
/etc/init.d/zabbix-agent restart
Настройка сервера Zabbix
В веб-панели Zabbix заходим в Настройки -> Шаблоны, создаем пустой шаблон и называем его, например, VoIP monitoring. Заходим в редактирование шаблона и переходим в раздел “Элементы данных” . Нажмите на “Создать элемент данных” в правом верхнем углу экрана, в форме введите следующие параметры:

Теперь переходим в раздел Графики, нажимаем на кнопку “Создать график” и заполняем поля следующим образом:

Все сохраняем и к нужному узлу сети добавляем наш шаблон.