DataSkills Hub

Grafana

Grafana es la plataforma open-source de análisis y monitoreo para infraestructura y datos. Proporciona dashboards interactivos para visualizar métricas conectando con Prometheus (métricas) y Loki (logs), permitiendo monitoreo 24/7 de componentes como Trino, Spark, Kafka y NiFi.

#Getting Started

#Acceder a Grafana

Abrir la interfaz web

<tu-url>

Acceder con credenciales provistos por el equipo de plataforma. Usuario por defecto: admin.

#Módulos principales de la UI

Sección Descripción
Dashboards Ver, crear y editar dashboards de monitoreo
Explore Explorador visual para consultar métricas/logs
Alerts Gestión de alertas y notificaciones
Data Sources Conexiones a Prometheus, Loki, etc. (admin)
Settings Configuración global, usuarios, roles, plugins

#Atajos de teclado

Atajo Acción
Ctrl + K Abrir búsqueda/navegación rápida
? Ver todos los atajos disponibles
d Abrir selector de dashboard
s Abrir selector de series (en dashboards)
g Ir a panel ganador (dashboard favorito)

#Dashboards

#Crear un Dashboard

  1. Dashboards+ CreateDashboard
  2. Clic en Add a new panel o Add a panel from the panel library
  3. Seleccionar la fuente de datos (Prometheus, Loki)
  4. Escribir la query (PromQL o LogQL)
  5. Configurar visualización: gráfico, tabla, gauge, etc.
  6. Clic en Save y nombrar el dashboard

#Paneles más usados

Panel Type Uso recomendado
Time series Evolución de métricas en el tiempo
Stat Valor único con formato condicional
Gauge Indicador visual de rango (0-100%)
Bar chart Comparativa por categoría
Table Datos tabulares con filtros y orden
Log panel Visualización de logs de Loki
Pie chart Distribución porcentual
Heatmap Intensidad de eventos por hora/día

#Variables de Dashboard (Templating)

Crear filtros dinámicos para reutilizar dashboards:

  1. Dashboard settings (⚙️) → Variables+ Add variable
  2. Configurar:
Name:          environment
Type:          Query
Data source:   Prometheus
Query:         label_values(up, env)

Usar en queries con $environment:

up{env="$environment"}

#Prometheus Queries

#PromQL básico (sintaxis)

metric_name                    # Métrica simple
metric_name{label="value"}     # Con filtro de etiqueta
metric_name{env="prod"}        # Múltiples etiquetas
rate(requests_total[5m])       # Tasa de cambio en 5 minutos
sum(rate(metric[5m])) by (job) # Agregación por grupo

#Ejemplos de queries

Monitoreo de Trino

# Queries activas en Trino
active_queries{cluster="<tu-url>"}

# Tiempo de ejecución promedio
histogram_quantile(0.95, rate(query_execution_time_seconds_bucket[5m]))

# Nodos Trino disponibles
up{job="trino"}

Monitoreo de Kafka

# Lag de consumer groups
kafka_consumer_lag{group="analytics-pipeline"}

# Rate de mensajes por segundo
rate(kafka_messages_in_total[1m])

# Replicas sincronizadas por topic
kafka_topic_partitions{topic="events"}

Monitoreo de Spark

# Tasks ejecutando
spark_executor_task_time

# Memoria usada por executor
spark_executor_memory_used_bytes

#Loki Queries (Logs)

#LogQL básico (sintaxis)

{job="trino"}                    # Logs del job Trino
{env="prod"} | "error"           # Filtrar por patrón
{job="nifi"} | json              # Parsear JSON
{cluster="prod"} | logfmt         # Parsear logfmt

#Ejemplos de queries

Errores en Trino

{job="trino"} | "error" | json | level="ERROR"

Logs de ejecución de Spark

{job="spark-driver"} |= "task failed" | json

Logs de NiFi

{job="nifi"} | "ERROR" | logfmt

#Alerting

#Crear una Alert Rule

  1. Dashboards → seleccionar panel → Edit
  2. Tab Alert+ Create Alert
  3. Configurar:
Condition:     avg() of query result > 0.8
For:           1m (tiempo antes de dispara)
Evaluate every: 30s (frecuencia de check)
  1. Notifications → seleccionar canal (Slack, Email, etc.)

#Alert de CPU en cluster

Nombre:     High CPU on Data Nodes
Condition:  100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100) > 80
For:        5m
Notify to:  #data-platform-alerts (Slack)

#Alert de lag en Kafka

Nombre:     Kafka Consumer Lag Critical
Condition:  kafka_consumer_lag{group="analytics-pipeline"} > 100000
For:        2m
Notify to:  PagerDuty

#Data Sources

#Conectar Prometheus

  1. Settings › Data Sources+ Add data source
  2. Seleccionar Prometheus
  3. Configurar:
Name:   Prometheus
URL:    <tu-url>
  1. Test → debe responder "datasource is working"

#Conectar Loki

  1. Settings › Data Sources+ Add data source
  2. Seleccionar Loki
  3. Configurar:
Name:   Loki
URL:    <tu-url>
  1. Test → debe responder "Data source is working"

#Mejores Prácticas

#Convenciones para Dashboards

Convención Descripción
Nombre [Componente] - [Tipo Monitoreo]
Ejemplo Trino - Query Performance o Kafka - Broker Health
Tags Aplicar tags por equipo: platform, data-eng, infra
Refresh Rate 30s para dashboards operacionales, 5m para históricos
Descripción Incluir información de cómo leer e interpretar métricas

#Estructura de Alertas por Criticidad

Severidad Threshold Notificación Ejemplo
CRITICAL Requiere acción inmediata PagerDuty + #critical-alerts Componente down (up = 0)
WARNING Monitorear, prepararse #data-platform-alerts CPU > 80%, Lag > 50K msgs
INFO Informativo Slack (no urgente) Deploy iniciado, caché limpio

#Panel Recommendations

Dashboard de infraestructura crítica debe incluir:

  • Status de nodos (Prometheus up metric)
  • CPU y memoria agregada por cluster
  • Network I/O (bytes in/out por segundo)
  • Disk space por nodo
  • Status de servicios clave (Trino coordinators, Spark masters)

Dashboard de pipelines de datos debe incluir:

  • Tasa de procesamiento (eventos/segundo)
  • Latencia p95 y p99
  • Error rate (fallos / total)
  • Backpressure / queue depth (si aplica)
  • Última ejecución exitosa de cada job

#Troubleshooting

#Dashboard no carga datos

  • Verificar que la data source esté activa: Settings › Data SourcesTest
  • Revisar logs de Prometheus/Loki: docker logs prometheus o docker logs loki
  • Verificar firewall: telnet <tu-url> <puerto>

#Alert no dispara

  • Revisar query en Alerts & Notifications › Alert rules
  • Verificar que el resultado sea numérico (PromQL no debe retornar vector vacío)
  • Comprobar canal de notificación: Notification channelsTest

#Query devuelve error "no data"

  • Verificar que la métrica existe en Prometheus: acceder a <tu-url>
  • Usar Explore en Grafana para testear PromQL antes de usarla en un panel
  • Revisar labels: label_values(metric_name, label_key)

#Also see