Introducción a Prometheus Blackbox Exporter

per Victor Carceler darrera modificació 2024-12-18T18:03:41+01:00

Para monitorizar la infraestructura del centro utilizamos Prometheus (una base de datos de series temporales) y Grafana para representar de manera visual los datos. También utilizamos Loki para centralizar los logs (o journal) pero eso es otra historia.

Las métricas de rendimiento del parque informático, switches, APs y otros dispositivos están todas en Prometheus. Estas métricas se adquieren a partir de alguno de los exportadores habituales.

Por ejemplo:

  • prometheus_node_exporter está instalado en todos los ordenadores y publica las métricas de rendimiento y, además, utilizando textfile_collector publica otras características de la máquina.
  • prometheus_snmp_exporter está instalado en Baba-yaga y permite recoger métricas de los switches, APs y otros equipos mediante SNMP.

Pero si queremos monitorizar la conectividad (con un ping a algún host), la disponibilidad de alguna web (con http o https) o alguna resolución dns entonces prometheus_blackbox_exporter es el exportador que necesitamos :-)

Instalación

Si no se cuenta con prometheus y grafana se puede leer una introducción a estos elementos en el artículo: Introducción a la monitorización con Prometheus y Grafana.

La propia instalación de prometheus_blackbox_exporter es muy sencilla porque se trata de un único ejecutable que podemos descargar o, mejor todavía, instalar desde el gestor de paquetes de nuestra distribución para contar con la correspondiente unidad de systemd para controlar el servicio.

Por ejemplo en Ubuntu bastará con

apt install prometheus-blackbox-exporter

La configuración la encontraremos en: /etc/prometheus/blackbox.yml

Un detalle práctico importante es que el programa necesita la capability CAP_NET_RAW para poder funcionar. Así que una vez instalado convendrá ejecutar

setcap cap_net_raw+ep /usr/bin/prometheus-blackbox-exporter

y reiniciar el servicio.

Primer ping a 1.1.1.1

Una vez instalado podremos acceder a prometheus-blackbox-exporter en el puerto :9115. Podremos utilizar cualquier navegador para hacer una prueba.

La URL a escribir en el navegador (suponiendo que prometheus-blackbox-exporter esté en la IP 192.168.0.18) para hacer un ping a 1.1.1.1 sería:

http://192.168.0.18:9115/probe?module=icmp&target=1.1.1.1

Y las métricas devueltas podrían ser:

# HELP probe_dns_lookup_time_seconds Returns the time taken for probe dns lookup in seconds
# TYPE probe_dns_lookup_time_seconds gauge
probe_dns_lookup_time_seconds 2.3423e-05
# HELP probe_duration_seconds Returns how long the probe took to complete in seconds
# TYPE probe_duration_seconds gauge
probe_duration_seconds 0.014664308
# HELP probe_icmp_duration_seconds Duration of icmp request by phase
# TYPE probe_icmp_duration_seconds gauge
probe_icmp_duration_seconds{phase="resolve"} 2.3423e-05
probe_icmp_duration_seconds{phase="rtt"} 0.014213809
probe_icmp_duration_seconds{phase="setup"} 0.000207603
# HELP probe_icmp_reply_hop_limit Replied packet hop limit (TTL for ipv4)
# TYPE probe_icmp_reply_hop_limit gauge
probe_icmp_reply_hop_limit 57
# HELP probe_ip_addr_hash Specifies the hash of IP address. It's useful to detect if the IP address changes.
# TYPE probe_ip_addr_hash gauge
probe_ip_addr_hash 3.57429369e+08
# HELP probe_ip_protocol Specifies whether probe ip protocol is IP4 or IP6
# TYPE probe_ip_protocol gauge
probe_ip_protocol 4
# HELP probe_success Displays whether or not the probe was a success
# TYPE probe_success gauge
probe_success 1

En este caso la métrica probe_success (con valor 1) nos indica que el ping ha funcionado y probe_duration_seconds nos indica que lo ha hecho en 14.6 ms.

Configuración de un trabajo en prometheus

Aunque se pueda utilizar el navegador para probar nuestro exportador finalmente tendremos que configurar un trabajo en prometheus para que de forma periódica se hagan las peticiones que nos interesa registrar.

La definición en la configuración de prometheus de un trabajo que cada 15s pruebe con ping la conectividad a 3 equipos

  # Job para realizar ping a través de blackbox-exporter
- job_name: "ping-servidores"
scrape_interval: 15s
metrics_path: /probe
params:
module: [icmp] # Usa el módulo ICMP definido en blackbox-exporter
static_configs:
- targets: # Direcciones a las que se hace ping
- "192.168.0.7" # Osgiliath
- "192.168.0.10" # Círdan
- "192.168.240.1" # Círdan en la wifi
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.0.18:9115 # Dirección del blackbox-exporter

Importar un dashboard para prometheus-node-exporter

Finalmente podremos importar en grafana cualquiera de los dashboards que ya están preparados.

En el instituto hemos pasado a utilizar: https://grafana.com/grafana/dashboards/20338-blackbox-exporter-icmp/

Que muestra el resultado de las pruebas utilizando un heatmap:

ping-heatmap.webp

Y la variación de la latencia para cada destino:

latencia-ping.webp

Más información: