Hacia una mejor observabilidad con Datadog
En este documento se explica la incorporación de Datadog en un producto digital de un cliente Flux IT para la gestión de recursos humanos y las mejoras que propusimos para explotar el uso de esta herramienta.
Incorporación de Datadog
El cliente se encuentra desacoplando funcionalidades en diferentes microservicios y es vital contar con una herramienta de observabilidad como Datadog para comprender y gestionar la complejidad que surge de la interconexión de múltiples servicios.
Datadog proporciona datos en tiempo real, como métricas, registros y trazas, que son fundamentales para identificar y resolver rápidamente problemas, mejorar el rendimiento, validar la fiabilidad del sistema y facilitar la toma de decisiones informadas.
Para integrarlo, se instalaron agentes de Datadog en las instancias de los servidores del cliente. Estos agentes se encargan de recopilar métricas de sistema, trazas y registros, y luego envía dichos datos a la plataforma Datadog SaaS.
Las métricas incluyen información sobre el rendimiento del sistema, mientras que las trazas proporcionan detalles sobre la ejecución de las aplicaciones, y los registros ofrecen información detallada sobre eventos específicos. En la plataforma Datadog, estos datos se almacenan, procesan y visualizan, permitiendo a las personas usuarias monitorear y analizar de manera efectiva el estado y la salud de su infraestructura y aplicaciones. Este enfoque proporciona una visión completa del rendimiento en entornos distribuidos.
Indexación de logs a través de Elastic Common Schema (ECS)
Elastic Common Schema (ECS) para logs proporciona una estructura normalizada que simplifica la indexación y búsqueda de registros en entornos distribuidos. Al adoptar ECS, hemos logrado una consistencia en la representación de datos de logs, facilitando la correlación de eventos y mejorando la eficiencia en la monitorización y resolución de problemas en la infraestructura del cliente. La normalización de campos como timestamp, message, y otros, a través de ECS, ha fortalecido nuestra capacidad para analizar de manera coherente los registros generados por diversos servicios y componentes de nuestra arquitectura.
La clave de ECS es que nos permite definir esquemas con datos de la aplicación, para poder indexar, buscar y retener información útil
A continuación, explicamos cómo se implementaron reconocidas técnicas del mundo de la observabilidad a través de ECS.
Trace IDs
Los trace IDs (identificadores de trazas) son identificadores únicos que siguen una transacción o solicitud a través de un sistema distribuido, brindando visibilidad sobre el flujo de ejecución y permitiendo un análisis detallado del rendimiento de la aplicación.
En el lado del cliente se inyectaron diferentes Trace IDs en diferentes puntos de la aplicación. Esto es de suma utilidad para los siguientes puntos:
- Debugging: Facilita el debugging, ya que simplemente se filtra simplemente por el Trace ID y se obtienen todas las trazas de ejecución de todos los servicios. Lo que permite un debugging eficaz y rápido.
- Estadísticas: Podemos inferir estadísticas sobre el estado del sistema en tiempo real. Por ejemplo, se puede saber cuántos usuarios hay en un instante de tiempo.
Incorporación en Django
Por último, se menciona que esto se implementa a través de la siguiente librería de Python: https://github.com/elastic/ecs-logging-python. Esto permite configurar los metadatos a nivel global del log y enviar parámetros a través de los logs.
Por ejemplo, en la imagen adjunta podemos ver cómo se puede estructurar un log con índices de ECS:
Generación de métricas
Gracias a los logs estructurados por ECS, es muy sencillo utilizar Datadog para generar métricas sobre la aplicación e incluso configurar alertas.
Algunos ejemplos de métricas que podemos mencionar son:
- Requests: se pueden visualizar la cantidad de requests en tiempo real junto con la información asociada a ellas. Esto permite detectar errores rápidamente, si hay un 500, se generan alertas desde Datadog y se puede visibilizar de forma muy sencilla. A su vez, esto permite detectar si hay un pico de performance o determinar qué end points hay que optimizar.
- Cron jobs: permite saber la cantidad de jobs que están corriendo. Esto es de suma utilidad para configurar alertas si en un determinado tiempo no se ejecutó un cron job específico.
- Analytics: gracias a la indexación de ECS, pudimos armar gráficos en tiempo real que grafican diferentes estadísticas sobre los usuarios, sin necesidad de interactuar con la base de datos.
- Recursos: se puede monitorear el consumo de memoria y CPU de cada proceso que se está ejecutando, lo que resulta de suma utilidad para ver el estado del sistema en tiempo real.
Conclusión
En resumen, la introducción de Datadog en el entorno del cliente ha sido un paso fundamental para mejorar la monitorización y la observabilidad de su infraestructura.
Se puede destacar que la indexación de logs a través de Elastic Common Schema (ECS) ha proporcionado una estructura unificada y coherente para los registros, simplificando la correlación de eventos y facilitando el análisis de datos en sistemas distribuidos.
Mientras que, por otro lado, la implementación de trace IDs ha fortalecido la capacidad del cliente para seguir el flujo de transacciones a través de diferentes servicios, brindando una visión integral del rendimiento de sus aplicaciones.
A su vez, la incorporación de Datadog en el framework Django ha mejorado la observabilidad en las aplicaciones web del cliente, permitiendo una generación efectiva de métricas clave.
Para finalizar, se puede mencionar que, en conjunto, estas incorporaciones han elevado significativamente la capacidad del cliente para detectar problemas, analizar el rendimiento y optimizar sus operaciones en un entorno distribuido.
Links y referencias
- Datadog:
https://docs.datadoghq.com/ - ECS:
https://www.elastic.co/guide/en/ecs/current/index.html - Trace IDs:
https://microservices.io/patterns/observability/distributed-tracing.html - Integración de Datadog con Python:
https://docs.datadoghq.com/integrations/python/ - Generación de métricas en Datadog:
https://docs.datadoghq.com/metrics/