DataSkills Hub

Prometheus

Prometheus es el toolkit open-source de monitoreo y alerting para métricas de tiempo real. Recolecta métricas desde componentes de plataforma (Trino, Spark, Kafka, NiFi, Airflow, Ceph) y sirve como fuente de datos para dashboards en Grafana.

#Getting Started

#Conectarse a Prometheus

Acceso vía web UI

<tu-url>

Verificar estado y versión

curl <tu-url>/-/healthy
curl <tu-url>/api/v1/status/tsdb

#Parámetros de acceso

Parámetro Valor Descripción
URL base <tu-url> UI de Prometheus
API endpoint /api/v1/ REST API para queries
Almacenamiento Disco local Métricas persistidas ~15 días
Scrape interval 30s Frecuencia de recolección

#Exploración de Métricas

#Listar métricas disponibles

En la UI, ir a GraphInsert Metric at cursor para ver todas las métricas.

O via API:

curl <tu-url>/api/v1/label/__name__/values

#Targets y scraping

Ver estado de targets (servicios monitoreados)

<tu-url>/targets

Targets comunes

Target Endpoint Métricas
Trino <tu-url> Query duration, active workers
Kafka <tu-url> Topics, brokers, lag
Airflow <tu-url> DAG runs, task duration
Spark <tu-url> Executors, tasks, memory
Ceph <tu-url> Cluster health, OSD status

#PromQL — Lenguaje de Queries

#Tipos de métricas

Tipo Ejemplo Uso
gauge trino_active_queries Valores que suben y bajan
counter kafka_messages_total Solo incrementan, nunca bajan
histogram trino_query_duration_seconds Distribución de latencias
summary spark_executor_memory_bytes Percentiles y sumas

#Queries básicas en PromQL

Métrica simple (valor actual)

trino_active_queries

Filtrar por etiqueta (label)

kafka_topic_messages_total{topic="eventos_plataforma"}

Comparación de valores

trino_active_queries > 10

Operaciones matemáticas

rate(kafka_messages_total[5m])  # Mensajes por segundo en últimos 5 minutos

#Funciones comunes en PromQL

Función Ejemplo Descripción
rate() rate(metric[5m]) Tasa de cambio (velocidad)
increase() increase(metric[1h]) Incremento total en ventana
sum() sum(metric) Suma de todos los valores
avg() avg(metric) Promedio
max(), min() max(metric) Máximo / mínimo
count() count(metric) Contar series
topk() topk(5, metric) Top 5 valores
histogram_quantile() histogram_quantile(0.95, metric) Percentil 95

#Queries PromQL Prácticas

#Métricas de Trino

Queries activas en Trino

trino_active_queries

Duración promedio de queries (últimos 5 minutos)

rate(trino_query_duration_seconds_sum[5m]) / rate(trino_query_duration_seconds_count[5m])

Queries fallidas por hora

increase(trino_queries_failed_total[1h])

#Métricas de Kafka

Mensajes por segundo en un topic

rate(kafka_topic_messages_total{topic="eventos_plataforma"}[1m])

Consumer lag (retraso)

kafka_consumergroup_lag

Particiones sin líder (problema de salud)

kafka_topic_partitions{state="offline"}

#Métricas de Airflow

DAGs en ejecución

airflow_dag_runs{state="running"}

Duración promedio de tareas (percentil 95)

histogram_quantile(0.95, airflow_task_duration_seconds)

#Métricas de Ceph

Salud del cluster

ceph_health_status

Uso de almacenamiento (%)

(ceph_cluster_used_bytes / ceph_cluster_capacity_bytes) * 100

#Alerting

#Archivos de alertas

Las reglas de alertas están en

/etc/prometheus/rules/alerts.yml

Recargar sin reiniciar

curl -X POST <tu-url>/-/reload

#Estructura de una regla de alerta

groups:
  - name: trino_alerts
    rules:
      - alert: TrinQueriesFailing
        expr: rate(trino_queries_failed_total[5m]) > 0.1
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: 'Trino: > 10% de queries fallando'
          description: 'Revisar logs en <tu-url>'

Componentes

Campo Descripción
alert Nombre de la alerta
expr Condición PromQL (si true → dispara alerta)
for Tiempo que debe cumplirse antes de disparar
severity critical, warning
annotations Mensaje para humanos (summary, description)

#Alertas comunes

Trino: queries lentas

- alert: TrinoHighLatency
  expr: histogram_quantile(0.95, trino_query_duration_seconds) > 60
  for: 10m

Kafka: consumidor atrasado

- alert: KafkaConsumerLag
  expr: kafka_consumergroup_lag > 10000
  for: 5m

Ceph: cluster degraded

- alert: CephHealthCritical
  expr: ceph_health_status != 1
  for: 1m

Airflow: DAG failing

- alert: AirflowDagFailed
  expr: airflow_dag_runs{state="failed"} > 0
  for: 5m

#API de Prometheus

#Queries instantáneas (valor actual)

curl '<tu-url>/api/v1/query?query=trino_active_queries'

Respuesta JSON con result

#Queries sobre rango de tiempo

curl '<tu-url>/api/v1/query_range?query=rate(kafka_messages_total[5m])&start=1678867200&end=1678953600&step=300'

Parámetros

Parámetro Ejemplo Descripción
query trino_active_queries Expresión PromQL
start 1678867200 Timestamp Unix inicio
end 1678953600 Timestamp Unix fin
step 300 Intervalo en segundos

#Troubleshooting

#Métrica no aparece

  1. Revisar Status → Targets en UI
  2. Si target está DOWN, verificar conectividad:
curl http://<target-ip>:<puerto>/metrics
  1. Si responde, problema es en config de Prometheus
  2. Recargar: curl -X POST <tu-url>/-/reload

#Query lenta

# Ver top queries más lentas
topk(10, rate(prometheus_tsdb_symbol_table_size_bytes[5m]))

#Almacenamiento lleno

Prometheus almacena ~15 días. Verificar uso:

<tu-url>/api/v1/status/tsdb

Limpiar manualmente (destructivo):

# En contenedor Prometheus
promtool tsdb delete --min-time 1678000000 --max-time 1678086400

#Also see