Grafana
Grafana es la herramienta de visualización de métricas más popular en el ecosistema DevOps. Mientras que Prometheus se encarga de recopilar y almacenar datos de rendimiento, Grafana transforma esos números en dashboards interactivos y visualmente intuitivos que cualquier miembro del equipo puede interpretar de un vistazo, sin necesidad de escribir consultas PromQL.
En este módulo aprenderás a instalar Grafana, conectarla con Prometheus, crear dashboards personalizados y reutilizar plantillas de la comunidad. También exploraremos Netdata como una alternativa más ligera para monitorización local.
[!NOTE] Repositorio de ejemplos Todos los ejemplos de este tema se encuentran en el repositorio del módulo:
Terminal window git clone https://github.com/josepgarcia/monitoring-prometheus-graphanacd monitoring-prometheus-graphana
1. Instalación con Docker Compose
Section titled “1. Instalación con Docker Compose”Para que Grafana funcione, necesitamos un stack de servicios interconectados: Prometheus (que recopila datos), Grafana (que los visualiza), Node Exporter (que proporciona métricas del host) y cAdvisor (que expone métricas de contenedores Docker).
Añadimos Grafana al stack de Prometheus del tema anterior en un único archivo docker-compose.yaml:
# docker-compose.yaml (stack completo)services: prometheus: image: prom/prometheus:latest ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana: image: grafana/grafana:latest ports: - "3000:3000" environment: # Credenciales del administrador - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin volumes: # Sin este volumen, los dashboards se pierden al reiniciar el contenedor - grafana-data:/var/lib/grafana
node-exporter: image: prom/node-exporter:latest ports: - "9100:9100"
cadvisor: image: gcr.io/cadvisor/cadvisor:latest ports: - "8080:8080" privileged: true
volumes: grafana-data:# Levantar el stack completodocker compose up -d
# Acceder a Grafana# http://localhost:3000 (admin / admin)2. Conectar Grafana con Prometheus (Data Source)
Section titled “2. Conectar Grafana con Prometheus (Data Source)”Un data source es la forma en que Grafana accede a los datos. Es como decirle: “aquí es donde puedes consultar las métricas”. Sin configurar un data source, Grafana no tiene nada que visualizar.
Pasos para configurar Prometheus como data source
Section titled “Pasos para configurar Prometheus como data source”- Accede a Grafana: abre tu navegador en
http://localhost:3000e inicia sesión con usuarioadminy contraseñaadmin - Navega a Data Sources: en el menú lateral, haz clic en Connections → Data Sources
- Añade una nueva fuente: pulsa el botón Add new data source (azul, esquina superior derecha)
- Selecciona Prometheus: elige Prometheus de la lista de opciones disponibles
- Configura la URL: en el campo URL introduce
http://prometheus:9090(importante: usa el nombre del servicio Docker, nolocalhost) - Prueba la conexión: pulsa Save & Test — deberías ver un mensaje verde que diga “Data source is working”
3. Crear tu primer dashboard
Section titled “3. Crear tu primer dashboard”Un dashboard es una pantalla compuesta de paneles interactivos. Cada panel representa una métrica específica usando una visualización (gráfico de líneas, número destacado, indicador de porcentaje, tabla, etc.) basada en una consulta PromQL contra Prometheus.
Pasos para crear un nuevo dashboard
Section titled “Pasos para crear un nuevo dashboard”- Abre la página de dashboards: en el menú lateral, haz clic en Dashboards
- Crea uno nuevo: pulsa el botón + New Dashboard (esquina superior derecha)
- Añade tu primer panel: pulsa + Add visualization (botón azul en el centro)
- Selecciona la fuente de datos: elige Prometheus en el menú desplegable (datos source)
- Escribe una consulta PromQL: en el editor de consultas (abajo), pega una de las consultas de ejemplo
- Configura la visualización: en la columna derecha, selecciona el tipo de gráfico (Time series, Stat, Gauge, etc.)
- Guarda el panel: pulsa Apply (botón azul) para confirmar y añadirlo al dashboard
Verás cómo en tiempo real el panel muestra datos si Prometheus está correctamente configurado.
Consultas PromQL para los primeros paneles
Section titled “Consultas PromQL para los primeros paneles”A continuación, encontrarás consultas listas para usar. Solo tienes que copiar y pegarlas en el editor de Grafana. Cada una está comentada para explicar qué mide.
# Panel 1: CPU de cada contenedor (Time series)# Muestra cómo evoluciona el porcentaje de CPU de cada contenedor a lo largo del tiemposum(rate(container_cpu_usage_seconds_total{name=~".+"}[10m])) by (name) * 100
# Panel 2: Número de contenedores activos (Stat)# Un número grande y visible con el total de contenedores en marcha en este momentocount(count(container_last_seen) by (name))
# Panel 3: Memoria por contenedor en MB (Bar chart)# Compara el uso de memoria (en megabytes) entre todos los contenedores activoscontainer_memory_usage_bytes{name=~".+"} / 1024 / 1024
# Panel 4: Tráfico de red enviado en Mbps (Time series)# Visualiza el ancho de banda de salida de red en megabits por segundorate(container_network_transmit_bytes_total[1m]) * 8 / 1024 / 1024
# Panel 5: CPU del host en % (Gauge de 0 a 100)# Muestra el porcentaje total de CPU usado en la máquina host100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# Panel 6: Memoria disponible del host en GB (Stat)# Cantidad de RAM libre disponible en la máquina hostnode_memory_MemAvailable_bytes / 1024 / 1024 / 1024Consejo práctico: copia cada consulta en el campo PromQL de un nuevo panel, selecciona el tipo de visualización recomendado, y verás los datos en tiempo real.


4. Tipos de visualizaciones en Grafana
Section titled “4. Tipos de visualizaciones en Grafana”Grafana incluye muchas opciones de visualización. Seleccionar el tipo correcto hace que tus datos sean mucho más claros y comprensibles. Aquí están los más importantes para monitorización:
| Tipo | Descripción | Cuándo usarlo | Ejemplo |
|---|---|---|---|
| Time series | Gráfico de líneas que evoluciona en el tiempo | Ver tendencias, cambios, picos de carga | CPU, memoria, tráfico de red |
| Stat | Un número grande y destacado | Mostrar un valor actual importante | Contenedores activos, uptime total |
| Gauge | Indicador circular o lineal (tipo velocímetro) | Mostrar un valor dentro de un rango (0-100%) | CPU%, disco usado%, memoria disponible% |
| Bar chart | Gráfico de barras comparativo | Comparar valores entre instancias o servicios | Memoria por contenedor, peticiones por endpoint |
| Table | Tabla de datos estructurada | Mostrar muchos detalles simultáneamente | Listado de servicios con estado, IPs, puertos |
| Heatmap | Mapa de calor (intensidad de colores) | Ver distribuciones y patrones ocultos | Latencia de peticiones, calor de CPU por hora |
| Logs | Panel de texto en tiempo real | Leer líneas de log vivas mientras ocurren | Logs de aplicación (requiere Loki integrado) |
5. Importar dashboards de la comunidad
Section titled “5. Importar dashboards de la comunidad”Una de las mayores ventajas de Grafana es que no necesitas crear todos los dashboards desde cero. Miles de usuarios y empresas comparten dashboards profesionales, completos y listos para usar.
Ubicación: grafana.com/grafana/dashboards
Pasos para importar un dashboard
Section titled “Pasos para importar un dashboard”- Abre el gestor de dashboards: en el menú lateral, haz clic en Dashboards
- Abre el importador: pulsa New → Import
- Busca el dashboard:
- Opción A: Introduce el ID del dashboard (número de 3-5 dígitos) en el campo “Grafana.com Dashboard”
- Opción B: Pega el JSON completo si lo tienes descargado
- Selecciona el data source: en el desplegable, elige tu Prometheus data source
- Confirma la importación: pulsa Import
En segundos, Grafana creará todos los paneles y empezará a mostrar datos.
Dashboards recomendados para empezar
Section titled “Dashboards recomendados para empezar”| ID | Nombre | Qué monitoriza | Ideal para |
|---|---|---|---|
1860 | Node Exporter Full | CPU, RAM, disco, red, procesos del host | Administradores de sistemas |
193 | Docker monitoring | Métricas de todos los contenedores | Ingenieros DevOps con Docker |
11074 | Node Exporter Dashboard EN | Versión simplificada del host | Principiantes |
893 | Docker and system monitoring | Docker + métricas del host combinadas | Stack mixto (contenedores + host) |
6. Aprovisionamiento automático (Infrastructure as Code)
Section titled “6. Aprovisionamiento automático (Infrastructure as Code)”En desarrollo, configurar dashboards manualmente desde la UI funciona. Pero en producción, esta aproximación tiene problemas: cambios manuales, inconsistencias entre entornos, dificultad para reproducir configuraciones en nuevos servidores.
La solución es el aprovisionamiento automático: define tus data sources y dashboards en archivos YAML/JSON que Grafana carga automáticamente cuando arranca. Es la forma profesional de trabajar.
Data source como código
Section titled “Data source como código”apiVersion: 1
datasources: - name: Prometheus type: prometheus access: proxy # Nombre del servicio Docker, no localhost url: http://prometheus:9090 isDefault: true editable: falseDashboard como código
Section titled “Dashboard como código”apiVersion: 1
providers: - name: 'default' orgId: 1 folder: '' type: file disableDeletion: false updateIntervalSeconds: 10 options: # Carpeta donde están los JSON de los dashboards path: /var/lib/grafana/dashboardsLuego monta los archivos en el docker-compose:
grafana: image: grafana/grafana:latest ports: - "3000:3000" volumes: - grafana-data:/var/lib/grafana # Montar la configuración de aprovisionamiento - ./provisioning:/etc/grafana/provisioning # Montar los JSON de los dashboards - ./dashboards:/var/lib/grafana/dashboards7. Alternativa: Netdata (monitorización autónoma)
Section titled “7. Alternativa: Netdata (monitorización autónoma)”Existe una alternativa a la combinación Prometheus + Grafana: Netdata. Es una herramienta de monitorización autónoma que genera sus propias visualizaciones sin dependencias externas.
Diferencias clave
Section titled “Diferencias clave”| Aspecto | Prometheus + Grafana | Netdata |
|---|---|---|
| Instalación | Requiere 2-3 servicios (Prometheus, Grafana, exporters) | Un único contenedor |
| Configuración | Manual, requiere entender PromQL | Automática, sin configuración |
| Alcance | Centraliza métricas de múltiples hosts | Monitoriza un único host localmente |
| Flexibilidad | Muy personalizable, gran comunidad | Menos flexible, menos opciones |
| Caso de uso | Producción, múltiples servidores, dashboards complejos | Desarrollo, single-node, visión rápida |
Arrancar Netdata
Section titled “Arrancar Netdata”# Desplegar Netdata con Docker en 10 segundosdocker run -d \ --name=netdata \ -p 19999:19999 \ --cap-add SYS_PTRACE \ --security-opt apparmor=unconfined \ netdata/netdata
# Accede a: http://localhost:19999# Verás métricas del host en tiempo real sin configurar nada
¿Cuándo usar cada una?
Section titled “¿Cuándo usar cada una?”Elige Netdata si…
- Necesitas monitorizar un solo servidor o máquina local
- Quieres resultados inmediatos sin configuración
- Trabajas en desarrollo local
Elige Prometheus + Grafana si…
- Necesitas monitorizar múltiples hosts/servicios de forma centralizada
- Quieres crear dashboards personalizados y profesionales
- Trabajas en producción y necesitas escalabilidad
Errores comunes y cómo resolverlos
Section titled “Errores comunes y cómo resolverlos”❌ Error: “Los dashboards desaparecen al reiniciar Grafana”
Section titled “❌ Error: “Los dashboards desaparecen al reiniciar Grafana””Síntoma: Creas un dashboard hermoso, lo guardas, pero cuando reinicia el contenedor de Grafana, desaparece.
Causa: Falta el volumen persistente. Sin él, los datos se almacenan solo en la memoria del contenedor.
Solución: Añade un volumen en el docker-compose.yaml:
# ❌ INCORRECTO: sin volumen persistentegrafana: image: grafana/grafana ports: - "3000:3000" # Los dashboards se pierden aquí ⚠️
# ✅ CORRECTO: con volumen para persistenciagrafana: image: grafana/grafana ports: - "3000:3000" volumes: - grafana-data:/var/lib/grafana # ← Esto guarda los dashboards
volumes: grafana-data: # Nombre del volumen DockerLuego, reinicia los contenedores: docker compose down && docker compose up -d
❌ Error: “Data source Prometheus shows ‘No Data’ / connection refused”
Section titled “❌ Error: “Data source Prometheus shows ‘No Data’ / connection refused””Síntoma: En Grafana, al hacer clic en Test Connection para el data source, ves un mensaje rojo de error.
Causa: Generalmente es por uno de estos problemas:
- Prometheus no está corriendo: verifica con
docker psque el contenedor de Prometheus existe y está activo - URL incorrecta: usaste
http://localhost:9090en lugar del nombre del servicio Docker - Prometheus no tiene datos: no está scrapeando correctamente
Solución paso a paso:
# 1. Verifica que todos los contenedores están activosdocker ps | grep prometheus # Debería listar el contenedor de Prometheus
# 2. Entra en Grafana y comprueba la URL del data source# Debe ser: http://prometheus:9090 (NO localhost)
# 3. Verifica que Prometheus está scrapeando datos# Abre en tu navegador: http://localhost:9090/targets# Todos los targets deben estar en estado "UP" (verde)
# 4. Si aún falla, reinicia todo:docker compose downdocker compose up -dEjercicios prácticos
Section titled “Ejercicios prácticos”[!NOTE] 💡 Soluciones disponibles Si te atascas, las soluciones están en el archivo 2.Graphana_SOL.txt del repositorio.
Ej. 1: Instalación y conexión (verificación básica)
Section titled “Ej. 1: Instalación y conexión (verificación básica)”Objetivo: Instalar el stack completo y verificar que Grafana puede conectarse a Prometheus.
Pasos:
- Usa el
docker-compose.yamlde la Sección 1 y levanta el stack:docker compose up -d - Espera 30 segundos a que Prometheus se estabilice
- Abre Grafana en
http://localhost:3000e inicia sesión conadmin / admin - Añade Prometheus como data source (Connections → Data Sources → Add new data source)
- URL:
http://prometheus:9090 - Pulsa “Save & Test” — deberías ver ✅ verde
- URL:
- Verificación: Ve a Explore (icono de brújula) y ejecuta la consulta
up. ¿Cuántos targets aparecen? ¿Todos están en valor1?
Concepto: La métrica up en Prometheus indica si un target está activo (1 = UP, 0 = DOWN).
Ej. 2: Tu primer panel personalizado
Section titled “Ej. 2: Tu primer panel personalizado”Objetivo: Crear un dashboard simple con un panel que muestre cuántos contenedores están corriendo.
Pasos:
- Abre Dashboards → New Dashboard
- Haz clic en + Add visualization
- Selecciona Prometheus como data source
- Copia esta consulta en el editor PromQL:
count(count(container_last_seen) by (name))
- En la columna derecha, selecciona Stat como tipo de visualización
- Configura el panel:
- Title:
Contenedores activos - Units: dejar en blanco
- Title:
- Pulsa Apply para guardar
Resultado esperado: Verás un número grande (3 o 4) en el centro del panel, dependiendo de cuántos contenedores tengas activos.
¿Qué significa?: La métrica container_last_seen emite un valor 1 cuando un contenedor está activo. Al agrupar por nombre y contar, obtenemos el total.
Ej. 3: Gráfico de evolución temporal (Time series)
Section titled “Ej. 3: Gráfico de evolución temporal (Time series)”Objetivo: Añadir un segundo panel que muestre cómo varía la CPU de cada contenedor a lo largo del tiempo.
Pasos:
- En el mismo dashboard, haz clic en + Add visualization (o en la esquina superior derecha del dashboard)
- Selecciona Prometheus como data source
- Copia esta consulta:
sum(rate(container_cpu_usage_seconds_total{name!=""}[5m])) by (name) * 100
- En la columna derecha, selecciona Time series (gráfico de líneas)
- Configura el panel:
- Title:
CPU por contenedor (%) - En la pestaña Field, ajusta Unit a
percent (0-100)
- Title:
- Pulsa Apply
Resultado esperado: Verás un gráfico con varias líneas (una por contenedor) mostrando la CPU en el tiempo.
Análisis: ¿Qué contenedor tiene picos de CPU? ¿Es constante o variable?
Ej. 4: Reutilizar dashboards comunitarios
Section titled “Ej. 4: Reutilizar dashboards comunitarios”Objetivo: Aprender a importar dashboards profesionales de Grafana.com en lugar de crear todo desde cero.
Pasos:
- En Dashboards → New → Import
- En el campo “Find and import dashboards for common applications”, introduce:
1860 - Pulsa Enter o espera a que Grafana cargue la información del dashboard
- En el desplegable de Datasource, selecciona Prometheus
- Pulsa el botón Import
Espera 5 segundos a que cargue. Verás un dashboard completo con muchos paneles automáticamente.
Preguntas de reflexión:
- ¿Cuántos paneles diferentes tiene este dashboard?
- ¿Qué información te parece más valiosa como administrador de sistemas?
- ¿Hay algún panel que ya habías creado manualmente en el ejercicio 3?
Ej. 5: Automatizar la configuración (Infrastructure as Code)
Section titled “Ej. 5: Automatizar la configuración (Infrastructure as Code)”Objetivo: Practicar el aprovisionamiento automático para que Grafana se configure sin intervención manual.
Pasos:
- Crea la carpeta: en tu proyecto, crea
provisioning/datasources/ - Crea el archivo YAML:
provisioning/datasources/prometheus.ymlcon este contenido:apiVersion: 1datasources:- name: Prometheustype: prometheusaccess: proxyurl: http://prometheus:9090isDefault: true - Actualiza el docker-compose.yaml: añade en el servicio
grafana:volumes:- grafana-data:/var/lib/grafana- ./provisioning:/etc/grafana/provisioning # ← Nueva línea - Reinicia el stack:
Terminal window docker compose downdocker compose up -d - Verifica: abre Grafana, ve a Connections → Data Sources. El data source de Prometheus debe estar ahí sin haberlo configurado manualmente.
Concepto clave: Esto es Infrastructure as Code — tu configuración vive en archivos versionables, no en clicks en la UI.
🚀 Proyecto Integral: Dashboard de Monitorización Profesional
Section titled “🚀 Proyecto Integral: Dashboard de Monitorización Profesional”En este proyecto, crearás un dashboard production-ready que monitoriza tanto contenedores Docker como el host.
Objetivo
Section titled “Objetivo”Construir un dashboard con al menos 6 paneles que proporcione una visión completa del estado del sistema en tiempo real.
Paneles a crear
Section titled “Paneles a crear”| Panel | Tipo | Métrica | Descripción |
|---|---|---|---|
| Contenedores activos | Stat | count(count(container_last_seen) by (name)) | Número de contenedores en ejecución |
| CPU por contenedor | Time series | sum(rate(container_cpu_usage_seconds_total{name!=""}[5m])) by (name) * 100 | Evolución de CPU de cada contenedor |
| Memoria por contenedor (MB) | Bar chart | container_memory_usage_bytes{name!=""} / 1024 / 1024 | Consumo de RAM comparado |
| CPU del host (%) | Gauge | 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) | Uso total de CPU del servidor |
| Memoria disponible del host (GB) | Stat | node_memory_MemAvailable_bytes / 1024 / 1024 / 1024 | RAM libre disponible |
| Disco usado del host (%) | Gauge | (node_filesystem_size_bytes{fstype=~"ext4|xfs"} - node_filesystem_free_bytes{fstype=~"ext4|xfs"}) / node_filesystem_size_bytes{fstype=~"ext4|xfs"} * 100 | Porcentaje de disco utilizado |
Requisitos del proyecto
Section titled “Requisitos del proyecto”✅ Estructura: Organiza los 6 paneles en dos filas:
- Fila 1 (arriba): Métricas de contenedores (activos, CPU, memoria)
- Fila 2 (abajo): Métricas del host (CPU, memoria, disco)
✅ Presentación:
- Título del dashboard: algo descriptivo como “Stack Monitoring” o “System Dashboard”
- Cada panel con título y unidades apropiadas
- Colores coherentes
✅ Exportación: Una vez terminado, exporta el dashboard como JSON:
- En el dashboard, haz clic en Share (arriba a la derecha)
- Selecciona Export → Save to file
- Guarda el archivo en tu repositorio con nombre descriptivo
Consejos prácticos
Section titled “Consejos prácticos”💡 Ahorra tiempo duplicando paneles: Crea el primero manualmente, luego:
- Haz clic en el panel → More options (tres puntos) → Duplicate
- Edita la consulta y el tipo de visualización del duplicado
💡 Configura thresholds para alertas visuales: En la columna derecha de cada panel, usa la pestaña Thresholds para colorear valores:
- Rojo si CPU > 80%
- Amarillo si CPU > 50%
💡 Añade descripciones: En cada panel, en la pestaña Description, añade una breve explicación de qué se mide y por qué es importante.
Entrega
Section titled “Entrega”Cuando termines, tendrás:
- Un dashboard funcional en Grafana con 6 paneles
- Un archivo JSON exportado, versionable en Git
- Experiencia práctica en monitorización real
📚 Referencias y recursos para profundizar
Section titled “📚 Referencias y recursos para profundizar”Documentación oficial
Section titled “Documentación oficial”- Grafana Documentation — Guía completa oficial (en inglés)
- Prometheus Documentation — Documentación de Prometheus (métricas y PromQL)
Dashboards y ejemplos
Section titled “Dashboards y ejemplos”- Grafana Dashboards Community — Repositorio de miles de dashboards compartidos. Búscalo por tecnología
- Node Exporter Dashboard — Dashboard profesional para monitorizar hosts Linux
Guías paso a paso
Section titled “Guías paso a paso”- Get started with Grafana + Prometheus — Guía oficial introductoria
- Grafana Provisioning Guide — Cómo automatizar configuraciones
Alternativas
Section titled “Alternativas”- Netdata GitHub — Repositorio oficial de Netdata
Artículos prácticos en Medium y blogs
Section titled “Artículos prácticos en Medium y blogs”¿Qué viene después? Ahora que dominas Prometheus + Grafana, puedes:
- Añadir alertas automáticas (Alertmanager)
- Exportar métricas de aplicaciones personalizadas (crear exporters)
- Centralizar logs con Loki (logging distribuido)
- Automatizar todo con Kubernetes y Prometheus Operator