Денис Пестрецов
04.08.2020
1372

Интеграция Asterisk с StatsD. Графическая статистика каналов с помощью Graphite.

В данной статье рассмотрим интеграцию Asterisk с системой агрегирования и суммирования метрик приложений StatsD. Введение Для начала разберёмся, что же такое StatsD. StatsD — это специальный демон, написанный на NodeJS, который агрегирует и суммирует метрики, полученные из разных приложений. Однако, StatsD не способен сам по себе отображать графики. Для этого ему необходимо некоторое backend-приложение, которое […]

Asterisk с StatsD

В данной статье рассмотрим интеграцию Asterisk с системой агрегирования и суммирования метрик приложений StatsD.

Введение

Для начала разберёмся, что же такое StatsD. StatsD — это специальный демон, написанный на NodeJS, который агрегирует и суммирует метрики, полученные из разных приложений.

Однако, StatsD не способен сам по себе отображать графики. Для этого ему необходимо некоторое backend-приложение, которое на основе данных из StatsD будет строить графики состояний тех или иных процессов приложений.

В нашем примере, в качестве такого backend-приложения рассмотрим один из наиболее популярных — Graphite.

Актуальный список других backend-приложений можно найти на этой странице.

Итак, перейдём к установке StatsD.

Установка и настройка StatsD

Рассматривать установку будем на системе CentOS 7.

Шаг 1. Приложение диалплана StatsD.

1.1. Перед началом установки предлагаю убедиться, что в Вашей системе присутствует приложение StatsD. Для этого в консоли CentOS выполняем следующую команду:

asterisk -rx 'core show applications' | grep StatsD

В результате должны увидеть краткое описание приложение StatsD в Asterisk.

Приложение StatsD в Asterisk

Если вывод команды аналогичен тому, что на скриншоте, можно смело переходить ко второму шагу установки. Если в результате выполнения команды в выводе ничего не появилось, значит такого приложения нет в Asterisk.

Для его появления необходимо будет пересобрать Asterisk.

1.2. Если в CentOS уже загружен актуальный исходный код Asterisk, то в нём необходимо выполнить поиск файла app_statsd.c. Чтобы поискать его во всей системе можно воспользоваться командой:

updatedb &&locate app_statsd.c

Если такой файл присутствует в системе, то переходим к компиляции Asterisk (пункт 1.3), если же нет, то сперва его необходимо скачать.

Скачать последнюю версию файла можно отсюда.

После чего размещаем его в директорию, где находится исходный код Asterisk, в каталог apps:

/asterisk-*/apps

, где * — версия Asterisk.

Теперь можно приступать к пересборке Asterisk.

1.3. Для пересборки Asterisk переходим в каталог, где лежит его исходный код и выполняем команду:

make

и дожидаемся результата.

К сожалению, не все версии Asterisk могут адекватно воспринимать код файла app_statsd.c при компиляции. Если получаем следующую ошибку:

Ошибка пересборки Asterisk

то открываем исходный код файла app_statsd.c, находим в самом конце (~ 427 строка) описание AST_MODULE_INFO и комментируем .requires, чтобы получился следующий код:

AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "StatsD Dialplan Application",
 	.support_level = AST_MODULE_SUPPORT_EXTENDED,
 	.load = load_module,
 	.unload = unload_module/*,
 	.requires = "res_statsd",*/
);

После чего сохраняем файл и пробуем заново команду:

make

Если всё завершилось без ошибок, то выполняем:

make install

После всего для проверки выполняем команду:

asterisk -rx 'core show applications' | grep StatsD

Приложение диалплана StatsD должно появится в системе.

Теперь перейдём к установке StatsD в систему.

Шаг 2. Установка и настройка StatsD.

Для установки StatsD вводим команду:

yum install statsd
Результат установки StatsD

Настройки StatsD производятся в конфиге /etc/statsd/config.js (по умолчанию). Прописываем следующие настройки:

{
    graphitePort: 2003
	, graphiteHost: "127.0.0.1"
	, port: 8125
	, graphite: {
    	legacyNamespace: false
	}
}

Эти настройки подразумевают использование Graphite в качестве backend-приложения. Если используется какое-то другое, то настройки будут изменены соответствующим образом.

По умолчанию StatsD слушает порт 8125.

Шаг 3. Настройка Asterisk для использования StatsD.

Переходим в каталог, с исходным кодом Asterisk. В нём необходимо будет проверить, что в момент установки были выбраны модули поддержки StatsD в Asterisk. Для этого выполняем команду:

make menuselect

В появившемся окне, первым делом, выбираем res_statsdиз раздела Resource Modules. Этот модуль отвечает за основной функционал StatsD в Asterisk.

[ * ] — означает, что модуль выбран.

В этом же разделе включаем следующие модули: res_chan_stats — позволяет собирать статистику по каналам; res_endpoint_stats — позволяет собирать статистику по внутренним номерам.

Теперь пересобираем Asterisk, командами:

make
make install

После установки создаём конфигурационный файл statsd.conf в каталоге /etc/asterisk. В нём прописываем следующие настройки:

[general]
enabled = true
server = 127.0.0.1

и даём ему права asterisk командой:

chown asterisk:asterisk /etc/asterisk/statsd.conf

Переходим в консоль asterisk и подключаем модуль res_statsd.so, res_chan_stats.so и res_endpoint_stats.so.

module load res_statsd.so
module load res_ chan_stats.so
module load res_endpoint_stats.so

Перейдём к установке Graphite.

Установка и настройка Graphite.

Шаг 1. Установка зависимостей.

Устанавливаем последовательно следующие пакеты:

yum install -y httpd net-snmp perl pycairo mod_wsgi python-devel git gcc-c++
yum install -y python-pip node npm
pip install 'django<1.6'
pip install 'Twisted<12'
pip install django-tagging

Шаг 2. Установка Graphite из репозитория

По умолчанию, Graphite не доступен из стандартных репозиториев CentOS 7. Поэтому необходимо подключить репозиторий Epel.
sudo yum install -y http://epel.mirror.constant.com/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm

После подключения выполняем команду:

sudo yum install -y graphite-web python-carbon

Шаг 3. Настройка Graphite.

3.1. Настройка сроков хранения данных производится в файле /etc/carbon/storage-schemas.conf. Заполняем следующим образом:

[carbon]
pattern = ^carbon\.
retentions = 60:90d
 
[default_1min_for_1day]
pattern = .*
retentions = 60s:1d
 
[default]
pattern = .*
retentions = 12s:4h, 2m:3d, 5m:8d, 13m:32d, 1h:1y

3.2. Настройка агрегации данных производится в файле /etc/carbon/storage-aggregation.conf. В нём указываем следующие настройки:

[min]
pattern = \.min$
xFilesFactor = 0.1
aggregationMethod = min
 
[max]
pattern = \.max$
xFilesFactor = 0.1
aggregationMethod = max
 
[sum]
pattern = \.count$
xFilesFactor = 0
aggregationMethod = sum
 
[default_average]
pattern = .*
xFilesFactor = 0.1
aggregationMethod = average

3.3. Запускаем Carbon:

systemctl enable carbon-cache
systemctl start carbon-cache
В случае, если вносите какие-либо изменения в файлы storage-aggregation.conf или storage-schemas.conf, то необходимо обязательно перезапускать carbon-cache

3.4. Настройка Graphite. Первым делом настраиваем временную зону и указываем секретный ключ. Все эти настройки производим в файле /etc/graphite-web/local_settings.py в параметрах TIME_ZONE и SECRET_KEY.

Также запускаем скрипт настройки базы данных:

PYTHONPATH=/usr/share/graphite/webapp django-admin syncdb —settings=graphite.settings

3.5. Настройка Apache.

Если используется стандартная индексная страница (прописанная в файле /etc/httpd/conf.d/welcome.conf), то её необходимо закомментировать..

Открываем файл /etc/httpd/conf.d/graphite-web.conf и заменяем содержимое блока

<Directory "/usr/share/graphite/">

на следующее:

Require all granted
Order allow,deny
Allow from all

Сохраняем файл. Также изменяем владельца файла базы данных Graphite на пользователя, из-под которого запускается Apache (в моём случае это asterisk):

chown asterisk: asterisk /var/lib/graphite-web/graphite.db

Далее создаём индекс файл:

touch /var/lib/graphite-web/index

И перезапускаем Apache:

systemctl restart httpd

Теперь, если при подключении к серверу по 80 порту, в браузере должен появится Graphite:

Интерфейс Graphite

В этом интерфейсе, в левой части экрана находится дерево доступных статистик. Нас будет интересовать раздел stats. В подразделе gauges -> channels -> count можно посмотреть статистику по общему количеству каналов в определённый промежуток времени, а в endpoints – по конкретным внутренним номерам, зарегистрированным на IP АТС Asterisk.

В качестве примера выведем информацию по количеству каналов на SIP номере 0009. Для этого в дереве доступных статистик выбираем stats -> endpoints -> SIP -> 0009 -> channels. В основном окне при этом отображается график:

Отображение графика на примере количества каналов 0009

Зелёным цветом на графике отражено общее количество используемых каналов, синим – количество каналов на номере 0009.

При выборе новой статистики, она добавляется на график с цветом, который ещё не присутствует на графике.

Для управления графиками статистик (к примеру, удаления их) необходимо открыть панель Graph Data.

На этом статья по интеграции Asterisk и StatsD завершена.

Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.