
Métricas de Ping con Prometheus y Grafana
Un post sencillito, que yo creo que puede aportar en cualquier ámbito, y no es más que lanzar pings 😊😂, a ver me río, pero proporciona información interesante en muchas ocasiones. En este post veremos cómo lanzar pings a direcciones IP internas/externas que nos interese conocer su latencia, si hay cortes… y comprenderlo visualmente con Grafana.
Si nos interesase conocer en tiempo real (a nivel de 1 segundo, 5…) la conectividad a determinadas direcciones IP, para saber mínimamente cuando tengamos un problema de red, sea que no llegamos a Internet, un servicio que tengamos publicado, o unas direcciones IPs internas de delegaciones, datacenter… Direcciones IP de las cuales nos interesará conocer (i) si se caen paquetes y (ii) su tiempo de respuesta (para conocer latencias). En este post veremos cómo de una manera muy sencilla y rápida lo tenemos montado.
Como os comenté, este año pretendo enfatizar un poco este tipo de temas que todavía no hemos tocado mucho en el blog, sobre todo los que son sencillotes de desplegar y aplican a una mayoría 🙂 Así que empezamos! Dando por hecho que ya tenemos en nuestro entorno desplegado un Prometheus y un Grafana, podemos comenzar.
La forma más efectiva será desplegando otro contenedor de Docker, en este caso usaremos ‘ping-exporter’ que en un periquete nos permitirá hacer pings y visualizar sus datos en un dashboard de Grafana, creamos la carpeta y nos metemos:
cd mkdir ping-exporter mkdir ping-exporter/config cd ping-exporter
Creamos el fichero de configuración de docker compose para este contenedor con ‘nano docker-compose.yaml’
version: '3.9' services: ping_exporter: image: czerwonk/ping_exporter container_name: ping_exporter volumes: - './config:/config:ro' ports: - '9427:9427' restart: unless-stopped networks: ping_exporter_default: networks: ping_exporter_default: driver: bridge ipam: config: - subnet: XX.XX.XX.0/24 gateway: XX.XX.XX.1
Donde creará un contenedor llamado ping_exporter, basado en la imagen de ping_exporter, que montará la carpeta de config y expondrá las métricas de los pings en el puerto 9427tcp, particularidades mías que me gusta definir rangos de red específicos, si no, omití las últimas 4 líneas.
El siguiente paso, será crear el fichero de configuración para ping_exporter, os dejo este ejemplo:
targets: - 8.8.8.8 - 1.1.1.1 - 192.168.0.1 - 192.168.1.1 ping: interval: 5s timeout: 5s history-size: 42 payload-size: 120 options: disableIPv6: true
Como veis, dentro de la sección ‘targets’ podremos añadir las direcciones IP a las que queremos hacer pings. Así como los parámetros por defecto, como sea hacer los pings cada 5 segundos, definir un timeout, el tamaño… Antes de nada, que se me olvida, os dejo el enlace oficial del proyecto por si queréis tener más información.
Ya con esto lo tenemos, no queda más que desplegar el contenedor y que se ponga a funcionar, para ello:
sudo docker compose up -d
Una vez desplegado el contenedor, podremos comprobar que ya estará exponiendo las métricas de los PINGs, para ello, si nos conectamos desde un navegador con http a la dirección IP del Docker, al puerto del ping_exporter (9427tcp por defecto) y ponemos el final de la URL ‘/metrics’.
Ahora lo que nos queda, será indicarle a Prometheus que ingeste dichas métricas, para ello, será tan sencillo como editar el fichero de configuración de Prometheus (por ejemplo: ‘nano ~/prometheus/prometheus/prometheus.yml’ y le añadimos un job para que se conecte a la IP y puerto del ping_exporter:
... - job_name: ping-prometheus scrape_interval: 5s scrape_timeout: 5s static_configs: - targets: - DIRECCION_IP_DOCKER:PUERTO_PING_EXPORTER ...
Por defecto conectará cada 5 segundos.
Y sin olvidar reiniciar el contenedor de Prometheus para que recargue la configuración:
sudo docker restart prometheus
Y listo, ya lo tenemos!! ¿Qué nos queda? Pues verlo en Grafana 😊. Para ello, dando por hecho que seguimos los pasos del documento anterior, tenemos ya desplegado Grafana y creado el data source contra Prometheus, pues no es más que tendremos que importar un dashboard que nos guste y haya hecho la comunidad, por ejemplo os recomiendo este ID: 19761. Así que en Grafana, no será más que darle en Dashboards > New > Import > Pegáis el ID y se importará el dashboard, os solicitará que le pongáis un nombre al Dashboard y escoger el conector de Prometheus. A partir de ahí listo!
A partir de ahí podéis personalizar el dashboard a vuestro gusto si lo consideráis, o lo que necesitéis. Pero vaya, veréis que en un momento tenéis un dashboard donde será sencillo interpretar si alguna dirección IP ha tenido un problema durante algún periodo de tiempo particular, así como si se caen paquetes o queremos ver los tiempos de latencia, mejores tiempos, medias o peores resultados. Al gusto los colores que son simples pings.
En alguna ocasión, gracias a este tipo de información, hemos podido determinar cuando una WAN iba mal, o cuando hay un problema de electrónica de red, y a partir de un switch se caen paquetes, ya que puede que tenga algún problema/carga…
Como diría Kristian Pielholf en Bricomanía… fácil, sencillo y para toda la familia 🤣, espero como siempre que os haya resultado interesante y con tips de estos y de otro tipo podamos conocer y dominar nuestras infraestructuras.
Os mando un abrazo, portaros bien 😉