observability-and-debugging
Implementa un workflow de observabilidad y debugging para apps backend/frontend con logging estructurado, trazas de sesión y métricas básicas. USE FOR: debug de errores intermitentes, reproducir bugs,
SKILL.md.github/skills/observability-and-debugging/SKILL.md
GitHubObservability and Debugging
Objetivo
Estandarizar cómo diagnosticar incidentes y bugs en sistemas fullstack usando tres pilares: logs estructurados, trazas de sesión y métricas operativas mínimas.
Resultado Esperado
- Incidente reproducido o delimitado con evidencia objetiva.
- Señales clave instrumentadas en backend y frontend.
- Hipótesis priorizadas con pasos de validación claros.
- Cierre con causa raíz probable, impacto y acciones preventivas.
Entradas Mínimas
- Síntoma principal (error, timeout, latencia, reconexión fallida).
- Entorno afectado (local/dev/staging/prod).
- Ventana temporal aproximada del fallo.
- Ruta funcional impactada (endpoint/página/stream WS).
Flujo Paso a Paso
1. Definir el incidente
- Redactar un resumen de 1-2 líneas del problema.
- Identificar severidad inicial:
S1: caída total o corrupción de datos.S2: funcionalidad principal degradada.S3: problema menor o intermitente con workaround.
- Capturar evidencia inicial (capturas, logs, payload, timestamp).
Chequeo de salida:
- El problema está definido con contexto suficiente para iniciar análisis.
2. Establecer correlación por sesión/request
- Generar o propagar
session_id/request_iden backend y frontend. - Confirmar que cada evento relevante incluye el identificador de correlación.
- En WebSocket, usar
session_idconsistente desde inicialización hasta cierre.
Decisiones:
- Si no existe correlación: implementarla primero antes de seguir investigando.
- Si hay múltiples hops (proxy, gateway): preservar ID en todos los saltos.
Chequeo de salida:
- Se puede reconstruir una historia de ejecución end-to-end por ID.
3. Instrumentar logging estructurado
- Usar formato JSON o clave-valor uniforme.
- Incluir campos mínimos:
timestamp,level,service,env,session_id/request_id,event,duration_ms,status,error_code. - Evitar datos sensibles (tokens, secretos, PII).
Decisiones:
- Errores reproducibles: aumentar nivel temporalmente a
debugen área afectada. - Alto volumen: muestreo de logs no críticos para reducir ruido.
Chequeo de salida:
- Logs legibles por máquina y comparables entre servicios.
4. Añadir trazas de sesión
- Definir spans por operación clave:
http.requestsimulation.initws.connectws.stream_tickws.disconnect
- Añadir atributos: tamaño payload, número de mensajes, estado final, motivo de cierre.
Decisiones:
- Si hay latencia alta: priorizar spans de cola, serialización y red.
- Si hay desconexiones: capturar códigos de cierre WS y retries.
Chequeo de salida:
- Existe timeline por sesión con tiempos y puntos de falla.
5. Definir métricas básicas
- Métricas recomendadas:
http_requests_total(por ruta/status)http_request_duration_ms(p50/p90/p99)ws_active_connectionsws_messages_sent_totalws_message_size_bytesws_disconnect_total(por código)simulation_start_totalsimulation_failed_total
- Configurar alertas mínimas sobre errores y latencia.
Decisiones:
- Sin dashboard: empezar con export simple + umbrales en logs.
- Con dashboard: panel rápido de salud por endpoint y stream.
Chequeo de salida:
- Hay visibilidad cuantitativa para detectar y comparar degradaciones.
6. Ejecutar triage guiado por hipótesis
- Formular 2-3 hipótesis máximas, ordenadas por probabilidad/impacto.
- Diseñar experimento por hipótesis:
- Qué métrica/log/span la valida o descarta.
- Qué resultado esperado confirma la hipótesis.
- Ejecutar cambios mínimos para validar (sin refactors amplios).
Chequeo de salida:
- Hipótesis confirmada o descartada con evidencia.
7. Cierre y prevención
- Documentar:
- causa raíz (confirmada o más probable),
- impacto,
- mitigación aplicada,
- deuda técnica pendiente,
- acción preventiva (test, alerta, runbook).
- Crear tareas para endurecer observabilidad en zonas ciegas.
Chequeo de salida:
- Existe plan concreto para reducir recurrencia del incidente.
Playbooks Rápidos
A. Timeouts HTTP
- Revisar
p95/p99por endpoint. - Verificar spans lentos por fase.
- Confirmar límites de timeout de cliente y servidor.
- Reducir payload o costo por request.
B. Desconexiones WebSocket
- Registrar código de cierre y momento.
- Correlacionar con picos de mensajes/tamaño.
- Verificar heartbeat/retry/backoff del cliente.
- Validar límites de infraestructura (proxy/load balancer).
C. Bug intermitente no reproducible
- Activar logging aumentado por ventana limitada.
- Forzar correlación por
session_id. - Capturar muestra representativa de sesiones fallidas vs exitosas.
- Comparar diferencias en secuencia de eventos.
Reglas de Calidad
- No debuggear a ciegas: siempre con hipótesis y evidencia.
- No mezclar fixes de comportamiento con refactors grandes en el mismo ciclo.
- No registrar secretos ni datos sensibles en logs/trazas.
- No cerrar incidente sin acción preventiva verificable.
Definición de Terminado
- Logs estructurados activos en puntos críticos.
- Correlación end-to-end disponible por sesión/request.
- Métricas mínimas expuestas y revisadas.
- Incidente documentado con causa/mitigación/prevención.
Plantilla Rápida de Ejecución
- Definir incidente y severidad.
- Asegurar correlación por
session_id/request_id. - Instrumentar logs estructurados.
- Instrumentar trazas por operaciones clave.
- Exponer métricas base y umbrales.
- Ejecutar hipótesis y validar evidencia.
- Cerrar con RCA y prevención.