Observabilidad vs. monitoreo: métricas, logs y trazas en sistemas distribuidos

El monitoreo detecta que un sistema se apartó del comportamiento esperado. La observabilidad aporta la evidencia correlacionada para investigar dónde surgió la degradación, a quién afectó y qué hipótesis comprobar.

Una API empieza a responder lentamente. El dashboard confirma que la latencia P95 aumentó, pero el tráfico permanece estable y la tasa de errores apenas se movió. El servicio sigue disponible, aunque los usuarios esperan casi un segundo por una operación que normalmente termina en 200 milisegundos.

El sistema de monitoreo detectó el síntoma. No explicó qué dependencia consumió el tiempo, si todas las solicitudes fueron afectadas, qué cambió antes de la degradación ni qué mitigación puede aplicarse sin aumentar el riesgo.

Esa es la frontera práctica entre monitoreo y observabilidad. El monitoreo comprueba condiciones esperadas. La observabilidad proporciona evidencia correlacionada para investigar comportamientos que no se anticiparon.

Las métricas cuantifican el síntoma. Las trazas reconstruyen el recorrido de ejecución. Los logs aportan contexto sobre eventos y estado. Ninguna señal es suficiente por sí sola, y recolectar las tres no vuelve observable a un sistema automáticamente. La capacidad aparece cuando comparten identidad, semántica, propiedad y propósito operativo.

Esta guía explica cómo diseñar esa capacidad, cómo evitar telemetría costosa pero débil para el diagnóstico y cómo validar que el sistema resultante realmente mejora las decisiones en producción.

Monitoreo y observabilidad no son sinónimos

Monitoreo y observabilidad se superponen, pero describen capacidades diferentes.

La definición de Google SRE se concentra en recopilar, procesar, agregar y mostrar datos cuantitativos sobre un sistema. El monitoreo es, por tanto, una actividad operativa: definir señales, evaluar condiciones, visualizar comportamiento y notificar a personas o automatizaciones cuando una condición requiere una acción.

La observabilidad es una propiedad del sistema y de su instrumentación. Un sistema es observable cuando un ingeniero puede utilizar la evidencia que emite externamente para formular preguntas nuevas sobre su comportamiento interno sin desplegar primero código adicional de diagnóstico. OpenTelemetry describe esta capacidad como la posibilidad de investigar problemas no previstos y responder por qué ocurre un comportamiento.

La diferencia no consiste en que el monitoreo utilice métricas y la observabilidad tres herramientas. Un sistema moderno de monitoreo puede emplear métricas, logs, trazas, pruebas sintéticas, perfiles y eventos. La diferencia está en el tipo de pregunta que el sistema permite responder.

Qué responde el monitoreo

El monitoreo es efectivo cuando la condición puede definirse antes de que ocurra:

Son preguntas conocidas, con mediciones explícitas y una lógica de evaluación definida.

Qué permite investigar la observabilidad

La observabilidad se vuelve necesaria cuando la investigación no estaba determinada de antemano:

La observabilidad no garantiza una identificación automática de la causa raíz. Proporciona evidencia para reducir el espacio de búsqueda, formular una hipótesis y comprobarla. Una traza puede mostrar dónde se acumuló el tiempo sin demostrar por qué. Un log puede registrar un timeout sin probar si lo causó la dependencia, la red o la falta de recursos locales.

Comparación operativa

DimensiónMonitoreoObservabilidad
Propósito principalDetectar y seguir condiciones esperadasInvestigar comportamientos, incluidos modos de fallo no anticipados
Pregunta típica¿El servicio está incumpliendo un objetivo?¿Qué recorrido, dependencia, estado o cambio explica el comportamiento?
EntradasChecks, métricas, logs, trazas, eventos y perfilesLas mismas señales, correlacionadas con contexto y semántica consistentes
ResultadoDetección, notificación, tendencia y estadoEvidencia, hipótesis acotadas, reconstrucción causal y validación
Modo de falloAlertas omitidas o ruidosasLos datos existen, pero no pueden unirse en una investigación
Criterio de éxitoLas condiciones importantes se detectan con precisión y velocidad aceptablesUn ingeniero puede explicar el alcance y probar una mitigación sin añadir instrumentación de emergencia
El monitoreo detecta; la observabilidad permite investigar Las reglas de monitoreo detectan el incumplimiento de una condición esperada, mientras la telemetría correlacionada permite investigar, formular hipótesis, mitigar y validar. Comportamiento del sistema Reglas de monitoreo Telemetría correlacionada ¿Se incumplió una condición esperada? Continuar evaluación Alerta o automatización Investigación Hipótesis Prueba o mitigación Validación No señales correlacionadas
Diagrama 1 — El monitoreo detecta; la observabilidad permite investigar. Las reglas de monitoreo detectan el incumplimiento de una condición esperada, mientras la telemetría correlacionada permite investigar, formular hipótesis, mitigar y validar.

La ruta de monitoreo determina que una condición conocida requiere atención. La ruta de observabilidad aporta la evidencia necesaria después de la detección para comprender el alcance, formular una hipótesis y validar la respuesta.

La decisión central no es «¿qué producto de observabilidad debemos comprar?», sino «¿qué preguntas de producción debe poder responder un ingeniero y qué señales deben correlacionarse para responderlas?».

Las tres señales principales de telemetría

Métricas, logs y trazas siguen siendo el modelo operativo más útil para comprender aplicaciones distribuidas. Llamarlas «los tres pilares» resulta conveniente, pero no constituye una definición completa de observabilidad. OpenTelemetry también modela contexto, baggage, eventos, recursos y perfiles. El modelo de tres señales es valioso porque cada una posee una forma diagnóstica y un costo diferentes.

Métricas: detectar y dimensionar

Una métrica es una medición numérica asociada al tiempo y a un conjunto acotado de dimensiones. Las métricas están diseñadas para agregarse. Responden cuánto, con qué frecuencia, durante cuánto tiempo y cómo cambia el comportamiento.

Entre los instrumentos habituales se encuentran:

El modelo exacto depende del estándar de telemetría y del backend. La API de métricas de OpenTelemetry, por ejemplo, define counters, gauges, up-down counters e histograms, mientras su modelo de datos describe cómo representar valores agregados y distribuciones.

Métricas útiles para un servicio incluyen:

Una métrica es eficiente porque convierte muchos eventos en una serie temporal. Esa eficiencia también es su limitación. Un valor P95 puede mostrar que el 5 % de las solicitudes superó cierto tiempo, pero normalmente no permite identificar qué solicitudes fueron lentas ni qué ocurrió dentro de ellas.

Para profundizar en el diseño de rendimiento extremo a extremo y el presupuesto de latencia, conviene separar la decisión sistémica de la interpretación estadística de los percentiles. La explicación estadística completa corresponde al artículo especializado sobre los percentiles de latencia P50, P95 y P99.

Regla de decisión para métricas

Utiliza una métrica cuando la pregunta requiera agregación sobre muchos eventos y sus dimensiones puedan mantenerse acotadas.

No coloques request IDs, transaction IDs, timestamps, URLs sin normalizar, correos electrónicos ni user IDs en etiquetas de métricas. Esos valores pertenecen a logs o trazas porque su naturaleza casi única crea una nueva serie temporal por cada conjunto distinto de etiquetas.

Logs: conservar contexto de eventos

Un log registra un evento. Su valor diagnóstico depende menos de la frase que contiene que de la estructura y el contexto asociados.

Un log débil dice:

Texto
Algo salió mal al procesar la solicitud.

No ofrece un nombre estable de operación, identidad del servicio, resultado, clasificación del error, duración ni campos de correlación. Durante un incidente, los ingenieros deben inferir el contexto a partir de líneas cercanas, hostnames y timestamps. Ese enfoque falla rápidamente cuando las solicitudes atraviesan servicios concurrentes.

Un registro estructurado más útil podría ser:

JSON
{
  "timestamp": "2026-07-12T22:14:08.417Z",
  "severity": "ERROR",
  "service.name": "authorization-api",
  "service.version": "2026.07.12.3",
  "deployment.environment": "production",
  "operation": "authorize",
  "result": "timeout",
  "trace_id": "4e8f2c7b6bb44df19cd9d6f0db8916a2",
  "span_id": "a1729f6b1c83e402",
  "correlation_id": "order-8129",
  "dependency": "risk-service",
  "duration_ms": 1842,
  "pool_wait_ms": 1614,
  "error_code": "DEPENDENCY_CONNECTION_ACQUIRE_TIMEOUT"
}

Este registro permite varias rutas de investigación:

La especificación de logs de OpenTelemetry soporta expresamente la correlación mediante tiempo, contexto de traza y contexto de recurso. Incluir Trace ID y Span ID en los registros permite pasar desde el waterfall de una traza hacia los eventos exactos emitidos durante esa ejecución.

Campos que deben ser consistentes

Como mínimo, los logs de aplicación deben utilizar nombres estables para:

El esquema debe seguir una convención compartida en lugar de permitir que cada equipo invente sus propios nombres. Las Semantic Conventions de OpenTelemetry existen precisamente para proporcionar nomenclatura común entre lenguajes, librerías y plataformas.

Qué no debe registrarse

Más detalle no implica necesariamente mejor diagnóstico. Los logs pueden crear riesgos de seguridad, privacidad y costo. Evita registrar credenciales, access tokens, datos completos de pago, datos personales sin un propósito definido o cuerpos completos de request y response por defecto. La redacción y el filtrado deben formar parte del pipeline de telemetría, no aplicarse después de que la información sensible llegó al backend.

Trazas distribuidas: reconstruir la ejecución

Una traza distribuida representa el recorrido de una operación a través de procesos y fronteras de red. Está compuesta por spans. Cada span describe una operación mediante tiempo de inicio, tiempo de fin, atributos, eventos, estado y una relación de paternidad o enlace.

Un recorrido simplificado podría ser:

Texto
Cliente
  -> API Gateway
    -> Authorization API
      -> Risk Service
        -> Base de datos
        -> API externa de reglas

Una traza transforma esa topología en una ejecución temporizada. Puede mostrar que Authorization API completó 70 milisegundos de trabajo local, esperó 620 milisegundos por una conexión hacia Risk Service, consumió 130 milisegundos dentro de la dependencia y respondió tras 820 milisegundos totales.

La diferencia es relevante. Sin el span o atributo de espera, un ingeniero podría culpar al servicio downstream porque aparece en la ruta. Con el desglose completo, la evidencia apunta al tiempo de adquisición de conexiones o al control de concurrencia local.

Métricas, trazas y logs convergen en un diagnóstico Las métricas muestran un incremento de latencia, las trazas localizan una espera previa a una dependencia y los logs identifican timeouts de adquisición de conexiones; las tres señales convergen en un diagnóstico. Solicitudes de autorización lentas Métricas P95 220 ms → 890 ms Tráfico y errores estables Trazas 620 ms antes de la dependencia Solo una operación y región Logs Timeouts al adquirir conexión Espera del pool y versión Diagnóstico correlacionado
Diagrama 2 — Métricas, trazas y logs convergen en un diagnóstico. Las métricas muestran un incremento de latencia, las trazas localizan una espera previa a una dependencia y los logs identifican timeouts de adquisición de conexiones; las tres señales convergen en un diagnóstico.

Las métricas establecen impacto y tendencia. Las trazas identifican el recorrido degradado. Los logs explican el estado y los eventos asociados. El diagnóstico depende de unir las señales, no de leer dashboards aislados.

Una traza localiza tiempo, pero no demuestra automáticamente la causa

Un span largo es evidencia de dónde se observó tiempo transcurrido. Puede representar:

La siguiente decisión consiste en comparar trazas, revisar métricas de recursos y localizar logs específicos del estado. La observabilidad apoya el análisis causal; no lo reemplaza.

Trace ID, Span ID y Correlation ID

Estos identificadores están relacionados, pero resuelven problemas distintos.

Trace ID

Un Trace ID identifica la ejecución distribuida completa representada por una traza. Todos sus spans comparten el mismo Trace ID.

La especificación W3C Trace Context define una propagación interoperable mediante el header traceparent y el header opcional tracestate. El valor de traceparent transporta el identificador de traza, el identificador del span padre, la versión y los trace flags en un formato independiente del proveedor.

Ejemplo:

Texto
traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01

El Trace ID del ejemplo es:

Texto
0af7651916cd43dd8448eb211c80319c

Span ID

Un Span ID identifica una operación dentro de una traza. Las relaciones entre Span IDs padres e hijos reconstruyen el árbol o grafo causal.

Una traza puede contener spans para:

Cada span tiene su propio Span ID, pero conserva el Trace ID de la ejecución distribuida.

Correlation ID

Un Correlation ID es un identificador definido por la aplicación para asociar eventos que pertenecen a un flujo lógico. No reemplaza el contexto de trazas ni está estandarizado por W3C Trace Context.

Un flujo funcional puede sobrevivir a una sola traza. Por ejemplo, una orden puede crearse de forma síncrona, procesarse asincrónicamente, reintentarse horas después y conciliarse al día siguiente. Esas ejecuciones pueden producir varias trazas mientras comparten un identificador estable de orden o de workflow.

A la inversa, una traza puede involucrar varias entidades funcionales. Forzar un identificador de dominio como Trace ID puede romper la generación de trazas, las suposiciones de sampling y la interoperabilidad.

Cuándo utilizar cada identificador

IdentificadorAlcanceGenerado porDuraciónUso principal
Trace IDUna ejecución distribuidaSDK de trazas o sistema compatibleDuración de la trazaUnir spans y logs correlacionados entre servicios
Span IDUna operación dentro de la trazaSDK de trazasDuración del spanReconstruir relaciones padre-hijo y tiempos locales
Correlation IDFlujo de aplicación o de negocioAplicación, gateway, motor de workflow o componente de dominioPuede abarcar varias trazas y procesos prolongadosUnir eventos de dominio, etapas asíncronas o reintentos

Decisión de propagación

Propaga W3C Trace Context a través de las fronteras síncronas y asíncronas soportadas. Conserva campos de correlación de aplicación únicamente cuando tengan propietario, ciclo de vida y clasificación de datos definidos.

No copies valores arbitrarios enviados por usuarios hacia campos confiables de correlación sin validarlos. No sobrecargues baggage con valores grandes o sensibles: el contexto propagado cruza fronteras de servicios, aumenta el tamaño de las solicitudes y puede exponer información a componentes que no la necesitan.

OpenTelemetry sin acoplamiento al backend

OpenTelemetry proporciona APIs, SDKs, Semantic Conventions, propagación de contexto, OpenTelemetry Protocol y Collector independientes del proveedor. Estandariza cómo se produce y transporta la telemetría. No entrega por sí solo el resultado completo de observabilidad.

Qué resuelve OpenTelemetry

OpenTelemetry ayuda a estandarizar:

Qué no decide OpenTelemetry

No decide:

Esas siguen siendo decisiones de arquitectura y modelo operativo.

Ruta recomendada de las señales

Arquitectura de instrumentación y recolección con OpenTelemetry Las aplicaciones y la instrumentación automática emiten telemetría mediante SDKs de OpenTelemetry y OTLP hacia un Collector, que procesa y dirige métricas, logs y trazas a backends separados. Código de aplicación Instrumentación sin cambios de código OpenTelemetry API y SDK Exportación OTLP OpenTelemetry Collector Procesadores batch · filter · redact · sample Backend de métricas Backend de logs Backend de trazas
Diagrama 3 — Arquitectura de instrumentación y recolección con OpenTelemetry. Las aplicaciones y la instrumentación automática emiten telemetría mediante SDKs de OpenTelemetry y OTLP hacia un Collector, que procesa y dirige métricas, logs y trazas a backends separados.

El Collector desacopla las aplicaciones de mecanismos de ingesta específicos y centraliza controles transversales como batching, retries, filtering, redaction y sampling. Los entornos pequeños pueden exportar directamente, pero el Collector adquiere valor cuando la política de telemetría debe cambiar sin redesplegar cada servicio.

Instrumentación automática y manual

La documentación de OpenTelemetry distingue entre instrumentación basada en código e instrumentación sin cambios de código. Deben combinarse en lugar de tratarse como opciones excluyentes.

La instrumentación automática o zero-code es útil para:

Permite revelar rápidamente la topología técnica y los tiempos base.

La instrumentación manual es necesaria para:

La instrumentación automática puede mostrar que una llamada HTTP tardó 800 milisegundos. La instrumentación manual puede revelar que 650 milisegundos se consumieron esperando un permiso limitado antes de invocar el cliente HTTP.

Una secuencia de instrumentación defendible

  1. Establece una identidad consistente del recurso: nombre de servicio, versión, entorno, región e identidad de instancia o workload cuando corresponda.
  2. Habilita instrumentación automática para protocolos y librerías estándar.
  3. Define las operaciones críticas de usuario y de negocio que requieren spans o métricas manuales.
  4. Aplica Semantic Conventions antes de inventar nombres de atributos propios.
  5. Añade contexto de traza y span a los logs estructurados.
  6. Define presupuestos de cardinalidad y reglas para datos sensibles.
  7. Ejecuta pruebas de carga sobre el pipeline y mide overhead en la aplicación, saturación del Collector, datos descartados y costo de ingesta.
  8. Valida las señales mediante un fallo controlado o un ejercicio de game day.

El último paso es esencial. Una instrumentación que parece completa en una demostración puede fallar bajo concurrencia, ejecución asíncrona, sampling parcial o el volumen propio de un incidente.

Cómo elegir entre RED, USE y las Golden Signals

RED, USE y las Four Golden Signals no son estándares rivales. Organizan perspectivas distintas sobre el mismo sistema.

RED para servicios orientados a solicitudes

El método RED, creado por Tom Wilkie para monitorear servicios, se concentra en:

RED es un punto de partida sólido para APIs, servicios RPC, consumidores y otros componentes orientados a solicitudes. Permite determinar si cambió la demanda, la tasa de fallos o la latencia.

USE para recursos

El método USE de Brendan Gregg evalúa cada recurso mediante:

USE se aplica a CPU, discos, interfaces de red, pools de conexiones, thread pools, colas, capacidad de memoria y otros recursos finitos.

La saturación es crítica. La utilización promedio puede parecer aceptable mientras intervalos breves alcanzan la capacidad total y crean colas. Un promedio de CPU de 70 % durante cinco minutos no demuestra que ningún intervalo de un segundo haya alcanzado 100 %.

Las Four Golden Signals para la salud del servicio

Las Four Golden Signals de Google SRE son:

Proporcionan una vista operativa compacta del comportamiento visible para el usuario y de la presión sobre recursos.

Cómo elegir

PreguntaMarcoSeñal de ejemplo
¿Los usuarios reciben operaciones más lentas o fallidas?RED o Golden SignalsDistribución de duración y tasa de errores
¿Cambió la demanda?RED o Golden SignalsSolicitudes o mensajes por segundo
¿Un recurso finito se está convirtiendo en cuello de botella?USE o Golden SignalsProfundidad de cola, waiters del pool o tiempo de CPU throttled
¿Por qué aumentó la latencia del servicio?RED para detectar; USE para localizarP95 por operación, seguida por saturación y espera del pool
¿Qué vista debe generar paging?SLO y señales del servicio orientadas al síntomaConsumo del presupuesto de error, disponibilidad o SLI de latencia
RED detecta impacto en el servicio; USE comprueba presión sobre recursos Una alerta de latencia conduce desde métricas RED hacia un análisis USE de pools de conexiones, CPU y antigüedad de cola, generando una hipótesis sobre espera en recursos locales. Aumenta la latencia visible RED / Golden Signals ¿Cambió el tráfico o los errores? Revisar duración por operación Análisis USE Saturación del pool de conexiones Utilización de CPU Antigüedad de cola Hipótesis: espera en recurso local Tráfico estable
Diagrama 4 — RED detecta impacto en el servicio; USE comprueba presión sobre recursos. Una alerta de latencia conduce desde métricas RED hacia un análisis USE de pools de conexiones, CPU y antigüedad de cola, generando una hipótesis sobre espera en recursos locales.

RED y las Golden Signals muestran el síntoma visible para el usuario. USE examina si un recurso finito puede explicarlo. Los métodos adquieren valor cuando conducen a la siguiente decisión, no cuando existen como tres carpetas independientes de dashboards.

Cardinalidad: cuando una etiqueta rompe el sistema de métricas

Los sistemas de métricas identifican una serie temporal mediante el nombre de la métrica y su conjunto completo de etiquetas. Cada combinación única crea otra serie, con costo de almacenamiento, memoria, indexación, consulta y red.

Esta métrica es peligrosa:

Texto
http_requests_total{
  user_id,
  transaction_id,
  request_id,
  timestamp
}

Cada solicitud puede crear una combinación nueva. La métrica deja de comportarse como agregado y se convierte en un event store costoso implementado con la señal equivocada.

Un diseño más defendible sería:

Texto
http_requests_total{
  service,
  operation,
  status_code,
  region
}

Estas dimensiones están acotadas y permiten agregaciones operativas.

La documentación de Prometheus advierte expresamente que valores de alta cardinalidad o sin límite, como user IDs y correos electrónicos, no deben utilizarse como labels. El principio se extiende más allá de Prometheus: las dimensiones casi únicas pertenecen a logs o trazas, no a la identidad de una métrica.

Por qué la cardinalidad se multiplica

Supongamos que una métrica de duración utiliza estas dimensiones observadas:

El límite superior teórico es:

Texto
12 × 40 × 5 × 6 = 14,400 series temporales

Si se agregan 100,000 user IDs activos:

Texto
14,400 × 100,000 = 1,440,000,000 combinaciones posibles

El backend quizá no observe todas las combinaciones, pero cada conjunto nuevo sigue creando una serie. Incluso una fracción pequeña de ese límite puede desbordar ingesta, memoria, retención y rendimiento de consultas.

La cardinalidad no es solo un problema de almacenamiento

También provoca:

Explosión de cardinalidad Servicio, operación, estado y región producen 14,400 series posibles; al añadir 100,000 identificadores de usuario, el límite teórico sube a 1.44 mil millones de combinaciones. Etiquetas acotadas service: 12 · operation: 40 status: 5 · region: 6 14,400 series posibles user_id: 100,000 Hasta 1.44 mil millones de combinaciones Riesgo: ingesta, memoria, consultas y costo
Diagrama 5 — Explosión de cardinalidad. Servicio, operación, estado y región producen 14,400 series posibles; al añadir 100,000 identificadores de usuario, el límite teórico sube a 1.44 mil millones de combinaciones.

Las dimensiones operativas acotadas ya se multiplican. Añadir un identificador por usuario transforma la métrica de una señal agregada en un generador de series sin límite.

Prueba de decisión para una etiqueta

Antes de añadir una label a una métrica, pregunta:

  1. ¿El conjunto de valores está acotado?
  2. ¿Cuál es la cantidad actual y proyectada de valores distintos?
  3. ¿La dimensión permite tomar una decisión operativa o solo satisface curiosidad?
  4. ¿La pregunta puede responderse mediante logs o trazas?
  5. ¿Qué ocurre si un cliente defectuoso genera valores arbitrarios?
  6. ¿La dimensión requiere resolución completa o puede normalizarse?

Para métricas HTTP, utiliza rutas normalizadas como /orders/{orderId} en lugar de paths crudos como /orders/8129.

El sampling de trazas como decisión de ingeniería

Trazar cada solicitud puede ser aceptable con poco volumen, pero resulta costoso en sistemas de alto throughput. Sampling es la decisión de conservar y exportar solo una parte de la población de trazas.

El objetivo no es minimizar datos a cualquier costo. Es preservar evidencia suficiente para responder preguntas operativas mientras el overhead de la aplicación, la capacidad del Collector, la ingesta y la retención permanecen dentro del presupuesto.

Head sampling

Head sampling decide cerca del inicio de la traza, antes de conocer el resultado final.

Ventajas:

Limitaciones:

Tail sampling

Tail sampling decide después de recibir suficientes spans para evaluar el resultado de la traza.

Ventajas:

Limitaciones:

El procesador de tail sampling de OpenTelemetry Collector agrupa spans por Trace ID y requiere routing consistente para que todos los spans de una traza alcancen la misma instancia responsable de decidir.

Una política de sampling defendible

Un punto de partida frecuente es:

Los umbrales deben ser específicos por operación. Quinientos milisegundos pueden ser críticos para una consulta de caché y normales para un reporte prolongado.

Qué puede salir mal

Cómo validar el sampling

Monitorea el propio sistema de sampling:

El sampling funciona cuando los investigadores aún pueden comparar ejecuciones saludables y degradadas, preservar fallos raros y consultar el backend durante incidentes de máxima carga.

Alertar por impacto y diagnosticar mediante causas

Una alerta debe comunicar que una condición requiere acción. Las señales más confiables para paging suelen expresar impacto sobre el usuario o el servicio:

Google SRE recomienda alertar a partir de SLO porque alinea el paging con la confiabilidad que perciben los usuarios. La guía de Prometheus también recomienda alertar sobre síntomas y utilizar consolas para identificar causas.

Señales de síntoma

Ejemplos:

Señales de causa

Ejemplos:

Las señales de causa son valiosas para diagnosticar y, en ocasiones, prevenir. Son más débiles como reglas principales de paging porque la misma causa puede no generar impacto, mientras que el impacto puede surgir por una causa nunca codificada.

Cuándo se justifica una alerta de causa

Una alerta preventiva basada en causa puede ser apropiada cuando:

Agotamiento de disco, expiración de certificados, reservas de capacidad agotadas y fallos de replicación pueden justificar alertas preventivas. La decisión depende de la capacidad de actuar y de la consecuencia, no de una regla absoluta que considere incorrectas todas las alertas de causa.

Criterios de calidad de una alerta

Una alerta que despierta a una persona debe tener:

Cómo evitar la fatiga de alertas

La fatiga de alertas no significa únicamente «demasiadas alertas». Es la pérdida de confianza provocada por notificaciones ruidosas, duplicadas, no accionables, obsoletas o mal priorizadas.

Google SRE advierte que las páginas de baja prioridad interrumpen el trabajo y pueden hacer que alertas graves reciban menos atención. También recomienda controlar el fan-out para que una condición anormal no genere varias páginas independientes.

Causas frecuentes

Revisión práctica

Para cada alerta, pregunta:

  1. ¿Qué decisión debe tomar quien la recibe?
  2. ¿Una persona debe actuar ahora?
  3. ¿Qué objetivo del usuario o del sistema está amenazado?
  4. ¿La misma condición puede agruparse a nivel de servicio o incidente?
  5. ¿La notificación aporta contexto suficiente para iniciar el triage?
  6. ¿Existe un runbook y se ha ejercitado?
  7. ¿Cuál es la relación esperada entre alertas e incidentes reales?
  8. ¿Cuándo fue útil por última vez esta regla?

Una alerta sin acción inmediata debe convertirse en ticket, reporte o anotación de dashboard, no en page.

Qué debe mostrar un dashboard operativo

Un dashboard no es una pared de métricas disponibles. Es una interfaz para tomar decisiones.

Cada panel debe responder una pregunta de producción. El dashboard principal de un servicio debe permitir que la persona de guardia determine impacto, alcance, cambios recientes y la siguiente ruta de investigación en pocos minutos.

Jerarquía recomendada

1. Impacto sobre usuarios y SLO

2. Demanda y alcance

3. Comportamiento del servicio

4. Saturación y dependencias

5. Cambios recientes

Qué no debe incluir

Tabla de decisiones del dashboard

PanelPregunta que respondeAcción posterior
Burn rate del SLO¿El incidente es suficientemente significativo para generar paging?Declarar, escalar o continuar observando
Duración por operación¿Qué operación está degradada?Filtrar trazas y comparar solicitudes saludables y lentas
Duración de dependencias¿Dónde se acumula el tiempo?Revisar child spans, métricas de la dependencia y timeouts
Antigüedad de cola¿El trabajo espera más de lo permitido?Reducir entrada, escalar consumidores o eliminar el cuello de botella
Marcadores de despliegue¿El comportamiento cambió cerca de una versión?Comparar versiones; canary, rollback o falsar la hipótesis del despliegue
Saturación del pool¿Existe espera por un recurso local?Revisar concurrencia, límites, leaks y capacidad downstream

El dashboard principal no debe intentar reemplazar los backends de trazas o logs. Debe dirigir al ingeniero hacia la siguiente consulta de mayor valor.

Caso de producción: una API se vuelve lenta sin fallar

Consideremos una authorization-api genérica con este comportamiento normal:

A las 22:10 UTC, P95 aumenta a 890 ms y P99 alcanza 1.7 segundos. El tráfico permanece cerca de 9,200 solicitudes por segundo y la tasa de errores solo aumenta de 0.4 % a 0.6 %.

El servicio no está «caído», pero consume su presupuesto de latencia y el rendimiento percibido por los usuarios se degradó.

Paso 1 — Detectar el síntoma

La alerta debe vincularse al SLI de latencia o al consumo del presupuesto de error, no únicamente a CPU o a una métrica del pool.

Observado:

Texto
P95: 220 ms -> 890 ms
P99: 410 ms -> 1,700 ms
Tasa de solicitudes: 9,100 -> 9,200 solicitudes/s
Tasa de errores: 0.4% -> 0.6%

Conclusión inicial:

Paso 2 — Establecer el alcance

Desglosa dimensiones acotadas:

La degradación aparece únicamente en:

Texto
operation = authorize
region = west
service.version = 2026.07.12.3

Las demás operaciones y regiones permanecen dentro de sus distribuciones normales.

Decisión:

Paso 3 — Comparar trazas saludables y lentas

Una traza saludable:

Texto
Gateway                              12 ms
Trabajo local de Authorization API   58 ms
Llamada a Risk Service              118 ms
Consulta a base de datos             31 ms
Total                               219 ms

Una traza lenta:

Texto
Gateway                              13 ms
Trabajo local de Authorization API   71 ms
Espera para adquirir conexión       623 ms
Llamada a Risk Service              131 ms
Consulta a base de datos             34 ms
Total                               872 ms

La llamada remota solo es 13 milisegundos más lenta que en la línea base. La mayor parte de la latencia adicional ocurre antes de iniciar la llamada.

Traza lenta dominada por la espera de una conexión Una traza totaliza 872 milisegundos, de los cuales 623 se consumen esperando adquirir una conexión antes de una llamada de 131 milisegundos a una dependencia. Gateway · 13 ms Trabajo local · 71 ms Espera de conexión · 623 ms Risk Service · 131 ms Base de datos · 34 ms Total · 872 ms
Diagrama 6 — Traza lenta dominada por la espera de una conexión. Una traza totaliza 872 milisegundos, de los cuales 623 se consumen esperando adquirir una conexión antes de una llamada de 131 milisegundos a una dependencia.

La traza localiza el retraso dominante en la adquisición de conexiones. Todavía no demuestra por qué el pool está saturado ni si la versión nueva lo causó.

Paso 4 — Correlacionar logs mediante Trace ID

Busca logs estructurados correspondientes a las trazas lentas:

JSON
{
  "service.name": "authorization-api",
  "service.version": "2026.07.12.3",
  "operation": "authorize",
  "trace_id": "4e8f2c7b6bb44df19cd9d6f0db8916a2",
  "event": "connection_pool.acquire",
  "pool.active": 40,
  "pool.idle": 0,
  "pool.waiters": 173,
  "pool_wait_ms": 623,
  "result": "acquired"
}

Otro log muestra que las solicitudes finalmente completan. Esto explica el pequeño aumento de errores: están esperando en lugar de fallar inmediatamente.

Paso 5 — Comprobar hipótesis competidoras

Hipótesis posibles:

  1. Risk Service está lento.
  2. Aumentó la latencia de red.
  3. El pool local es demasiado pequeño para la concurrencia actual.
  4. La versión 2026.07.12.3 fuga conexiones o las mantiene ocupadas más tiempo.
  5. Una política de retry aumentó las llamadas concurrentes hacia la dependencia.

La evidencia debilita las hipótesis 1 y 2 porque el tiempo de ejecución downstream permanece cerca de la línea base. Favorece una hipótesis de espera local, pero todavía no distingue entre capacidad insuficiente, mayor tiempo de retención, leak o amplificación por reintentos.

Debe revisarse:

La comparación revela:

Texto
2026.07.12.2: 1.02 llamadas a la dependencia por solicitud
2026.07.12.3: 1.84 llamadas a la dependencia por solicitud

Una ruta nueva está reintentando una clase de respuesta que no debería reintentarse. Los intentos adicionales consumen conexiones, incrementan los waiters y amplifican la latencia sin producir todavía un aumento grande de errores.

Se está formando una tormenta de reintentos, aunque el tráfico que llega a la API pública no haya cambiado.

Paso 6 — Elegir una mitigación

Las alternativas incluyen:

Aumentar el pool de inmediato es tentador, pero arriesgado. Puede trasladar la saturación al servicio downstream, aumentar el overhead de conexiones o esconder el defecto de retry. La mitigación debe eliminar primero la amplificación antes de añadir capacidad.

Decisión:

Para comprender la relación de diseño entre timeouts, retries y fallos en cascada, cada mecanismo debe tratarse como parte de un único sistema de control de carga, no como una opción aislada de librería.

Paso 7 — Validar la recuperación

No se cierra un incidente porque el cambio de configuración se aplicó correctamente. Debe validarse el resultado del sistema:

Texto
P95: 890 ms -> 245 ms
P99: 1,700 ms -> 460 ms
Waiters del pool: 173 -> 4
Llamadas a dependencia/solicitud: 1.84 -> 1.03
Tasa de errores: 0.6% -> 0.4%
Consumo del SLO de latencia: vuelve por debajo del umbral de alerta

También debe verificarse:

Paso 8 — Evitar la recurrencia

Añade o mejora:

El método completo de investigación corresponde a una pieza especializada para evitar duplicar aquí todo el marco de diagnóstico: cómo investigar un incidente con métricas, logs y trazas.

Flujo de investigación de un incidente La investigación avanza desde la confirmación del síntoma hacia el alcance, comparación de trazas, correlación de logs, prueba de hipótesis, mitigación reversible, validación y prevención. Alerta por síntoma Confirmar impacto en usuarios o SLO Acotar por operación, región y versión Comparar trazas saludables y degradadas Correlacionar logs por contexto de traza Formular hipótesis competidoras Comprobar con métricas y datos de cambios Elegir una mitigación reversible Validar latencia, errores, saturación y SLO Añadir prevención y pruebas de regresión
Diagrama 7 — Flujo de investigación de un incidente. La investigación avanza desde la confirmación del síntoma hacia el alcance, comparación de trazas, correlación de logs, prueba de hipótesis, mitigación reversible, validación y prevención.

El proceso avanza desde impacto y alcance hacia evidencia de ejecución, comprobación de hipótesis, mitigación reversible y validación medible. Evita saltar desde una métrica sospechosa hacia un cambio permanente de configuración.

Errores frecuentes de instrumentación

1. Recolectar señales que no pueden correlacionarse

Las métricas usan un nombre de servicio, los logs otro y las trazas omiten la versión. Las zonas horarias difieren y no existen marcadores de despliegue.

Consecuencia: El equipo consume parte del incidente demostrando que los registros pertenecen al mismo componente.

Corrección: Estandariza identidad de recursos y timestamps. Inserta Trace ID y Span ID en los logs. Mantén consultables los metadatos de despliegue.

2. Instrumentar únicamente las fronteras del framework

La instrumentación automática captura HTTP y bases de datos, pero no la etapa de dominio que espera un permiso, evalúa reglas o activa un fallback.

Consecuencia: Un span grande oculta la operación relevante.

Corrección: Añade spans manuales o eventos en fronteras de decisión, no alrededor de cada función.

3. Crear un span por cada función trivial

El exceso de spans aumenta costo y vuelve ilegibles las trazas.

Consecuencia: Los tiempos importantes quedan enterrados bajo detalle de implementación.

Corrección: Crea spans para llamadas remotas, fronteras asíncronas, etapas costosas y operaciones con valor diagnóstico.

4. Utilizar identificadores crudos como labels de métricas

Request IDs, user IDs y URLs crudas crean series sin límite.

Consecuencia: El backend de métricas se vuelve costoso o deja de responder durante alto tráfico.

Corrección: Normaliza dimensiones y traslada el contexto único hacia logs o trazas.

5. Registrar la misma excepción en cada capa

Una excepción downstream se registra en cliente, servicio, controlador, gateway y handler global.

Consecuencia: Un fallo aparece como cinco eventos independientes y puede disparar alertas duplicadas.

Corrección: Registra el evento donde la propiedad y el contexto sean más fuertes; propaga un estado estructurado sin duplicar ruido.

6. Aplicar sampling sin verificar cobertura

Se activa un head sample global de 1 % y se considera suficiente.

Consecuencia: Desaparecen operaciones de poco volumen y fallos raros.

Corrección: Mide cobertura por operación y resultado; conserva errores, trazas lentas y una línea base saludable.

7. Alertar por cada anomalía

Cada umbral de recurso genera paging de manera independiente.

Consecuencia: Un solo incidente produce una tormenta de notificaciones y la guardia no puede identificar el impacto principal.

Corrección: Genera paging por síntomas significativos del servicio, agrupa causas relacionadas y utiliza métricas de causa para diagnóstico o tickets preventivos.

8. Tratar la observabilidad como una migración de backend

Se cambia de proveedor, pero se mantienen nombres inconsistentes, contexto ausente, alertas débiles y dashboards decorativos.

Consecuencia: Cambia la sintaxis de consulta; la capacidad diagnóstica no mejora.

Corrección: Define preguntas, esquemas, propiedad y validación antes de elegir o migrar el backend.

Checklist operativo

Instrumentación

Métricas

Logs

Trazas

Alertas y dashboards

Validación

Conclusión

El monitoreo es necesario porque no se puede responder a una condición que no se detectó. La observabilidad es necesaria porque la detección rara vez explica un fallo distribuido.

El objetivo práctico no es recolectar la mayor cantidad posible de telemetría. Es construir un sistema controlado de evidencia:

La validación final es operativa. Cuando ocurre un incidente desconocido, el equipo debe poder determinar el alcance, comparar comportamiento saludable y degradado, comprobar hipótesis competidoras, aplicar una mitigación reversible y demostrar que el servicio se recuperó.

Si el sistema emite millones de registros pero no permite ejecutar esa secuencia, tiene telemetría. Todavía no tiene observabilidad útil.

Esa secuencia es también el límite de lo que conviene automatizar. Cuando la evidencia ya se obtiene de forma verificable, la pregunta deja de ser qué instrumentar y pasa a ser quién interpreta el resultado: observabilidad empresarial con IA trata dónde ubicar un modelo sobre estos controles sin que termine decidiendo si el sistema está sano.

Preguntas frecuentes

¿Observabilidad y monitoreo son lo mismo?

No. El monitoreo consiste en recopilar y evaluar señales frente a condiciones esperadas. La observabilidad es la capacidad del sistema para permitir investigaciones mediante la evidencia que emite. Un sistema de monitoreo maduro contribuye a la observabilidad, pero dashboards y alertas no la garantizan.

¿Cuáles son los tres pilares de la observabilidad?

Métricas, logs y trazas son un modelo operativo útil porque aportan agregación, contexto de eventos y recorridos de ejecución. «Tres pilares» es una simplificación, no una definición técnica completa. La propagación de contexto, identidad de recursos, eventos, baggage, Semantic Conventions y perfiles también pueden formar parte del sistema.

¿Qué diferencia existe entre Trace ID y Correlation ID?

Trace ID identifica una ejecución distribuida y se propaga mediante estándares de tracing. Correlation ID es definido por la aplicación y puede representar un flujo de negocio que abarca varias trazas. Pueden coexistir, pero no son intercambiables.

¿Qué es OpenTelemetry?

OpenTelemetry es un framework de observabilidad independiente del proveedor que define APIs, SDKs, Semantic Conventions, propagación de contexto, protocolos y Collector para telemetría como trazas, métricas y logs. Estandariza instrumentación y transporte; no decide por el equipo las preguntas operativas ni la estrategia del backend.

¿Debo usar RED o USE?

Usa RED para el comportamiento de servicios orientados a solicitudes y USE para recursos finitos. RED permite detectar cambios visibles en rate, errors y duration. USE ayuda a comprobar si utilización, saturación o errores de recursos explican el síntoma. Las Four Golden Signals ofrecen una vista compacta del servicio que se superpone con ambos.

¿Cuándo debo usar P95 o P99?

Utiliza el percentil que represente la población de usuarios, criticidad de la operación, volumen de tráfico y SLO que necesitas proteger. P99 expone la cola de la distribución, pero puede ser inestable en ventanas de poco volumen. No elijas un percentil porque esté de moda; elígelo porque corresponde a un objetivo explícito y tiene observaciones suficientes para interpretarlo.

La explicación estadística completa corresponde a la guía dedicada de percentiles P50, P95 y P99.

¿Cómo evito la fatiga de alertas?

Reduce el paging a condiciones significativas y accionables. Agrupa síntomas relacionados, alinea pages con SLO o riesgos de alta consecuencia, asigna propiedad y runbooks, y revisa las reglas que se disparan repetidamente sin requerir acción. Una alerta que no cambia una decisión debe convertirse en ticket, reporte o señal de dashboard.

Referencias técnicas

Jorel del Portal

Jorel del Portal

Jorel del Portal es ingeniero de sistemas especializado en arquitectura, integración, resiliencia y observabilidad de plataformas críticas. Diseña sistemas, construye productos y documenta decisiones reales de ingeniería.