Интеграция Asterisk с StatsD. Графическая статистика каналов с помощью Graphite.
В данной статье рассмотрим интеграцию Asterisk с системой агрегирования и суммирования метрик приложений StatsD. Введение Для начала разберёмся, что же такое StatsD. StatsD — это специальный демон, написанный на NodeJS, который агрегирует и суммирует метрики, полученные из разных приложений. Однако, StatsD не способен сам по себе отображать графики. Для этого ему необходимо некоторое backend-приложение, которое […]
В данной статье рассмотрим интеграцию Asterisk с системой агрегирования и суммирования метрик приложений StatsD.
Введение
Для начала разберёмся, что же такое StatsD. StatsD — это специальный демон, написанный на NodeJS, который агрегирует и суммирует метрики, полученные из разных приложений.
Однако, StatsD не способен сам по себе отображать графики. Для этого ему необходимо некоторое backend-приложение, которое на основе данных из StatsD будет строить графики состояний тех или иных процессов приложений.
В нашем примере, в качестве такого backend-приложения рассмотрим один из наиболее популярных — Graphite.
Актуальный список других backend-приложений можно найти на этой странице.
Итак, перейдём к установке StatsD.
Установка и настройка StatsD
Шаг 1. Приложение диалплана StatsD.
1.1. Перед началом установки предлагаю убедиться, что в Вашей системе присутствует приложение StatsD. Для этого в консоли CentOS выполняем следующую команду:
asterisk -rx 'core show applications' | grep StatsD
В результате должны увидеть краткое описание приложение StatsD в 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 при компиляции. Если получаем следующую ошибку:
то открываем исходный код файла 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 производятся в конфиге /etc/statsd/config.js (по умолчанию). Прописываем следующие настройки:
{
graphitePort: 2003
, graphiteHost: "127.0.0.1"
, port: 8125
, graphite: {
legacyNamespace: false
}
}
Эти настройки подразумевают использование Graphite в качестве backend-приложения. Если используется какое-то другое, то настройки будут изменены соответствующим образом.
Шаг 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 из репозитория
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
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/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:
В этом интерфейсе, в левой части экрана находится дерево доступных статистик. Нас будет интересовать раздел stats. В подразделе gauges -> channels -> count можно посмотреть статистику по общему количеству каналов в определённый промежуток времени, а в endpoints – по конкретным внутренним номерам, зарегистрированным на IP АТС Asterisk.
В качестве примера выведем информацию по количеству каналов на SIP номере 0009. Для этого в дереве доступных статистик выбираем stats -> endpoints -> SIP -> 0009 -> channels. В основном окне при этом отображается график:
Зелёным цветом на графике отражено общее количество используемых каналов, синим – количество каналов на номере 0009.
При выборе новой статистики, она добавляется на график с цветом, который ещё не присутствует на графике.
На этом статья по интеграции Asterisk и StatsD завершена.
Остались вопросы?
Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.