Registro JSON y Datadog
Por qué deberías usar JSON para el registro
Si hoy no usas registros JSON, probablemente dependes de los registros de texto plano y regex para entenderlos. Eso puede funcionar al principio, pero empezará a romperse, perderá estructura y empeorará cada vez más a medida que los sistemas crezcan. El registro JSON es el estándar. En aplicaciones modernas, tener registros estructurados y fácilmente analizables ya no es opcional. Proporciona un nivel de consistencia entre servicios sin perder la flexibilidad.
Datadog recomienda el registro JSON por una razón. Cuando los registros se emiten como JSON válido, el preprocesador de Datadog analiza automáticamente tus registros y los mapea a varios atributos reservados que reducen la sobrecarga y aseguran una extracción consistente de campos. No se necesita ninguna configuración adicional, ya que estos atributos reservados proporcionan los campos más relevantes, facilitan la integración con otros sistemas, filtrar registros, buscar de forma eficiente y configurar alertas. Los atributos reservados cruciales incluyen host, servicio, estado, trace id, span id y otros, que son esenciales para la observabilidad y la resolución de problemas.
Cómo configurarlo
En mi experiencia, había una abundancia de recursos sobre cómo configurar mejor el registro JSON. La referencia principal que utilicé fue la documentación de Datadog: https://docs.datadoghq.com/logs/log_collection/java/?tab=logback. me pareció mejor porque Datadog era la herramienta principal de observabilidad que usábamos y podrían solucionar problemas más fácilmente si surgía algún problema.
Usando la documentación de Datadog como guía, empecé creando el archivo de configuración logback-spring.xml . Aquí es donde ocurre la mayor parte del trabajo. Al principio, experimenté con varios codificadores JSON y añadí campos que pensé que podrían ser útiles. Finalmente, comprendí el poder de la simplicidad: una configuración limpia y minimalista es más fácil de mantener y menos probable que se rompa.
<springProfile name="json-logs">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
Después de añadir las dependencias requeridas de Logback y añadir este código a mi archivo logback-spring.xml, el último paso importante es establecer 'json-logs' como el perfil activo de Spring en el YAML de tu aplicación. Esto garantiza que el registro JSON esté habilitado en todo tu entorno y funcione de forma coherente en todos los servicios.
Si se siguieron correctamente estos pasos, deberías poder seguir tus registros y ver los resultados. Deberían estar en un registro clave-valor similar a este:
{"@timestamp":"2025-1-13T13:02:27.512333-02:00","@version":"1","message":"Tomcat initialized with port 8080(http)",
"logger_name":"org.springframework.boot.web.embedded.tomcat.TomcatWebServer","thread_name":"main","level":"INFO",
"level_value":20000,"appName":"json-logs"}
En este punto, tus registros en Datadog deberían estar estructurados, la correlación de trazas debería funcionar para registros con IDs de traza, y deberías ver atributos más detallados y consistentes.
Errores y consejos comunes
- Usa un anexor de archivos si eso funciona mejor para tu sistema. Para nuestro entorno, el anexo de consola se adaptaba mejor a nuestras necesidades
- No te dejes atrapar por la variedad de opciones de codificadores JSON; Lo más sencillo suele ser mejor, al menos al principio
- Revisa las reglas de procesamiento de registros existentes en tu agente Datadog. Estas reglas pueden interferir con los registros JSON e impedir que se analizen o entreguen correctamente. Asegúrate de que los loggers heredados no entren en conflicto con tu configuración
- Para tener más control, considera crear varios perfiles de muelle. Esto te permite alternar entre niveles de registro o formatos entre entornos sin cambiar el código de la aplicación
- Si el trazado no funciona para muchos de tus registros en Datadog, es porque automáticamente muestrean el trazado de muchos de tus registros. El JSON funciona, no te preocupes, pero puedes configurarlo a una velocidad diferente
Con la configuración adecuada, el inicio de sesión en JSON en Datadog se vuelve fiable y mucho más fácil de mantener. Al eliminar supuestos heredados y mantener tu configuración simple, obtienes registros estructurados, campos consistentes, correlación de trazos y filtrado y alertas más sencillos. El registro JSON no es solo una buena práctica; es esencial para mejorar la observabilidad en aplicaciones modernas.
Sobre el autor
¿Te ha gustado lo que has oído? ¿Tienes preguntas sobre lo que es lo mejor para ti? ¡Nos encantaría hablar! Contáctenos