Capa de interoperabilidad · Prueba técnica de arquitectura

7. Observabilidad y operación

Conclusión. Logs, métricas y trazas con OpenTelemetry, unidos por dos identificadores: el traceId técnico y el correlationId de negocio, que el partner puede enviar y que viaja en cada respuesta, evento y registro de auditoría. Con un correlationId se reconstruye la historia completa de una orden. Hay 17 métricas, 10 alertas ligadas a objetivos de servicio y un runbook por alerta. Aquí van las 10 primeras métricas, las 6 primeras alertas y el runbook de la falla de stock y precio; el resto de métricas y alertas está en el anexo B, y los demás runbooks en el diseño (docs/to-be/10-observabilidad.md).

OTel (OpenTelemetry) es el estándar abierto para generar y exportar logs, métricas y trazas. Los servicios no implementan esto a mano: la malla aporta las métricas de red, la autoinstrumentación aporta las trazas, el recolector lee las métricas de negocio que cada servicio expone en /metrics y un recolector por nodo toma los logs de la salida estándar. Trade-off: dependencia fuerte de la plataforma; a cambio, ningún equipo reinventa la telemetría y el contrato no depende del lenguaje.

7.1 Campos mínimos de logging

JSON por línea, a la salida estándar.

Campo Ejemplo
timestamp 2026-11-10T18:04:30.123Z
level INFO
service, version, env order-service, 1.4.2, prod
message Orden aceptada
correlationId 5e1d0c7a-...
traceId, spanId Contexto de traza
partnerId, channel mkp-andino
route, method, status, durationMs En logs de acceso
orderId, sku, eventId Cuando aplica
errorCode El code del modelo de errores

Prohibido en logs: nombres, correos, teléfonos, direcciones, tokens, secretos y cualquier dato de pago. Un filtro enmascara patrones conocidos y la prueba F8 falla si aparecen en los logs de los servicios y del borde (hoy se ejecuta con make f4-e2e, sin compuerta; sección 3.8).

7.2 Métricas

# Métrica Dimensiones Para qué
M1 Peticiones por segundo Ruta, partner, código Tráfico y mezcla
M2 Tasa de error (5xx y 4xx por separado) Ruta, partner Disponibilidad
M3 Latencia p50, p95, p99 Ruta, partner Objetivo de 300 ms
M4 Frescura del modelo de lectura (now - asOf) Stock o precio Calidad del dato servido
M5 Aciertos del modelo de lectura frente a respaldo en base Servicio Salud de Redis
M6 Retraso de consumidores de Kafka (lag) Grupo, tópico Acumulación
M7 Llamadas al legado por segundo y concurrencia en uso Sistema Protección del legado
M8 Estado del circuit breaker Sistema Legado degradado
M9 Peticiones rechazadas por cuota (429) Partner, nivel Cuotas mal dimensionadas o abuso
M10 Órdenes por estado y antigüedad en estado Estado, canal Órdenes atascadas

Las métricas se ligan a SLO (service level objective: meta medible de calidad, contra la que se alerta):

SLO Meta Ventana
Disponibilidad de APIs externas 99.9% de peticiones sin 5xx 30 días
Latencia de stock y precio 95% bajo 300 ms 30 días
Frescura de stock 95% de lecturas con dato de menos de 10 s 7 días
Confirmación de orden 99% en menos de 60 s desde el pago aprobado 7 días

7.3 Trazas distribuidas y correlación

7.4 Alertas

# Alerta Condición Severidad
AL1 Consumo acelerado del presupuesto de error de disponibilidad Ritmo 14 veces el permitido durante 1 hora, o 6 veces durante 6 horas Página
AL2 Latencia de stock y precio p95 mayor a 300 ms por 5 minutos Página
AL3 Frescura de stock Mayor a 60 s por 5 minutos Página en horario de promo; aviso fuera
AL4 Circuit breaker abierto ERP, WMS u OMS abierto por más de 2 minutos Aviso
AL5 Órdenes atascadas Más de 10 órdenes en PENDING_PAYMENT con más de 20 minutos Página
AL6 Registro en OMS atrasado Alguna orden con omsSync pendiente por más de 10 minutos Aviso; página a los 30

Toda alerta enlaza a su tablero y a su runbook. La alerta AL1 se basa en el ritmo de consumo del presupuesto de error y no en un umbral fijo: avisa rápido ante una caída fuerte y no despierta a nadie por un pico breve.

7.5 Runbook: falla stock o precio

Síntoma: alerta AL2 o AL3, o partners reportando errores o datos viejos en GET /v1/stock o GET /v1/prices.

  1. Clasificar en el tablero de lecturas, en menos de 2 minutos: ¿errores 5xx o latencia? Paso 2. ¿Responde bien pero con dato viejo (stale: true, frescura alta)? Paso 3.
  2. La ruta de lectura falla:
    • Redis caído o saturado: confirmar que el respaldo a base está activo; promover réplica.
    • Servicio: revisar reinicios y saturación; escalar réplicas.
    • Gateway o cuotas: si los 429 se dispararon para todos, revisar el servicio de cuotas (falla abierta) y el tope general.
    • Despliegue reciente: si coincide en el tiempo, devolver a la versión anterior antes de investigar.
  3. La ruta de alimentación falla (el canal sigue recibiendo 200):
    • Lag de Kafka alto: revisar el consumidor del servicio.
    • Adaptador con circuit breaker abierto o cursor detenido: el problema está en el legado o en el enlace on-prem. Confirmar con el equipo del ERP o del WMS.
    • Mientras dure, se sirve el último dato con stale: true. Si es stock y supera 15 minutos, subir el colchón de seguridad de los SKU de alta rotación para reducir el riesgo de sobreventa.
  4. Comunicar: estado a soporte y a los partners afectados si supera 10 minutos.
  5. Recuperación: al volver la fuente, el adaptador retoma desde su cursor; verificar que la frescura baje al objetivo. Si hubo pérdida de cambios, disparar la conciliación completa.
  6. Cierre: revisión sin culpables en 5 días hábiles; si el aprendizaje es repetible, se convierte en alerta, función de aptitud o paso de este runbook.

Lo que no se hace: apuntar los canales directo al ERP o al WMS "mientras tanto". Eso recrea el AS-IS en el peor momento.

7.6 Herramientas

En producción: OpenTelemetry Collector, Amazon Managed Service for Prometheus (métricas), Loki u OpenSearch (logs), Tempo o AWS X-Ray (trazas) y Amazon Managed Grafana (tableros y alertas). En el demo, las mismas piezas de código abierto dentro del clúster.