Opera y lanza

Observabilidad y logging estructurado

Correlaciona logs redactados, trazas OpenTelemetry, readiness de cola y alertas entre web y workers.

Sincronizado con el commit 2a1a04a del starter.

Usa esta página para que soporte e incidentes sean posibles antes del primer incidente. Sushi SaaS emite JSON a stdout; deliberadamente no elige por ti proveedor de almacenamiento de logs, retención, cuadros de mando ni alertas.

OpenTelemetry es opcional y neutral. Configura OTEL_ENABLED=true, un OTEL_SERVICE_NAME distinto por proceso y endpoint/headers OTLP estándar. Se exportan spans de requests, fetch y jobs; los logs dentro de un span incluyen trace_id y span_id. Sin habilitarlo no tiene efecto.

/api/ready expone conteos sin payload, jobs fallidos/obsoletos y edad del más antiguo. Trabajo fallido o con más de diez minutos degrada la cola sin retirar tráfico; un fallo de dependencia sigue devolviendo 503.

Toma tres decisiones operativas

  • Envía stdout al colector de tu plataforma o a Datadog, Better Stack, Grafana u otro servicio. El contrato de la aplicación no cambia.
  • Usa info en producción salvo durante una investigación concreta. debug aumenta volumen y puede reducir la retención útil.
  • Decide qué identificadores puede buscar soporte. Los IDs de petición, organización, trabajo, pedido y evento Stripe ayudan; los correos y payloads completos normalmente no.

Está listo para producción cuando: una petición se sigue hasta el proveedor con un ID, un secreto de prueba queda oculto, el usuario recibe un error seguro y traducido, y una alerta abre la consulta de logs que necesita el operador.

Node usa Pino y edge emite el mismo contrato JSON. Los logs van a stdout para la plataforma; la aplicación no gestiona archivos. LOG_LEVEL: debug, info, warn o error.

Propaga el request ID por rutas, servicios, jobs, órdenes/eventos Stripe y proveedores. Registra campos como evento, org_uuid, UUID seguro, job/order, duración y resultado, no solo prosa.

Se redactan authorization, cookies, contraseñas, tokens y claves. No registres cuerpos crudos, URLs firmadas ni exportaciones. respError guarda contexto interno y devuelve error_code traducido; nunca expongas error.message.

Monitoriza readiness, cron, reintentos agotados, webhooks action-required, latencia y 5xx. Correlaciona Slack con IDs; Slack no almacena logs.

Siguiente paso: convierte las señales importantes en alertas accionables con Notificaciones de Slack.

Observabilidad y logging estructurado · Sushi SaaS