Hoy vamos a ver cómo configurar Prometheus para poder recopilar datos de mi dispositivo MIKROTIK a través de SNMP y cómo configurar GRAFANA para poder visualizar todas las métricas de este dispositivo.
Recordad que, anteriormente ya vimos cómo instalar Prometheus y Grafana, hoy, veremos por fin, cómo configurarlos de forma conjunta para monitorizar nuestra red y todos los elementos que forman parte de ella.
Usaremos Prometheus para monitorizar elementos de red a través de SNMP, ya que muchos de ellos permiten dicha monitorización y es relativamente fácil poder usar este protocolo en prácticamente todos los fabricantes de routers y switches actuales y en todos los sistemas operativos que usamos hoy en día.
El Proceso
Lo primero que haremos es descargarnos y levantar un DOCKER, es decir un contenedor con un programa llamado «SNMP Exporter». Este programa, es necesario para poder recoger variables y valores SNMP de aquellos elementos de red donde tengamos SNMP activado. A su vez, Prometheus, se conectará a este exportador para poder almacenar la información de los valores SNMP recogidos por el «SNMP Exporter» y finalmente usaremos Grafana que interpretará esos datos de Prometheus y los mostrará por pantalla.
Preparación del «SNMP Exporter»
Lo primero que haremos pues es arrancar SNMP Exporter con DOCKER. Además, si queréis repasar como instalar DOCKER en vuestra máquina recordad que tenemos un post de dedicado a ello.
Pero antes de arrancarlo, primero debemos crear un archivo llamado «snmp.yml» que contendrá TODAS las métricas que queremos saber de nuestro dispositivo, en mi caso un MIKROTIK.
Para obtener el valor de dichas métricas tendremos que usar el OID de cada elemento de dentro de nuestro MIKROTIK.
Ahora si, como decíamos, crearemos nuestro archivo «snmp.yml» de la siguiente manera:
Yo he creado una carpeta llamada «Prometheus» dentro de mi Escritorio que es donde colocaré los ficheros.
Presionamos la letra «a» para insertar el siguiente contenido en nuestro fichero vacío:
public_v2:
community: alexarizanet
version: 2
modules:
mikrotik:
walk:
# System OIDs
– 1.3.6.1.2.1.1.5.0 # Identity (Nombre del equipo)
– 1.3.6.1.4.1.14988.1.1.3.100.1.3.17 # Health (Temperatura del equipo)
# Interfaces OIDs
– 1.3.6.1.2.1.2.2.1.2.1 # interface_name (nombre de la interfaz)
– 1.3.6.1.2.1.31.1.1.1.6.1 # bytes-in (Bytes recibidos en interfaz)
– 1.3.6.1.2.1.31.1.1.1.10.1 # bytes-out (Bytes enviados en interfaz)
metrics:
– name: identity
oid: 1.3.6.1.2.1.1.5.0
type: DisplayString
– name: temperature
oid: 1.3.6.1.4.1.14988.1.1.3.100.1.3.17
type: gauge
– name: ifaceName
oid: 1.3.6.1.2.1.2.2.1.2.1
type: DisplayString
– name: bytesIn
oid: 1.3.6.1.2.1.31.1.1.1.6.1
type: gauge
– name: bytesOut
oid: 1.3.6.1.2.1.31.1.1.1.10.1
type: gauge
Como véis, organizaremos los OIDS (métricas) en diferentes tipos para que la lectura de dicho fichero sea mas «amigable».
Yo usaré algunos OIDs interesantes para poder visualizarlos más adelante.
En el apartado «walk» se definen los OIDs que el SNMP Exporter debe recorrer y recolectar en cada consulta. Los OIDs son un conjunto de datos SNMP que el exportador extrae directamente del dispositivo que queremos monitorizar.
En cambio en el apartado «metrics» se mapean los OIDs recolectados en «walk» a nombres de métricas específicas para Prometheus y Grafana, asignándoles etiquetas, tipos y unidades. Este apartado permite crear nombres personalizados y nos permite organizar cómo se presentan las métricas en Prometheus y Grafana.
Esto significa que, si solo usamos el apartado «walk» será suficiente para obtener los datos básicos de un dispositivo. Es decir, si solo definimos «walk», el SNMP Exporter recorrerá los OIDs especificados y devolverá sus valores sin ninguna personalización.
En cambio, si usamos «walk» y «metrics» juntos, seremos capaces de definir nombres específicos, etiquetas o formatos para los datos obtenidos en walk. Esto facilita que Prometheus interprete mejor los datos y los nombres de las métricas sean más descriptivos. Además, ello también será muy útil para que en Grafana los identifiquemos rápidamente.
ADEMÁS, fijaos también que he usado la «community» alexarizanet que configuraremos también en nuestro MIKROTIK para poder usarla para extraer los datos (métricas) mediante SNMP.
Ahora presionamos «ESC» y tecleamos «:x!» para guardar el fichero.
Descarga y arranque de SNMP Exporter en DOCKER
Y ahora si, descargaremos SNMP Exporter y lo levantaremos como docker usando el fichero snmp.yml mediante el comando:
y vemos que se ha creado correctamente:
De esta manera nuestro exporter ya está preparado para recoger métricas cuando se le llame desde Prometheus recopilando así los OIDs que le hemos indicando en el archivo snmp.yml.
Además, una vez levantado, vamos a ver que efectivamente el exporter está funcionando poniendo esta URL en nuestro navegador:
donde:
- localhost:9116 = Es la dirección y puerto donde hemos levantado nuestro «snmp exporter»
- target = Es la IP de nuestro Mikrotik que queremos monitorizar
- module = Es el nombre del módulo que hemos usado dentro de nuestro archivo snmp.yml
Conexión de SNMP Exporter con Prometheus
Básicamente lo que haremos ahora es configurar el archivo «prometheus.yml» que recordad, contiene nuestra configuración personalizada de nuestro Prometheus. De esta manera le vamos a agregar una «tarea» para que nuestro SNMP Exporter periódicamente envíe las métricas indicadas y que ya hemos configurado en el fichero «snmp.yml».
Os recuerdo además, que ya creamos este fichero en el post donde instalamos Prometheus y Grafana.
Y es que, de momento en nuestro fichero «prometheus.yml» solo teníamos una tarea llamada «prometheus» que simplemente recoge datos del propio servidor. De hecho, esta tarea ya estaba visible en http://localhost:9090/targets una vez nuestro prometheus está levantado mediante DOCKER:
Pues bien, ahora lo que haremos es añadir una tarea llamada «mikrotik_snmp» de manera que esta sea visible en el mismo apartado.
Asi que, editamos el fichero «prometheus.yml» de la siguiente manera:
Presionamos la letra «a» para editar. Y añadimos la siguiente información a la que ya tenemos actualmente:
static_configs:
– targets:
– 192.168.0.1
metrics_path: /snmp
params:
module:
– mikrotik # Debe coincidir con el módulo en snmp.yml
relabel_configs:
– source_labels: [__address__]
target_label: __param_target
– target_label: __address__
replacement: 192.168.0.134:9116 # Dirección del SNMP Exporter
donde:
- job_name = Nombre de la tarea que veremos en PROMETHEUS (pondremos la que queramos)
- targets = Colocaremos la IP de nuestro equipo a monitorizar (en mi caso mi MIKROTIK)
- metrics_path = Path donde almacenaremos nuestras métricas
- module = Nombre del módulo que hemos usado dentro de nuestro archivo snmp.yml
- replacement = Dirección del SNMP Exporter (en mi caso lo tengo en la misma máquina así que debo poner la IP de ella en lugar de localhost)
Guardamos el fichero con «:x!»:
Paramos y eliminamos el docker de Prometheus:
docker rm prometheus
Y lo volvemos a arrancar:
Y comprobamos que está levantado correctamente:
Y ahora si nos vamos a la web de Prometheus nuevamente y nos vamos a Status -> Targets (http://localhost:9090/targets) veremos una tarea nueva creada llamada «mikrotik_snmp».
Pues bien, deberemos ver que dicha tarea se conecta, es decir que el status es UP:
Ahora, por fin, ya tenemos Prometheus conectado con nuestro Exporter que a su vez realizará consultas SNMP a nuestro router Mikrotik.
Conexión de Prometheus con Grafana
Y ahora nos queda la parte final donde conectaremos Grafana con Prometheus para poder visualizar los datos de nuestro Mikrotik en forma de gráficas.
Para ello lo primero que haremos es levantar Grafana en docker y comprobamos que se levanta correctamente:
docker ps -a
Recordad que, ya vimos paso a paso como hacerlo y como configurarlo. Os comento esto porque recordad que uno de los pasos importantes era conectar ambos dockers (Prometheus y Grafana) en la misma red creando la red primero y luego colocando ambos dockers en ella:
docker network connect myNetwork prometheus
docker network connect myNetwork grafana
Además podemos ver con el siguiente comando que ambos DOCKERS quedan conectados:
Y ahora si, accedemos a Grafana:
Lo primero que haremos es comprobar que en «Connections > Datasources» tenemos prometheus configurado:
Si es así, iremos abajo del todo de esta misma pantalla para presionar «save & test» y comprobar que tienen conexión:
Y ahora si podemos ir a construir nuestro Dashboard para nuestro Mikrotik. Para ello nos iremos a «Dashboards» y al botón «Create Dashboard»:
En la siguiente pantalla le damos al botón «Add visualization».
En «Select data source» seleccionaremos «Prometheus»:
Ahora vamos a generar nuestra primera visualización correspondiente al NOMBRE de nuestro dispositivo. Para ello nos vamos al menú lateral derecho:
Y ahora seleccionamos «Stat» como tipo de gráfico para nuestra primera visualización:
Ahora nos vamos abajo y seleccionamos «Code»:
Ahora colocamos el siguiente comando en la parte de «metrics browse»:
Donde:
- identity = Es el nombre que le dimos al valor correspondiente a la identidad del router asociado al OID correspondiente dentro del fichero snmp.yml del exporter.
- 192.168.0.134:9116 = Corresponde a la IP y puerto de nuestro exporter
También colocaremos «{{identity}}» en el apartado «Legend», desplegando primero la OPCIÓN «CUSTOM» dentro de ese apartado.
Y le damos al botón «Run queries»
Seguramente aun no veamos el resultado esperado, así que en el menú lateral derecho nos vamos a «Stat Styles» Y seleccionamos «Text mode = Name» y «Graph mode = None»:
Y ahora le damos al botón «refresh» para ver el resultado final:
Y ahora si, vemos el nombre de nuestro MIKROTIK obtenido a través de SNMP usando nuestro Exporter y Prometheus:
También podemos ponerle nombre a nuestro panel en el apartado «Panel Options», y si está todo OK le damos «Save Dashboard»:
Le damos un nombre, y «SAVE»:
Y le damos click a nuestro dashboard para ver la vista general de nuestras visualizaciones:
Pues bien, ahora haremos lo propio con el resto de métricas. Por ejemplo para visualizar el tráfico de neustro internet, es decir la variable «bytesIn», recordad, de nuestro fichero «snmp.yml» del Exporter.
Nos iremos al dashboard de nuevo, para añadir una nueva visualización:
Y añadimos un gráfico de tipo «Time Series» con la sentencia: «bytesIn{instance=»192.168.0.134:9116″}» y añadimos algunas opciones de visualización:
Le damos un nombre y «Save Dashboard»:
Volvemos al Dashboard para ver el resultado y colocar nuestra nueva visualización donde queramos:
Finalmente nos quedaría añadir el resto de métricas que hemos añadido a «snmp.yml» (temperature, ifaceName y bytesOut) para tener todos los datos:
Pues bien, de esta manera personalizaríamos nuestros dashboards dentro de Grafana.
Además, os dejo un resumen de los comandos que hemos usado para poder tener funcionando nuestro sistema.
Resumen de comandos para arrancar nuestro sistema de MONITORIZACIÓN
docker run -d –name snmp_exporter -p 9116:9116 -v /home/aariza/Escritorio/Prometheus/snmp.yml:/etc/snmp_exporter/snmp.yml prom/snmp-exporter
PROMETHEUS
docker run -d –name prometheus -p 9090:9090 -v /home/aariza/Escritorio/Prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v prometheus-data:/prometheus prom/prometheus
GRAFANA
docker run -d -p 3000:3000 –name=grafana –volume grafana-storage:/var/lib/grafana grafana/grafana-oss
CONEXION EN RED DOCKERS
docker network connect myNetwork prometheus
docker network connect myNetwork grafana
y dentro de Grafana, los comandos, sentencias o «queries» para añadir nuestras métricas:
bytesIn{instance=»192.168.0.134:9116″}
bytesOut{instance=»192.168.0.134:9116″}
temperature{instance=»192.168.0.134:9116″}
ifaceName{instance=»192.168.0.134:9116″}
Espero que os haya gustado y sobretodo os haya sido de utilidad, ¡nos vemos en el próximo post!