Domina los logs en producción con estructura, niveles correctos y alertas accionables. Aquí se explica cómo pasar de simples prints a un sistema fiable basado en structured logging, exception tracking y una cultura de responsabilidad on call que reduce caos y acelera la respuesta ante fallos.
¿Por qué los logs en producción requieren estructura y niveles claros?
Cuando producción falla, no puedes “reiniciar y probar” como en local. Los logs deben ser moderados, útiles y siempre parseables. Con miles de máquinas y un flujo inmenso, el texto libre no escala: necesitas structured logging en JSON para que cualquier sistema pueda agregar, filtrar y analizar sin fricción.
Usa niveles de log: logger.info, logger.warn, logger.error, logger.fatal. Cada uno comunica severidad y urgencia.
Estandariza el formato: structured logging en JSON permite parsear y agregar. Evita mezclar texto libre con objetos sin estándar.
Priorización efectiva: busca fatal cuando el servicio cae. Trata como error lo que controlas internamente. Deja en info fallos de servicios externos que no controlas, si no impactan la disponibilidad.
Ejemplo de herramientas: Pino en Node facilita structured logging en JSON.
Ideas clave:
“Ser moderado con los logs” porque cuestan y pueden saturar. Aun así, cuando “todo se rompe”, los logs son tu ancla.
Sin estructura, no podrás “meterlo en ningún sistema de logs para agregar”. La estandarización es no negociable.
¿Qué ventajas aporta el structured logging en JSON?
Parseo confiable: cada entrada es un objeto con claves predecibles.
Búsquedas precisas: filtra por nivel, servicio, request-id o error-id.
Agregación y visualización: integra con tu pila de observabilidad sin hacks.
¿Cómo decidir el nivel correcto de cada evento?
Evalúa impacto en usuario y estado del servicio.
Define reglas claras por dominio: qué es info, warn, error, fatal en tu aplicación.
Mantén consistencia para que los filtros funcionen cuando más importa.
¿Cómo organizar la responsabilidad y el on call para incidentes?
La persona o equipo que despliega es quien debe estar on call. No delegues en un operador ajeno: quien tiene más contexto soluciona más rápido y mejor.
Recibe alertas de lo crítico y haz seguimiento de cada incidente.
Evita buscar a ciegas en un “stream infinito”: usa un exception tracker para errores no manejados.
Envía excepciones a un “bucket” especial: priorízalas y dales visibilidad.
Prácticas recomendadas:
Integraciones útiles: crear un issue en GitHub, enviar alerta a Slack, o ambas según severidad.
Usa reglas de severidad: si es crítico, que suene el teléfono; si es menor, que vaya a un backlog para revisión sin prisa.
Observa el life cycle por release: relaciona excepciones con despliegues para rastrear regresiones rápido.
¿Por qué un exception tracker cambia el juego?
Centraliza errores no manejados con contexto suficiente para actuar.
Permite reglas de alerta por severidad e impacto.
Prioriza: lo que llega al exception tracker merece más atención que el ruido de logs generales.
¿Qué decisiones tomar sobre exception tracking y datos sensibles?
Hay soluciones abiertas como Sentry (puedes auto-hospedar) o usar el servicio del proveedor. Considera:
Si lo corres en tu infraestructura y se cae, también caen las alertas: te quedas ciego.
Prefiere no enviar datos personales en errores: minimiza riesgo y habilita proveedores externos con tranquilidad.
Define una integración entre tu logger y el exception tracker para no duplicar código.
¿Cómo mapear niveles de log a Sentry sin esfuerzo extra?
Un patrón productivo: asociar niveles altos a envíos automáticos al exception tracker. Así, quien usa la librería no debe “pensarlo”.
Menos llamadas a operaciones y más control del equipo dueño del servicio.
Alertas alineadas a quien puede arreglar el problema.
Flujo natural: logger.error y logger.fatal van a Sentry; el resto, solo a la pila de logs.
¿Tienes una práctica útil de structured logging o un flujo de on call que te funciona? Comparte tu enfoque y qué alertas realmente te ayudan a reaccionar a tiempo.
Domina los logs en producción con estructura, niveles correctos y alertas accionables. Aquí se explica cómo pasar de simples prints a un sistema fiable basado en structured logging, exception tracking y una cultura de responsabilidad on call que reduce caos y acelera la respuesta ante fallos.
¿Por qué los logs en producción requieren estructura y niveles claros?
Cuando producción falla, no puedes “reiniciar y probar” como en local. Los logs deben ser moderados, útiles y siempre parseables. Con miles de máquinas y un flujo inmenso, el texto libre no escala: necesitas structured logging en JSON para que cualquier sistema pueda agregar, filtrar y analizar sin fricción.
Usa niveles de log: logger.info, logger.warn, logger.error, logger.fatal. Cada uno comunica severidad y urgencia.
Estandariza el formato: structured logging en JSON permite parsear y agregar. Evita mezclar texto libre con objetos sin estándar.
Priorización efectiva: busca fatal cuando el servicio cae. Trata como error lo que controlas internamente. Deja en info fallos de servicios externos que no controlas, si no impactan la disponibilidad.
Ejemplo de herramientas: Pino en Node facilita structured logging en JSON.
Ideas clave:
“Ser moderado con los logs” porque cuestan y pueden saturar. Aun así, cuando “todo se rompe”, los logs son tu ancla.
Sin estructura, no podrás “meterlo en ningún sistema de logs para agregar”. La estandarización es no negociable.
¿Qué ventajas aporta el structured logging en JSON?
Parseo confiable: cada entrada es un objeto con claves predecibles.
Búsquedas precisas: filtra por nivel, servicio, request-id o error-id.
Agregación y visualización: integra con tu pila de observabilidad sin hacks.
¿Cómo decidir el nivel correcto de cada evento?
Evalúa impacto en usuario y estado del servicio.
Define reglas claras por dominio: qué es info, warn, error, fatal en tu aplicación.
Mantén consistencia para que los filtros funcionen cuando más importa.
¿Cómo organizar la responsabilidad y el on call para incidentes?
La persona o equipo que despliega es quien debe estar on call. No delegues en un operador ajeno: quien tiene más contexto soluciona más rápido y mejor.
Recibe alertas de lo crítico y haz seguimiento de cada incidente.
Evita buscar a ciegas en un “stream infinito”: usa un exception tracker para errores no manejados.
Envía excepciones a un “bucket” especial: priorízalas y dales visibilidad.
Prácticas recomendadas:
Integraciones útiles: crear un issue en GitHub, enviar alerta a Slack, o ambas según severidad.
Usa reglas de severidad: si es crítico, que suene el teléfono; si es menor, que vaya a un backlog para revisión sin prisa.
Observa el life cycle por release: relaciona excepciones con despliegues para rastrear regresiones rápido.
¿Por qué un exception tracker cambia el juego?
Centraliza errores no manejados con contexto suficiente para actuar.
Permite reglas de alerta por severidad e impacto.
Prioriza: lo que llega al exception tracker merece más atención que el ruido de logs generales.
¿Qué decisiones tomar sobre exception tracking y datos sensibles?
Hay soluciones abiertas como Sentry (puedes auto-hospedar) o usar el servicio del proveedor. Considera:
Si lo corres en tu infraestructura y se cae, también caen las alertas: te quedas ciego.
Prefiere no enviar datos personales en errores: minimiza riesgo y habilita proveedores externos con tranquilidad.
Define una integración entre tu logger y el exception tracker para no duplicar código.
¿Cómo mapear niveles de log a Sentry sin esfuerzo extra?
Un patrón productivo: asociar niveles altos a envíos automáticos al exception tracker. Así, quien usa la librería no debe “pensarlo”.
Menos llamadas a operaciones y más control del equipo dueño del servicio.
Alertas alineadas a quien puede arreglar el problema.
Flujo natural: logger.error y logger.fatal van a Sentry; el resto, solo a la pila de logs.
¿Tienes una práctica útil de structured logging o un flujo de on call que te funciona? Comparte tu enfoque y qué alertas realmente te ayudan a reaccionar a tiempo.
Los niveles en los logs son sumamente importantes, y también el definirlos correctamente.
También es sumamente importante manejar los logs con una estructura que pueda ser parseada. De esta manera, si tenemos que estudiar un bloque gigante de logs de errores, podríamos utilizar un sistema de logs o desarrollar un script que procese esa información.
Un Exception es un error que no está manejado en nuestro código. Si esto llega a ocurrir en nuestro servicio, debería ir a un Bucket diferente; debería ir en la pila de logs, pero también debe tener un espacio especial en algún lado (crear un issue en GitHub, crear un Slack alert, etc) con el fin de llamar nuestra atención para que podamos atenderlo y resolverlo lo más rápido posible, aunque no cause downtime. Esto es Exception tracking.
Hay varias soluciones para Exception Tracking, una de ellas es Sentry. Sentry nos permite enviar un Exception hacia ellos y establecer reglas (si hay un error de cierta severidad, por ejemplo, se nos notificará a través de nuestro teléfono móvil; o si es un error leve, se crea una historia de usuario en el Backlog de Sentry y nos llega un mensaje a Slack, el cual podremos ver en jornada laboral sin ninguna prisa). El objetivo es que lo que llegue a Sentry debe tener nuestra atención por encima de lo que esté reportado en los logs, porque son fallas que directa o indirectamente afectan a la plataforma en producción.
Es muy importante contar con un Exception Tracker para estudiar el lifecycle de los despliegues a producción.
Para clasificar los logs y entender mejor la severidad de los problemas, utiliza niveles de log adecuados. Los más comunes son:
Info: Para mensajes informativos que no indican un problema.
Warn: Advertencias sobre condiciones que podrían convertirse en problemas.
Error: Indica fallos en la ejecución que pueden afectar el funcionamiento.
Fatal: Errores críticos que causan la caída del sistema.
Además, considera implementar Structured Logging para que los logs sean más fáciles de analizar. Esto consiste en usar un formato estándar como JSON, facilitando la búsqueda y el filtrado en sistemas de gestión de logs.