grafana
- devops
- monitoreo
- prometheus
- Data Science
- Docker
- hub.docker.com/r/grafana/grafana
Introducción
Grafana es una plataforma de observabilidad diseñada para visualizar, correlacionar y analizar datos provenientes de métricas, logs, trazas y sistemas externos. Su principal fortaleza es la capacidad de construir dashboards avanzados y unificar múltiples fuentes de datos en un mismo panel. Forma parte de un ecosistema modular que incluye herramientas como Prometheus, Loki, Mimir, Tempo, y Alloy, lo que permite construir soluciones de monitoreo completas, escalables y adaptadas a arquitecturas modernas como microservicios y Kubernetes.
- hub.docker.com/r/grafana/grafana
Ofrece:
- Integración con decenas de orígenes de datos.
- Dashboards altamente personalizables.
- Consultas avanzadas mediante PromQL / LogQL.
- Alertas integradas.
- Fácil despliegue mediante Docker o Kubernetes.
Conceptos Clave
- Métricas
- Datos numéricos que representan el estado y rendimiento de un servicio, sistema o aplicación.
- Se suelen capturar mediante Prometheus, Grafana Agent, Alloy, etc.
- Útiles para dashboards, alertas y análisis de tendencias.
- Telemetría
- Conjunto de métricas, logs y trazas.
- Permite observabilidad completa.
- Suele gestionarse mediante el stack: Grafana + Prometheus + Loki + Tempo (incluir si lo usas).
- Logging
- Registros textuales generados por aplicaciones y servicios.
- Grafana se integra con Loki para ofrecer consulta eficiente y escalable.
- Puertos habituales
- 3000 → Interfaz web de Grafana.
- 9090 → Prometheus (si formas stack con él).
- 3100 → Loki (ingestión/query logs).
- 9009 / 8080+ → Servicios anexos (Mimir, Tempo, Alloy según despliegue).
Componentes y Servicios del Ecosistema Grafana
- Mimir (Métricas)
- Sistema de almacenamiento horizontalmente escalable para métricas de Prometheus.
- Permite ingestión de alto volumen, retención prolongada y clustering distribuido.
- Ideal para ambientes multi-tenant o infra de gran escala.
-
[Grafana Mimir documentation Grafana Mimir documentation](https://grafana.com/docs/mimir/latest/) -
[Get started with Grafana Mimir Grafana Mimir documentation](https://grafana.com/docs/mimir/latest/get-started/)
-
- Loki (Logs)
- Sistema de logs indexado por etiquetas, altamente eficiente en almacenamiento.
- Diseño inspirado en Prometheus.
- Soporta consultas mediante LogQL.
- Logs Grafana Loki
-
[Get started with Grafana Loki Grafana Loki documentation](https://grafana.com/docs/loki/latest/get-started/)
- Alloy (Agente)
- Agente moderno de observabilidad que reemplaza y unifica funciones de Promtail, Agent y otros.
- Permite pipelines personalizadas para logs, métricas y telemetría.
- Soporta ingestión, transformación y envío hacia Loki, Mimir, Prometheus u otros.
- Ideal para despliegues en contenedores y Kubernetes.
-
[Grafana Alloy Grafana Alloy documentation](https://grafana.com/docs/alloy/latest/) -
[Run Grafana Alloy in a Docker container Grafana Alloy documentation](https://grafana.com/docs/alloy/latest/set-up/install/docker/)
-
Deploy con Docker
docker-compose básico para Grafana
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
grafana_data:
`
docker-compose para Loki + Promtail + Grafana
services:
loki:
image: grafana/loki:latest
command: -config.file=/etc/loki/local-config.yaml
ports:
- "3100:3100"
promtail:
image: grafana/promtail:latest
volumes:
- /var/log:/var/log
- ./promtail-config.yaml:/etc/promtail/config.yaml
command: -config.file=/etc/promtail/config.yaml
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
depends_on:
- loki
docker-compose para Mimir (mínimo)
services:
mimir:
image: grafana/mimir:latest
ports:
- "9009:9009"
volumes:
- ./mimir.yaml:/etc/mimir/mimir.yaml
command: -config.file=/etc/mimir/mimir.yaml
Consultas y Lenguajes
- PromQL
- Lenguaje de consultas para métricas en Prometheus/Mimir.
- Permite consultas temporales, agregaciones y cálculos derivados.
- LogQL
- Lenguaje de Loki para consultar logs.
- Similar a PromQL pero adaptado a flujos de texto.
- Grafana dashboards JSON
- Dashboards versionables mediante Git.
- Permiten importar/exportar definiciones completas en JSON.
Integraciones Comunes
- Kubernetes (K8s)
- Mimir + Loki + Alloy como stack de observabilidad moderno.
- Dashboards listos en Grafana para nodos, pods, ingress, redes.
- Nube
- AWS CloudWatch, Azure Monitor, GCP Monitoring.
- Pipelines CI/CD
- Alertas automatizadas basadas en métricas de performance o uso.
Videos
- Logs: Grafana LOKI, instalación y configuración - YouTube
Guía de Código para Lenguajes y Consultas en Grafana (PromQL, LogQL y JSON de Dashboards)
Introducción
Esta guía reúne ejemplos prácticos de los lenguajes más utilizados dentro del ecosistema de Grafana:
- PromQL para consultar métricas.
- LogQL para consultas de logs en Loki.
- Dashboards JSON para versionado e infraestructura como código.
Todos los bloques de código están separados por headings propios para facilitar la lectura.
PromQL — Consultas de Métricas
Selección Básica de Métricas
# Métrica simple
node_cpu_seconds_total
# Filtrar por etiquetas
node_cpu_seconds_total{mode="idle"}
# Filtrar por múltiples etiquetas
http_requests_total{job="api", status="500"}
`
Agregaciones
# Promedio de uso de CPU por instancia
avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance)
# Suma total de peticiones HTTP
sum(rate(http_requests_total[1m]))
# Máximo de uso de memoria por servicio
max(node_memory_Active_bytes) by (service)
Rangos Temporales
# CPU idle en los últimos 10m
node_cpu_seconds_total{mode="idle"}[10m]
# Tasa de peticiones por minuto
rate(http_requests_total[1m])
Alertas en PromQL (para Alertmanager)
# Alerta: CPU sobre el 90%
avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance) > 0.9
LogQL — Consultas de Logs en Loki
Selección Básica
# Logs sin filtros
{job="nginx"}
# Filtrar por etiqueta + substring
{job="backend"} |= "error"
# Filtro negativo
{job="backend"} != "debug"
Expresiones con Operadores
# Contiene "timeout" o "failed"
{app="api"} |= "timeout" |= "failed"
# Filtra logs que NO contienen una palabra
{app="payments"} != "INFO"
Búsqueda con Expresiones Regulares
# Coincidencia de patrón de IP
{job="nginx"} |~ "(\\d+\\.){3}\\d+"
Parsing y Extracción
# Extraer valores usando patrones
{app="api"}
| json
| line_format "user={.user_id} status={.status}"
Métricas Derivadas desde Logs
# Contar errores por minuto
sum(rate({app="backend"} |= "error" [1m])) by (instance)
# Latencia promedio analizada desde logs JSON
avg_over_time(({app="api"} | json | unwrap duration)[5m])
Dashboards JSON — Infraestructura como Código
Ejemplo de Panel Sencillo
{
"title": "Uso de CPU",
"type": "timeseries",
"targets": [
{
"expr": "avg(rate(node_cpu_seconds_total{mode!=\"idle\"}[5m])) by (instance)",
"legendFormat": "{{instance}}"
}
]
}
Dashboard Completo Mínimo
{
"dashboard": {
"id": null,
"title": "Dashboard de Ejemplo",
"panels": [
{
"type": "timeseries",
"title": "CPU por instancia",
"targets": [
{
"expr": "rate(node_cpu_seconds_total{mode!=\"idle\"}[2m])",
"legendFormat": "{{instance}}"
}
],
"gridPos": { "x": 0, "y": 0, "w": 12, "h": 8 }
}
]
},
"overwrite": true
}
Variables de Dashboard
{
"name": "instance",
"type": "query",
"query": "label_values(node_cpu_seconds_total, instance)",
"includeAll": true
}
Ejemplos Combinados en Paneles
Métrica + LogQL como series superpuestas
{
"type": "timeseries",
"title": "Errores vs Requests",
"targets": [
{
"expr": "sum(rate(http_requests_total{status=\"500\"}[5m]))",
"legendFormat": "Errores 500"
},
{
"expr": "sum(rate({app=\"api\"} |= \"error\" [5m]))",
"legendFormat": "Errores LogQL"
}
]
}
Plantillas Útiles
Plantilla para Panel de Logs
{
"type": "logs",
"title": "Logs del Backend",
"targets": [
{
"expr": "{app=\"backend\"}"
}
]
}
Panel de Estado (Stat)
{
"type": "stat",
"title": "Requests por minuto",
"targets": [
{
"expr": "sum(rate(http_requests_total[1m]))"
}
]
}
Referencias Rápidas
- PromQL: Selecciona métricas, filtra por etiquetas, aplica funciones → dashboards/alertas.
- LogQL: Filtra logs, aplica parsers, deriva métricas desde logs.
- Dashboards JSON: Infra as code, versionable, reproducible.
¿Te gusta este contenido? Suscríbete vía RSS