Saltar al contenido principal

Midiendo trazabilidad con Grafana Tempo

· 4 min de lectura
Julián Sánchez
Software Developer @sils.tech

Introducción

En los ultimos meses varios cambios significativos se dieron en el equipo y en la plataforma debido a la implementación paneles de monitoreo y recolección de metricas en algunos de nuestros servicios. Algunos de estos cambios llevaron a la detección de ataques maliciosos en nuestra infraestructura y mejoras significativas en el rendimiento de la plataforma tales como caidas, errores y alta disponibilidad.

Pero como ya saben nuestro producto está diseñado en una arquitectura distribuida la cual cada parte de la misma tiene una finalidad especifica, con su propio repositorio, implementación de despliegues y código fuente, entonces que pasa si queres tener visibilidad mediante metricas como tenemos implementado en apis la cual es nuestro principal punto de entrada al backend de keeper?

Para lograr este objetivo aparecen los conceptos de Trazas y de Grafana Tempo.

Trazas

Una traza representa el viaje de una petición, acción, evento a traves de todos los nodos o partes de una sistema distribuido. Estan compuestas por uno o más spans, un span es la unidad de trabajo de una traza que posee un tiempo de inicio relativo al comienzo de la misma, duración y un nombre de operación. Usualmente tiene una referencia al span padre y posee atributos clave/valor. Una caracteristica de las trazas es que nunca están completas, siempre se puede agregar a una traza un conjunto de spans aún si han pasado dias desde el ultimo registro.

Ejemplo

Un usuario ingresa su correo en un formulario para suscribirse, lo que genera un trace ID que sigue toda la cadena de procesos. Ese simple clic puede activar múltiples microservicios distribuidos.

Primero, un microservicio verifica el correo; si es válido, se guarda en la base de datos. Otro servicio lo anonimiza y le agrega metadatos antes de enviarlo a otro que evalúa si la solicitud es de una fuente relevante.

Cada servicio registra eventos con marcas de tiempo, generando trazabilidad completa. El proceso finaliza cuando ya no se agregan más acciones al trace ID.

Grafana Tempo

Grafana Tempo es una herramienta de código abierto para distributed tracing, diseñada para ser fácil de usar y escalar. Permite buscar trazas, generar métricas a partir de spans y vincular datos de trazabilidad con logs y métricas.

Para implementar un pipeline de tracing se necesitan 4 componentes:

  • Instrumentación del cliente: para capturar los eventos.

  • Pipeline: para recolectar y procesar los datos.

  • Backend: donde se almacenan y gestionan las trazas (por ejemplo, Grafana Tempo).

  • Visualización: herramientas como Grafana para explorar y analizar los datos.

alt text

Instrumentación del cliente

La instrumentación del cliente es el primer paso para una pipeline de trazabilidad distribuida. Consiste en agregar puntos en la aplicación que generan y envían spans, permitiendo registrar el comportamiento de la app desde su origen.

Pipeline (Grafana Alloy)

Una vez instrumentada la aplicación, los traces se envían a un backend para su almacenamiento y visualización. Aunque muchas apps pueden enviar directamente a Tempo, se puede usar una tracing pipeline para bufferizar y reenviar spans, lo cual es más útil en sistemas grandes y complejos.

Grafana Alloy es un servicio que se despliega cerca de la app (en el mismo nodo o clúster) y se encarga de recoger rápidamente los traces y reenviarlos al backend. También maneja funciones como agrupamiento de traces y reintentos en caso de fallos.

Backend (Grafana Tempo)

Grafana Tempo es un backend de tracing distribuido, fácil de usar y altamente escalable. Se encarga de almacenar y consultar trazas bajo demanda, permitiendo analizar el recorrido completo de las solicitudes dentro de un sistema distribuido.

Visualización

La herramienta Grafana tiene implementado un datasource especifico de Tempo para visualizar las trazas recolectadas.

Manos a la obra

Vamos a implementar mediante containers de docker una implementación de Grafana Tempo la cual esta detallada en la documentación de Grafana https://grafana.com/docs/tempo/latest/getting-started/docker-example/

alt text

Continuara!

alt text