Introducción a Prometheus Blackbox Exporter
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:
Y la variación de la latencia para cada destino:
Más información: