RetroDash // LATENCY

GUIDEDetalle de latencia: percentiles, distribución y SLOs

Tema

Requisitos

Para métricas de latencia necesitas histogramas Prometheus:

Notas de Compatibilidad

Intervalo de rate y tráfico en homelabs

La variable $rate_interval controla la ventana de tiempo utilizada en las queries de rate() e histogram_quantile(). El valor por defecto es 5m.

"No data" en los paneles de latencia es comportamiento esperado cuando no hay tráfico HTTP activo llegando a sus servicios — no es un error de configuración. Los paneles se poblarán en cuanto comiencen a llegar requests.

Mapa de Paneles

┌────────────────────────────────────────┐
│    LATENCY — PERCENTILES & SLOs        │
├────────────────────────────────────────┤
│  P50      │  P95      │  P99           │
│  (stat)   │  (stat)   │  (stat)        │
├────────────────────────────────────────┤
│  Distribution Time Series [12 cols]    │
│  (líneas: P50, P95, P99)               │
├────────────────────────────────────────┤
│  Heatmap [6 cols] │ Table by Endpoint  │
│  (buckets time)   │ (top handlers)     │
├────────────────────────────────────────┤
│  SLO Alert — P99 < 500ms [12 cols]    │
└────────────────────────────────────────┘

Personalización por Panel

P50 / P95 / P99 Stats

Tres paneles stat que muestran percentiles en milisegundos.

histogram_quantile(0.50, rate(http_request_duration_seconds_bucket[5m])) * 1000
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m])) * 1000
histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) * 1000

Para metric custom (ej: ms ya):

histogram_quantile(0.95, rate(my_api_latency_ms_bucket[5m]))

Cambiar thresholds: Panel → Thresholds → Ajusta límites (ej: 100 yellow, 200 red)

Distribution Time Series

Gráfico de líneas con evolución de P50, P95, P99 en el tiempo.

Agregar percentiles: En Legend/Aliases, personaliza labels:

Percentil Query Label
P25 histogram_quantile(0.25, ...) P25
P50 histogram_quantile(0.50, ...) P50 (Median)
P90 histogram_quantile(0.90, ...) P90
P95 histogram_quantile(0.95, ...) P95
P99 histogram_quantile(0.99, ...) P99

Cambiar ventana de rate: Edita [5m][1m] para más sensibilidad o [15m] para suavizar

Heatmap

Visualización de distribución de latencia por buckets en el tiempo.

rate(http_request_duration_seconds_bucket[5m])

Para resolver buckets específicos: Filtra por le valores de bucket:

rate(http_request_duration_seconds_bucket{le=~"0.01|0.05|0.1|0.5|1"}[5m])

Ajustar resolución: Panel → Heatmap options → Cell size, cambiar Bucket a discreto vs. continuo

Table by Endpoint

Tabla dinámica con latencia por endpoint/handler.

topk(10, sum by (endpoint) (rate(http_request_duration_seconds_sum[5m])))
/ topk(10, sum by (endpoint) (rate(http_request_duration_seconds_count[5m]))) * 1000

Cambiar top N endpoints: Reemplaza topk(10 con topk(20 o topk(5

Filtrar por método:

topk(10, sum by (endpoint, method) (rate(http_request_duration_seconds_sum{method="GET"}[5m])))
/ topk(10, sum by (endpoint, method) (rate(http_request_duration_seconds_count{method="GET"}[5m]))) * 1000

SLO Alert — P99 < 500ms

Stat o gauge que alerta si P99 supera el SLO.

histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) * 1000 < 500

Cambiar SLO a 300ms:

histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m])) * 1000 < 300

Para alerta by endpoint:

histogram_quantile(0.99, sum by (endpoint) (rate(http_request_duration_seconds_bucket[5m]))) * 1000 < 250

Alert color: En Thresholds, configura:

Cambiar Tema de Color

Tema Primary Secondary OK Color
GREEN #33FF00 #22BB00 #33FF00
AMBER #FFB000 #CC8C00 #FFB000
BLUE #00BFFF #0099CC #00BFFF

Adaptar a tu Resolución

Tipo Ancho (cols) Alto (rows)
Mobile (< 768px) 6 (stack vertical) 8
Tablet 10" 12 (full width) 10
Tablet 12.9" 12 (full width) 12
Desktop 1920×1080 24 (2 columnas) 8

Importar en Grafana

  1. Exporta el dashboard LATENCY como JSON desde Grafana
  2. O copia la URI: $GRAFANA_URL/api/dashboards/db/latency
  3. Ve a Dashboards → Import
  4. Pega el JSON o URL
  5. Asegúrate de seleccionar datasource Prometheus
  6. Verifica las métricas en cada panel
  7. Guarda y pone en favoritos

Tips Avanzados

Correlacionar latencia con errors

histogram_quantile(0.95,
  rate(http_request_duration_seconds_bucket{status!~"5.."}[5m])) * 1000

Esto muestra P95 solo de requests exitosas (excluyendo 5xx).

Desglose por instancia

histogram_quantile(0.95,
  sum by (instance) (rate(http_request_duration_seconds_bucket[5m]))) * 1000

Útil si tienes múltiples servidores y quieres detectar anomalías en instancias.

Detección de degradación

rate(increase(http_request_duration_seconds_bucket{le="1"}[5m]))[10m:1m]

Muestra tendencia de latencia en los últimos 10 minutos con resolución 1m.