Guía técnica

Observabilidad Que Ayuda a las 3am: Logs, Trazas y Lo Que Realmente Importa

Observabilidad en producción más allá de dashboards. Logs estructurados, correlation IDs, logs sin PII, prevención de fatiga de alertas, gestión de costos y modelo de madurez.

10 de abril de 202614 min de lecturaEquipo de Ingeniería Oronts

Los Tres Pilares Están Mal

Cada charla de observabilidad empieza con "los tres pilares: logs, métricas y trazas." Ese enfoque es incompleto. Te dice qué recolectar pero no qué hacer con ello. La pregunta real a las 3am no es "tengo logs?" Es "puedo encontrar la única línea de log que explica por qué falló el pedido de este cliente, a través de 7 servicios, en menos de 2 minutos?"

Operamos sistemas de producción con múltiples servicios, workers en segundo plano, colas de mensajes y pipelines de IA. Este artículo cubre lo que realmente ayuda cuando las cosas se rompen. Para patrones de implementación de OpenTelemetry, consulta nuestra guía de OpenTelemetry. Para observabilidad específica de IA, consulta nuestra guía de observabilidad IA.

Logs Estructurados: El Formato Que Te Salva

Los logs no estructurados son inútiles a escala. console.log('Processing order ' + orderId) se convierte en ruido en un sistema que produce 10,000 líneas de log por minuto.

Los logs estructurados son consultables, filtrables y alertables:

// No estructurado (inútil a escala)
console.log('Processing order 12345 for customer sara@beispiel.de');

// Estructurado (consultable, sin PII)
logger.info('order_processing_started', {
    order_id: 'ord_12345',
    customer_id: 'cust_abc',  // ID, no email
    channel: 'web',
    tenant_id: 'tenant_acme',
    items_count: 3,
    total_cents: 15900,
});

Disciplina de Niveles de Log

NivelCuándo usarloEjemplo
errorAlgo se rompió y necesita atención humanaConexión a base de datos fallida, pago rechazado
warnAlgo inesperado pero manejadoModelo de fallback usado, cache miss, retry exitoso
infoEventos de negocio importantes para auditoríaPedido creado, usuario logueado, importación completada
debugDetalles técnicos para desarrolloQuery SQL ejecutada, cache hit, config cargada

Producción debería correr en nivel info. El debug genera demasiado volumen. Los error y warn siempre deberían disparar una revisión (si no una alerta).

Nada de PII en los Logs

Tu agregador de logs (Datadog, CloudWatch, Loki, Elasticsearch) indexa todo. Si los logs contienen emails, nombres o números de teléfono, tu infraestructura de logs queda regulada por el RGPD.

// Mal: PII en los logs
logger.info('Email sent to sara.mustermann@beispiel.de about order 12345');

// Bien: solo IDs
logger.info('notification_sent', {
    recipient_id: 'cust_abc',
    notification_type: 'order_confirmation',
    order_id: 'ord_12345',
    channel: 'email',
});

Para la arquitectura completa de protección de PII, consulta nuestra guía de prevención de fugas de datos.

Correlation IDs: Rastreando una Request a Través de los Servicios

Una sola request de usuario puede tocar un API gateway, un servicio de autenticación, un servicio de productos, un servicio de pagos, un worker de notificaciones y un indexador de búsqueda. Sin un correlation ID, encontrar todas las entradas de log para una request requiere adivinar timestamps y hacer grep.

// Generar en el punto de entrada (API gateway o primer servicio)
const correlationId = crypto.randomUUID();

// Propagar a través de cada servicio via headers
const response = await httpClient.post('/api/orders', body, {
    headers: { 'X-Correlation-Id': correlationId },
});

// Incluir en cada entrada de log
logger.info('order_created', {
    correlation_id: correlationId,
    order_id: order.id,
    tenant_id: ctx.tenantId,
});

// Incluir en cada mensaje enviado a las colas
await queue.add('send_confirmation', {
    orderId: order.id,
    correlationId,
});

Cuando estás debuggeando, consulta por correlation ID:

correlation_id = "a1b2c3d4-e5f6-7890-abcd-ef1234567890"

Cada entrada de log de cada servicio para esa request aparece. La cadena completa es visible. Es la herramienta de debugging más impactante en sistemas distribuidos.

Fatiga de Alertas: Menos Alertas, Mejores Alertas

El enfoque por defecto: alertar sobre todo. Tasa de error > 0? Alerta. Latencia > 500ms? Alerta. Profundidad de cola > 10? Alerta. El resultado: 200 alertas por día, todas ignoradas.

Principios de Diseño de Alertas

PrincipioMala AlertaBuena Alerta
Accionable"Error occurred""Tasa de error del servicio de pagos > 5% durante 10 minutos, afectando el checkout"
Umbral con duración"Latency > 500ms" (se dispara en cada pico)"Latencia p95 > 2s durante 5 minutos consecutivos"
Impacto de negocio"CPU > 80%""Procesamiento de pedidos retrasado: profundidad de cola creciendo durante 15 minutos"
Sin duplicadosLa misma alerta se dispara 50 vecesLa alerta se dispara una vez, incluye el conteo de ocurrencias

Niveles de Alertas

NivelRespuestaCanalEjemplo
P1 CríticoInmediata (despertar a alguien)PagerDuty/teléfonoProcesamiento de pagos caído, riesgo de pérdida de datos
P2 AltoDentro de 1 hora (horario laboral)Slack + emailTasa de error elevada, rendimiento degradado
P3 MedioSiguiente día hábilSlackDead letter queue creciendo, job no crítico fallando
P4 BajoRevisión semanalDashboardUso de disco en aumento, certificado expirando en 30 días

El objetivo: las alertas P1 se disparan menos de una vez por semana. Si se disparan diariamente, o están mal configuradas o tu sistema tiene problemas de fiabilidad fundamentales.

Gestión de Costos

La observabilidad es cara. La ingestión de logs, el almacenamiento de métricas, la retención de trazas y el hosting de dashboards se acumulan rápido.

ComponenteFactor de costoOptimización
Ingestión de logsVolumen (GB/día)Filtrar logs debug en producción, muestrear logs verbosos
Retención de logsDuración30 días caliente, 90 días tibio, archivar frío
MétricasCardinalidad (combinaciones de labels únicos)Evitar labels de alta cardinalidad (IDs de usuario, IDs de request)
TrazasVolumen + retenciónMuestreo tail-based (conservar errores, descartar rutina)
DashboardsLicencias de usuario + queriesConsolidar dashboards, eliminar los que no se usan

Reducir el Volumen de Logs Sin Perder la Señal

// No loggear cada health check
if (req.path === '/health' || req.path === '/ready') {
    return next(); // Saltar logging
}

// Muestrear operaciones verbosas
if (req.path.startsWith('/api/search') && Math.random() > 0.1) {
    ctx.skipLogging = true; // Loggear solo el 10% de las requests de búsqueda
}

// Siempre loggear errores, eventos de negocio y requests lentas
logger.info('request_completed', {
    path: req.path,
    status: res.statusCode,
    duration_ms: duration,
    // Incluir campos detallados solo para requests lentas o con error
    ...(duration > 1000 || res.statusCode >= 400 ? {
        query_params: sanitize(req.query),
        response_size: res.contentLength,
    } : {}),
});

El Modelo de Madurez de Observabilidad

NivelCapacidadLo Que Puedes Responder
L0: Ningunaconsole.log en producción"Algo está roto" (tal vez)
L1: LogsLogs estructurados, centralizados"Qué pasó?" (con grep)
L2: MétricasMétricas clave, dashboards básicos"El sistema está sano ahora mismo?"
L3: CorrelaciónCorrelation IDs, tracing distribuido"Qué le pasó a esta request específica?"
L4: AlertingAlertas por niveles, runbooks"Algo se está rompiendo y lo sabemos inmediatamente"
L5: ProactivoDetección de anomalías, alertas basadas en SLO, seguimiento de costos"Algo está a punto de romperse"

La mayoría de los equipos están en L1-L2. L3 (correlation IDs) es la mayor mejora individual. L4 (buen alerting) previene el burnout. L5 es ambicioso pero alcanzable.

Errores Comunes

  1. Logs no estructurados. console.log con concatenación de strings es ruido a escala. Usa JSON estructurado con campos tipados.

  2. PII en los logs. Tu agregador de logs queda regulado por el RGPD. Loggea IDs, no valores.

  3. Alertar sobre todo. 200 alertas por día significa cero alertas leídas. Clasifica las alertas por severidad e impacto de negocio.

  4. Labels de métricas de alta cardinalidad. Usar IDs de usuario o IDs de request como labels de métricas crea millones de series temporales. Usa labels acotados (código de estado, endpoint, tenant).

  5. Sin correlation IDs. Sin ellos, debuggear una request a través de 7 servicios requiere adivinar timestamps y rezar.

  6. Sin muestreo de logs. Loggear cada health check y cada request de búsqueda a máxima verbosidad duplica tu factura de logs. Muestrea las operaciones verbosas, siempre loggea los errores.

  7. Sin presupuesto de costos para observabilidad. El gasto en observabilidad debería ser entre el 5 y el 15% del gasto en infraestructura. Rastréalo. Optimízalo.

  8. Dashboards que nadie mira. Si un dashboard no se ha consultado en 30 días, elimínalo. La proliferación de dashboards agrega costo y confusión.

Puntos Clave

  • Los logs estructurados no son negociables. JSON con campos tipados. Consultable, filtrable, alertable. Nunca concatenación de strings.

  • Los correlation IDs son la herramienta de debugging más impactante. Genéralos en el punto de entrada, propágalos a través de cada servicio y cada cola. Consulta por correlation ID para ver la cadena completa de la request.

  • Nada de PII en los logs. Nunca. Loggea IDs de clientes, no emails de clientes. Loggea IDs de pedidos, no contenidos de pedidos. Tu infraestructura de logs no debe convertirse en una responsabilidad de protección de datos.

  • Menos alertas, mejores alertas. Las alertas P1 deberían dispararse menos de una vez por semana. Cada alerta debe ser accionable. Incluye el impacto de negocio en el mensaje de alerta.

  • Presupuesta tu observabilidad. El volumen de logs, la cardinalidad de métricas, el muestreo de trazas y las políticas de retención afectan los costos. Rastrea el gasto en observabilidad como porcentaje del gasto en infraestructura.

Integramos observabilidad en cada sistema que desplegamos, ya sean nuestros servicios de IA, nuestra infraestructura cloud o nuestro desarrollo de software a medida. Si necesitas ayuda con observabilidad en producción, habla con nuestro equipo o solicita un presupuesto.

Temas cubiertos

observabilidadlogs estructuradostracing distribuidomonitoreo producciónfatiga de alertascorrelation IDslogs sin PIIcostos observabilidad

¿Listo para construir sistemas de IA listos para producción?

Nuestro equipo se especializa en sistemas de IA listos para producción. Hablemos de cómo podemos ayudar.

Iniciar una conversación