====== Zabbix - мониторинг Asterisk ======
===== Реклама =====
* Привет Всем любителям Asterisk и/или Zabbix и тем, кто только собирается с ними познакомиться! Предлагаем Вашему вниманию очередной "воспроизводимый в домашних условиях" вебинар. Давайте посмотрим, какие интерфейсы предлагает Asterisk для мониторинга и как подключить их к Zabbix. Так же, будет бонус для любителей Prometheus
===== Техническое задание =====
* Развернуть Zabbix и Asterisk в сети предприятия
* Настроить интерфейсы Asterisk для подключения Zabbix
* Настроить интерфейсы Asterisk для подключения Prometheus
===== Запись вебинара =====
* Тэги: Zabbix, Asterisk, Prometheus, Grafana
* https://youtu.be/tcw93nHEeDY
* https://rutube.ru/video/private/91885b867eb1edc6f395d06f972670de/
===== Шаг 1. Что у нас есть для начала =====
* Импортируем VM из образа [[Развертывание стенда дома|Ubuntu24]], подключаем мостом к локальной сети, рекомендуется 4GB RAM, запускаем, выясняем IP и подключаемся через SSH
===== Шаг 2. Разворачиваем Asterisk =====
* [[Сервис Asterisk]]
* [[Сервис Asterisk#Настройка CHAN_SIP каналов]]
* [[Сервис Asterisk#Настройка базового плана нумерации]]
* [[ZoIPer]]
===== Шаг 3. Разворачиваем Zabbix =====
* [[Технология Docker]] (нужна версия из репозитория вендора)
* [[https://www.zabbix.com/documentation/current/en/manual/installation/containers#docker-compose]]
* Запускаем docker compose с опцией -d
* Удаляем шаблон Zabbix Agent с хоста Zabix Server
===== Шаг 4. Мониторинг Asterisk через Zabbix Agent UserParameter =====
Решение прислал Кузьмин Алексей Михайлович
* [[Пакет sudo]]
# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubuntu
* Устанавливаем [[https://www.zabbix.com/download?zabbix=7.4&os_distribution=ubuntu&os_version=24.04&components=agent&db=&ws=|Zabbix Agent]] (из репозитория вендора, в базовом нет)
# docker inspect zabbix-docker-zabbix-server-1
# cat /etc/zabbix/zabbix_agentd.d/my.conf
Server=172.16.M.N
UserParameter=asterisk.activecalls,sudo /usr/sbin/asterisk -x "core show channels" | grep "active call" | awk '{print $1}'
UserParameter=asterisk.processedcalls,sudo /usr/sbin/asterisk -x "core show channels" | grep "calls processed" | awk '{print $1}'
UserParameter=asterisk.lines[*],sudo /usr/sbin/asterisk -x "core show channels" | grep '^$1' | wc -l
UserParameter=asterisk.chansip.discovery,sudo /usr/local/bin/asterisk.chansip.discovery.py
# zabbix_agentd -t asterisk.activecalls
# zabbix_agentd -t asterisk.lines[SIP/401]
# zabbix_agentd -p | grep discovery
* Язык программирования Python [[Язык программирования Python#Zabbix LLD приложение]]
# zabbix_agentd -t asterisk.chansip.discovery
Item prototype
...
Name: asterisk lines {#CHANNAME}
...
Key: asterisk.lines[{#CHANNAME}]
...
===== Шаг 5. Мониторинг Asterisk через шаблон "Asterisk by HTTP" =====
* [[https://www.zabbix.com/ru/integrations/asterisk|Zabbix + Asterisk]]
* [[https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/tel/asterisk_http?at=release/7.0]]
* [[https://habr.com/ru/articles/507882/|Как подружить Zabbix с Asterisk «из коробки»]]
* [[https://docs.asterisk.org/Configuration/Interfaces/Asterisk-Manager-Interface-AMI/Asynchronous-Javascript-Asterisk-Manager-AJAM/Allow-Manager-Access-via-HTTP/#configuring-managerconf]]
* [[Сервис Asterisk#Настройка http доступа]]
* [[Сервис Asterisk#Asterisk AMI]] с webenabled
IP=192.168.M.N
wget "http://$IP:8088/rawman?action=login&username=admin&secret=admin" --save-cookies cookies.txt -q -O -
wget "http://$IP:8088/rawman?action=ping" --load-cookies cookies.txt -q -O -
wget "http://$IP:8088/rawman?action=logoff" --load-cookies cookies.txt -q -O -
* В Zabbix добавляем узел Asterisk с IP 192.168.M.N, назначаем шаблон "Asterisk by HTTP", устанавливаем значение макросов, проверяем значения в "Latest data"
{$AMI.HOST}: 192.168.M.N
{$AMI.URL}: http://192.168.M.N:8088/rawman
{$AMI.USERNAME}: admin
{$AMI.SECRET}: admin
* [[SIPNET]]
server# ip route add blackhole 212.53.40.40
===== Шаг 6. Мониторинг Asterisk через Prometheus =====
* [[https://habr.com/ru/companies/slurm/articles/554980/|Yet another Asterisk monitoring: поддержка Prometheus]]
* [[https://docs.asterisk.org/Latest_API/API_Documentation/Module_Configuration/res_prometheus/]]
# cat /etc/asterisk/prometheus.conf
...
enabled = yes
...
# curl http://$IP:8088/metrics
...
asterisk_calls_count
...
asterisk_endpoints_channels_count
...
# HELP asterisk_endpoints_state Individual endpoint states. 0=unknown; 1=offline; 2=online.
asterisk_endpoints_state
...
* [[Сервис Prometheus]]
# cat /etc/prometheus/prometheus.yml
...
- job_name: asterisk
metrics_path: /metrics
static_configs:
- targets: ['192.168.M.N:8088']
* [[Сервис Grafana]]
* [[https://grafana.com/docs/grafana-cloud/monitor-infrastructure/integrations/integration-reference/integration-asterisk/]]