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.
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
| Nivel | Cuándo usarlo | Ejemplo |
|---|---|---|
error | Algo se rompió y necesita atención humana | Conexión a base de datos fallida, pago rechazado |
warn | Algo inesperado pero manejado | Modelo de fallback usado, cache miss, retry exitoso |
info | Eventos de negocio importantes para auditoría | Pedido creado, usuario logueado, importación completada |
debug | Detalles técnicos para desarrollo | Query 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
| Principio | Mala Alerta | Buena 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 duplicados | La misma alerta se dispara 50 veces | La alerta se dispara una vez, incluye el conteo de ocurrencias |
Niveles de Alertas
| Nivel | Respuesta | Canal | Ejemplo |
|---|---|---|---|
| P1 Crítico | Inmediata (despertar a alguien) | PagerDuty/teléfono | Procesamiento de pagos caído, riesgo de pérdida de datos |
| P2 Alto | Dentro de 1 hora (horario laboral) | Slack + email | Tasa de error elevada, rendimiento degradado |
| P3 Medio | Siguiente día hábil | Slack | Dead letter queue creciendo, job no crítico fallando |
| P4 Bajo | Revisión semanal | Dashboard | Uso 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.
| Componente | Factor de costo | Optimización |
|---|---|---|
| Ingestión de logs | Volumen (GB/día) | Filtrar logs debug en producción, muestrear logs verbosos |
| Retención de logs | Duración | 30 días caliente, 90 días tibio, archivar frío |
| Métricas | Cardinalidad (combinaciones de labels únicos) | Evitar labels de alta cardinalidad (IDs de usuario, IDs de request) |
| Trazas | Volumen + retención | Muestreo tail-based (conservar errores, descartar rutina) |
| Dashboards | Licencias de usuario + queries | Consolidar 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
| Nivel | Capacidad | Lo Que Puedes Responder |
|---|---|---|
| L0: Ninguna | console.log en producción | "Algo está roto" (tal vez) |
| L1: Logs | Logs estructurados, centralizados | "Qué pasó?" (con grep) |
| L2: Métricas | Métricas clave, dashboards básicos | "El sistema está sano ahora mismo?" |
| L3: Correlación | Correlation IDs, tracing distribuido | "Qué le pasó a esta request específica?" |
| L4: Alerting | Alertas por niveles, runbooks | "Algo se está rompiendo y lo sabemos inmediatamente" |
| L5: Proactivo | Detecció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
-
Logs no estructurados.
console.logcon concatenación de strings es ruido a escala. Usa JSON estructurado con campos tipados. -
PII en los logs. Tu agregador de logs queda regulado por el RGPD. Loggea IDs, no valores.
-
Alertar sobre todo. 200 alertas por día significa cero alertas leídas. Clasifica las alertas por severidad e impacto de negocio.
-
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).
-
Sin correlation IDs. Sin ellos, debuggear una request a través de 7 servicios requiere adivinar timestamps y rezar.
-
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.
-
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.
-
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
Guías relacionadas
Guía Empresarial de Sistemas de IA Agéntica
Guia tecnica de sistemas de IA agentica en entornos empresariales. Descubre la arquitectura, capacidades y aplicaciones de agentes IA autonomos.
Leer guíaComercio Agéntico: Cómo Dejar que los Agentes IA Compren de Forma Segura
Cómo diseñar comercio iniciado por agentes IA con gobernanza. Motores de políticas, puertas de aprobación HITL, recibos HMAC, idempotencia, aislamiento de tenants y el Agentic Checkout Protocol completo.
Leer guíaLos 9 Puntos Donde Tu Sistema de IA Filtra Datos (y Cómo Sellar Cada Uno)
Un mapa sistemático de cada lugar donde se filtran datos en sistemas de IA. Prompts, embeddings, logs, llamadas a herramientas, memoria de agentes, mensajes de error, caché, datos de fine-tuning y handoffs entre agentes.
Leer guía¿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