Observabilidad y SLOs
Resumen
No puedes operar, depurar o mejorar lo que no puedes ver. La observabilidad se diseña, no se añade después del primer corte de servicio. La primera pregunta en cada incidente es "¿qué cambió y quién está afectado?" — un sistema que no puede responderla convierte una solución de cinco minutos en una excavación arqueológica.
Los principios (universales)
- Las tres señales. Emite logs estructurados (legibles por máquina, no texto libre), métricas (conteos, tasas, duraciones) y trazas (el recorrido de una solicitud a través de los servicios). Una solicitud lleva un id de correlación/traza de extremo a extremo.
- Instrumenta las señales golden para cada superficie: tasa, errores, duración (RED) por endpoint/operación, más saturación de recursos. Un nuevo endpoint no está "terminado" hasta que sea observable.
- La salud es un endpoint, no una suposición. Expone liveness ("¿estoy ejecutándome?") y readiness ("¿puedo servir tráfico?") como comprobaciones diferenciadas.
- Define SLOs para las jornadas críticas, con SLIs que las midan y un presupuesto de error que convierte la disyuntiva fiabilidad vs. funcionalidades en una decisión explícita y basada en datos.
- Alerta sobre síntomas, no sobre causas. Notifica cuando los usuarios están sufriendo (quema de SLO, readiness fallando), no ante cada parpadeo interno. Toda alerta debe ser accionable — una alerta que nadie atiende entrena a la gente a ignorar las alertas.
Los mecanismos (este stack)
- Logs JSON estructurados a stdout, recogidos por la plataforma (ej. AKS → Azure Monitor / Log Analytics). Sin logging de texto libre en los servicios.
- OpenTelemetry en el servidor de la aplicación y en PostGraphile; exporta trazas/métricas a Azure Monitor / Application Insights (o Prometheus/Grafana).
- Id de correlación propagado a través de la ruta de datos — generado en el borde, pasado Navegador → Aplicación → PostGraphile junto con cabeceras de contexto, adjunto a cada línea de log y cada span.
- Métricas RED por ruta HTTP y operación GraphQL; log de consultas lentas de Postgres +
pg_stat_statements. - Endpoints de liveness/readiness conectados a las probes de Kubernetes (ver
cloud-delivery-aks). Readiness refleja la salud real de las dependencias (¿puede alcanzar la BD?), no solo que el proceso esté en ejecución. - Frontend: reporta web-vitals y errores de cliente al mismo backend.
- SLOs por jornada con paneles de control y alertas basadas en tasa de quema.
Cuándo escalar esto
Un proyecto local o pre-lanzamiento implementa logs estructurados + endpoints de salud ahora y pospone SLOs/alertas hasta que haya usuarios reales que proteger. Indica el modo en la primera decisión registrada.
Justificación completa: Artículos IX y XVI de la constitución, incluida en engineering-constitution/references/engineering-constitution.md.