Estadísticas de llamadas de Asterisk con Grafana. ( Asterisk + Zabbix + Grafana)
Es increible como Docker ha cambiado todo, sobre todo la forma como ha reducido los tiempos de configuracion y despliegue en las instalaciones, a continuacion veremos como desplegar una arquitectura de monitoreo grafico con Grafana para las troncales SIP de Asterisk. para ello usaremos como intermediario a Zabbix que nos ayudara a extraer los datos de Asterisk con ayuda de Algunos scripts personalizados.
El Entorno
Maquinas virtuales con Centos 7
01 Maquina virtual de Asterisk / IP 192.168.0.252
01 Maquina virtual para Zabbix y Grafana / IP 192.168.0.251
El Escenario de trabajo.
1.- Instalacion Docker y Docker Compose
yum install -y yum-utils device-mapper-persistent-data lvm2 nano vim net-tools
yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce -y
systemctl enable –now docker
docker –version
docker-compose –version
2.- Instalacion de Zabbix en contenedor Docker.
yum install -y git
git clone https://github.com/zabbix/zabbix-docker.git
cd zabbix-docker/
git checkout 5.2
/usr/local/bin/docker-compose -f docker-compose_v3_alpine_mysql_latest.yaml up -d
Luego ingresar a Zabbix : http://192.168.0.251
3.- Instalacion de Grafana en contenedor Docker
3.1.- Crear el archivo para crear el contenedor de Grafana.
mkdir grafana ; cd grafana
nano docker-compose.yml
# docker-compose.yml
version: ‘2’
#Define volumes variables
volumes:
grafana_data: {}
#Define services
services:
grafana:
image: grafana/grafana
volumes:
– grafana_data:/root/grafana:rw
environment:
– GF_SECURITY_ADMIN_PASSWORD=admin
ports:
– «3000:3000»
3.2.- Iniciar el contenedor.
docker-compose up -d
3.3.- Instalar el plug-in de Zabbix en el contenedor de Grafana.
docker exec -it grafana_grafana_1 bash
grafana-cli plugins install alexanderzobnin-zabbix-app
exit
Finalmente reiniciar el contenedor.
docker restart grafana_grafana_1
Finalmente ingresar a Grafana y activar el Plug-in de Zabbix :
4.- Integrar Asterisk con Zabbix
4.1.- Dialplan de Asterisk.
Ahora que tenemos todo el entorno, es necesario empezar a integrar todos los componentes lo primero es necesario trabajar en el servidor Asterisk, para conseguir las llamadas totales y simultaneas de una troncal SIP. para este ejemplo la troncal que vamos a monitorear y posteriormente generar graficas es la troncal SIP 7973430 la cual ingresa por el contexto trunkinbound
En el extensions.conf vamos a modificar
####################################
[trunkinbound]
exten=>_7973430,1,Set(GROUP(trunkinbound)=7973430)
same => n,Set(COUNT=${GROUP_COUNT(7973430@trunkinbound)})
same => n,NoOp(Hay ${COUNT} llamadas simultaneas en la trocal 7973430.)
same => n,System(/bin/echo ${COUNT} > /etc/asterisk/trunksip-7973430-llamadas-simultaneas.txt)
same => n,System(/bin/bash /etc/asterisk/trunksip-7973430-prog-llamadas-totales.sh)
same => n,Playback(demo-congrats)
##################################
Esto lo que va hacer es :
- Guardar las llamadas simultaneas en la variable ${COUNT} y luego la guardara en el archivo trunksip-7973430-llamadas-simultaneas.txt
- Luego para el conteo de las llamadas totales de la troncal va ejecurar el script en bash trunksip-7973430-prog-llamadas-totales.sh
4.2.- Crear scripts.
Script para guardar llamadas totales
vim trunksip-7973430-prog-llamadas-totales.sh
#!/bin/bash
while read linea; do
declare -i linea
linea=$((linea + 1))
echo -e «Línea: $linea»
echo $linea > /etc/asterisk/trunksip-7973430-llamadas-totales.txt
done < /etc/asterisk/trunksip-7973430-llamadas-totales.txt
El script lo que hace es leer la linea actual , declararlo como integer , sumar 1 al a la variable $linea , finalmente agregarlo al archivo trunksip-7973430-llamadas-totales.txt
4.3.- Instalar el agente de Zabbix y configurar los parametros de lectura.
Instalar el agente
rpm -ivh https://repo.zabbix.com/zabbix/5.2/rhel/7/x86_64/zabbix-release-5.2-1.el7.noarch.rpm
yum -y install zabbix-agent
Configurar la direccion IP del servidor Zabbix
vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.0.251
ServerActive=192.168.0.251
Hostname=Zabbix server
Activar el servicio.
systemctl start zabbix-agent
systemctl enable zabbix-agent
systemctl status zabbix-agent
Configurar los parametros para leer la informacion de llamadas guardadas en los archivos TXT.
cd /etc/zabbix/zabbix_agentd.d/
vim asterisk.conf
UserParameter=ast.trunksip1simultaneas,cat /etc/asterisk/trunksip-7973430-llamadas-simultaneas.txt
UserParameter=ast.trunksip1totales,cat /etc/asterisk/trunksip-7973430-llamadas-totales.txt
Validar que el agente de Zabbix puede leer los datos correctamente es necesario ejecurar los siguiente :
zabbix_agentd -t ast.trunksip1simultaneas
zabbix_agentd -t ast.trunksip1totales
Si hasta este punto todo salio bien, el agente sera capas de leer los datos almacenados en los TXT de la siguiente forma :
5.- Integrar Zabbix con Asterisk.
5.1.- Agregar el «host» de Asterisk en Zabbix
5.2.- Agregar los parametros definidos en el agente , Para ello sera necesario agregar un nuevo «item» en Zabbix de la siguiente forma.
Donde «ast.trunksip1totales» es el parametro definido en el agente instalado en el servidor Asterisk
Donde «ast.trunksip1simultaneas» es el parametro definido en el agente instalado en el servidor Asterisk.
Finalmente tendremos la informacion de Asterisk en Zabbix de la siguiente forma
6.- Integrar Grafana con Zabbix
Una vez que hemos conseguidor mostrar los datos de Asterisk en Zabbix ahora es necesario graficarlo con Grafana.
6.1.- Enlazar Grafana para que pueda consumir la API de Zabbix.
Finalmente al realizar el test de conexion tendremos el siguiente resultado:
6.2.- Crear los Panel de Graficas consumiendo la API de Zabbix.
7.- Notas y consideraciones Finales
- Realizar todas las conexiones via HTTPS
- Crear un usuario individual en Zabbix para que se conecte Grafana.
- Ejecutar los conenedores Docker con un usuario sin privilegios.
- En Asterisk en vez de usar archivos TXT usar una API que almacene y consulte los datos.
- Existe un sin numero de informacion que es posible recabar usando SNMP de Asterisk , Agente de Zabbix y el plug-in en Zabbix Asterisk by HTTP : https://www.zabbix.com/la/integrations/asterisk
Espero les sirva
@jroliva
Excelente tutorial Juan 😀
Excelente Juan.. muchas gracias.
Juan, sabes estaba probando articulo, pero al llegar a este paso ya no avanzo mas, me tira siempre error como este:
ERROR: yaml.scanner.ScannerError: mapping values are not allowed here
in «./docker-compose.yml», line 5, column 8
y modifico y modifico, no logro pasar…
#################################
mkdir grafana ; cd grafana
nano docker-compose.yml
# docker-compose.yml
version: ‘2’
#Define volumes variables
volumes:
grafana_data: {}
#Define services
services:
grafana:
image: grafana/grafana
volumes:
– grafana_data:/root/grafana:rw
environment:
– GF_SECURITY_ADMIN_PASSWORD=admin
ports:
– «3000:3000»