Grafana: Visualización y monitoreo de datos para métricas en tiempo real
Introducción
Grafana es una plataforma de visualización orientada a métricas y series temporales. Dentro del stack se utiliza como capa de visualización sobre Prometheus, permitiendo construir dashboards, definir consultas sobre métricas del sistema y establecer alertas básicas.
El despliegue documentado aquí forma parte de un stack de monitorización autocontenido basado en Docker. Prometheus actúa como motor de recolección y almacenamiento de métricas, mientras que Grafana proporciona la interfaz de análisis y visualización. Node Exporter expone métricas del host.
El objetivo no es montar una plataforma de observabilidad completa tipo enterprise, sino disponer de visibilidad clara del estado del servidor y servicios críticos con una arquitectura simple y mantenible.
Enfoque general / Arquitectura
El stack se compone de tres servicios principales:
- Prometheus: recolecta métricas.
- Node Exporter: expone métricas del host.
- Grafana: visualiza los datos almacenados en Prometheus.
Todos los servicios comparten una red Docker externa dedicada (Grafana_NET) para permitir resolución DNS interna por nombre de servicio. No se utilizan IPs estáticas ni network_mode: host, lo que hace el despliegue portable y reproducible en cualquier host.
Prometheus realiza el scrape directamente contra node-exporter:9100 usando resolución interna de Docker.
Requisitos previos
- Docker y Docker Compose instalados.
Desarrollo
Qué se hizo y por qué
- Se utiliza la imagen grafana/grafana-oss para mantener el stack completamente open source.
- El contenedor se ejecuta con UID/GID
1000:1000para evitar conflictos de permisos en el volumen persistente. - Los datos se almacenan en un volumen local (
./data/grafana) para garantizar persistencia tras reinicios o recreaciones. - Se instala automáticamente el plugin
grafana-clock-panelcomo ejemplo de extensión. - El puerto 3000 del contenedor se expone como 33310 para evitar colisiones con otros servicios.
- No se fija
GF_SERVER_ROOT_URLen la configuración base para mantener el despliegue genérico; se habilita únicamente si se expone tras proxy inverso.
En Prometheus:
- Se define un
scrape_intervalde 15 segundos. - El objetivo del job
nodeapunta anode-exporter:9100, evitando dependencias de IPs internas. - El almacenamiento TSDB se persiste en volumen dedicado.
En Node Exporter:
- Se monta el root del host en modo lectura para exponer métricas reales del sistema.
- Se evita
network_mode: hostpara mantener coherencia de red y portabilidad.
Configuración utilizada (solo enlaces)
El stack completo (Grafana, Prometheus y configuración asociada) está versionado en Gitea:
Incluye:
docker-compose.ymlprometheus.yml- Estructura de volúmenes
Validación
Comprobaciones mínimas tras el despliegue:
- Grafana accesible en
http://<host>:33310. - Prometheus accesible en
http://<host>:33320. - En Prometheus → Status → Targets, el job
nodedebe aparecer comoUP. - En Grafana, al añadir Prometheus como Data Source, la conexión debe validarse correctamente.
- Métricas básicas como
node_cpu_seconds_totaldeben devolver resultados en el explorador de consultas.
Decisiones importantes
- Eliminación de IPs hardcodeadas para evitar dependencia del entorno.
- Uso de red Docker dedicada en lugar de
host. - Persistencia explícita de datos para evitar pérdida de históricos.
- Stack deliberadamente minimalista.
Resumen breve
Stack de monitorización basado en Docker compuesto por Grafana, Prometheus y Node Exporter.
Arquitectura simple, sin IPs fijas ni dependencias del host, portable y suficiente para monitorización de servidor y servicios básicos.