En una oportunidad se necesitaba presentar estadísticas con forma de lindo tablero de equipos conectados en diferentes routers Mikrotiks, para ello Grafana + Bash + Prometheus al rescate
Consideraciones
Parto de la base que el servidor (en mi caso 192.168.1.200) ya dispone de Grafana y base de datos Prometheus instalado, bajo un sistema operativo Ubuntu Linux. Ademas que desde ese server tengo conectividad hacia los routers MikroTik por SSH.
Descripción general
Tabla ARP
Contabilizo los dispositivos presentados en la tabla ARP, ya que cada dispositivo que se presenta queda su MAC Address en la tabla. La tabla retiene esas MAC por 30 segundo por default
ARP timeout es el tiempo máximo de duración en caché de un registro ARP
Dentro del router Mikrotik cambio la configuración del timeout de la tabla ARP:
/ip settings set arp-timeout=4h
Tablero y Gráficos
La graficación se realiza mediante dashboard de Grafana, tomando los valores desde la base de datos Promtheus.Obtención de datos
Mediante el servicio de pushgateway inserto los datos obtenidos del Mikrotik en Prometheus bajo el job Mikrotik_ARP , que escucha bajo el puerto 9091La configuración del job se puede consulta en:
- job_name: pushgateway static_configs: - targets: ['localhost:9091'] labels: instance: pushgateway
Los mikrotiks tienen el usuarios de servicio "prometheus" creado para ejecutar el comando por SSH:
/ip arp print count-only where interface=bridge1
El modo de autenticación para el acceso del script al router es mediante key para evitar la solicitud de claves, la publica que utiliza el Mikrotik
Con el usuario de servicio se cronea 🕐para que corra cada 5 min el script en:
El script es quien realiza la consulta por SSH al mikrotik y pushea a la base de datos Prometheus la información.
El formato para ingreso de datos a la base es:
http://localhost:9091/metrics/job/Mikrotik_ARP/instance/Nombre_Router
Agregando Routers a Prometheus
- Generar user en router Mikrotik (en mi caso se llama prometheus)
- Gerar la llave (ssh key) en un equipo con OpenSSH, con el comando:
ssh-keygen -t rsa -b 4096
- Copiar el archivo mikrotik.pub al Mikrotik por SCP (el nombre del archivo puede variar según el paso 2)
- Ejecutar en el Mikrotik (importo la llave ssh):
user ssh-keys import user=prometheus public-key-file=mikrotik.pub
- Editar en el server 192.168.1.200, el archivo: /scripts/mikrotik.sh
- Dentro del script de bash, por cada router:
- #Router IP #.#.#.# - Nombre_Router
- string="Mikrotik_ARP "
- string+=$(ssh -l prometheus -i /home/usuario_servicio/.ssh/mikrotik IP_ROUTER "/ip arp print count-only where interface=bridge1")
- echo "$string"
- echo $string |tr -d '\r'| curl --data-binary @- http://localhost:9091/metrics/job/Mikrotik_ARP/instance/Nombre_Router
- Guardar Cambios
- Validar la información en la interfaz de Prometheus
http://192.168.1.200:9090/graph?g0.range_input=1h&g0.expr=Mikrotik_ARP&g0.tab=0
- Debemos visualizar un gráfico similar, tener en cuenta que se actualiza cada 5 minutos
Ajustar la retención (Prometheus)
En forma predeterminada guarda 15 días 😠
Para cambiar es necesario editar el archivo de configuración de Prometheus:
sudo nano /etc/default/prometheus
Para guardar un año, modificar la línea
ARGS="-storage.local.retention 8760h0m0s"
En mi caso lo cambie por 1 año de retención
Dashboard en Grafana
A partir de este de la configuración de JSON se puede importar para obtener algo así:
En mi caso cada router se llama EP#, con tres métricas:
- Contador de Promedio de dispositivos conectados
- Contador de Máximo de dispositivos conectados
- Histograma de Tiempo de dispositivos conectados
Configuración del origen de datos
Configuration -> Data Sources -> botón Add Data Source
Seleccionamos dentro de "Time series databases" el motor Prometheus
Colocamos el nombre, URL de Prometheus (en mi caso http://192.168.1.200:9090)
Consideraciones de Seguridad
ES muuuuyy recomendable, aplicar algún tipo de autenticación al motor Prometheus , certificado y credenciales. El ejemplo esta armado para las capturas de pantallas
Creación del dashboard
Creamos un nuevo dashboard en Grafana, le damos un títulos y lo gradamos.
Dentro de ese dasboard creamos un nuevo Panel y obtenemos algo así
Donde dice default, seleccionar Promethus que es nuestro origen de datos.
En Metrics -> seleccionamos Mikrotik -> Mikrotik_ARP
En Panel -> Visualización selecciono como quiero representar cada panel:
Los pasos del panel los repetimos por cada indicador que queremos colocar en el dashboard.
Este apartado no intenta ser un tutorial de como crear dashboard en Grafana, si no, dar los pasos generales para hacer foco en los indicadores para contar equipos conectados en los routers.
Configuración Histograma
Detalles de la Query
Obtengo los datos de origen de Prometheus, indicando la Métrica Mikrotik_ARP y que adjunte la leyenda {(exported_instance)} ya que cada instancia corresponde a un router
Tener en cuenta de excluir el que dice "{_name_=..." en Transform
Configuración Contador Máximos
Detalle de la Query
Obtengo los datos de origen de Prometheus, indicando la Métrica Mikrotik_ARP y que adjunte la leyenda {(exported_instance)} ya que cada instancia corresponde a un router
Transformación para calcular el Máximo
Dentro de Transform
- Excluir el que dice "{_name_=..." para evitar ver ese valor
- Seleccionar todos los router (en mi caso EP#) que quier ver en el dashboard
- En Group by seleccionar Calculate y seleccionar "Max"
- En Group by, en el campo Time seleccionar Group by para que aparezca un contador por cada router
Configuración Contador de Promedio conexiones
Detalle de la Query
Obtengo los datos de origen de Prometheus, indicando la Métrica
Mikrotik_ARP y que adjunte la leyenda {(exported_instance)} ya que cada
instancia corresponde a un router
Transformación para calcular el Promedio (mean)
Dentro de Transform
- Excluir el que dice "{_name_=..." para evitar ver ese valor
- Seleccionar todos los router (en mi caso EP#) que quier ver en el dashboard
- En Group by seleccionar Calculate y seleccionar "Mean"
- En Group by, en el campo Time seleccionar Group by para que aparezca un contador por cada router
Referencias
- https://wiki.mikrotik.com/Manual:IP/Settings
- https://medium.com/@giovannyorjuel2/env%C3%ADe-m%C3%A9tricas-a-prometheus-mediante-pushgateway-5a8fe6357ea8
- https://andalinux.wordpress.com/2018/08/28/ssh-pair-keys-on-mikrotik/
0 comments:
Publicar un comentario