Distributed Tracing

Disponible desde versión 5.1.0 de Onesait Platform (Survivor).

Objetivo

Con el objetivo de incorporar nuevas capacidades en Onesait Platform en la construcción de MSA (Arquitectura de Microservicios), hemos incorporado la funcionalidad de Tracing distribuido.

Esta funcionalidad permite trazar una petición desde que se genera hasta el final, lo cual es importante en una arquitectura de este tipo en el que una petición puede pasar por varios microservicios y módulos.

Además se incluye una UI para poder visualizar de forma sencilla la petición completa, lo que puede ayudar a diagnosticar problemas, ver cuellos de botella, tiempos largos,…

¿Cómo se ha soportado en Plataforma?

En la imagen se muestra un ejemplo de Tracing distribuido en el que intervienen dos microservicios y varios componentes de Plataforma.

Como se ve en la imagen, la solución incluye:

  • Open Telemetry Collector para recolectar las trazas de todos los componentes (de forma automática).

  • Jaeger Collector para convertir a trazar explotables.

  • DB OpenSearch para almacenar tracing.

  • Jaeger UI para visualizar tracing.

Tanto para los elementos externos como internos de plataforma, se utiliza el agente o el SDK de Open Telemetry para la instrumentación, y para obtener las trazas y enviarlas al colector Otel. 

Conceptos básicos

  • Spans: Unidad individual de trabajo. Son intervalos temporales cerrados por ejemplo una llamada a un servicio, o a una base de datos. 

  • Trazas: Conjunto de spans en una secuencia temporal desencadenadas por una acción inicial. 

  • Scope (alcance): Formaliza donde se inicia y termina cada span. 

  • Tags: Pares clave valor con información que se utilizan para consultas, filtros y trazas . 

Open Telemetry

https://opentelemetry.io/ es un estándar en este ámbito y ofrece un conjunto de SDK, API y herramientas estandarizadas e independientes del proveedor para ingerir, transformar y enviar datos a un back-end de Observabilidad.

Jaeger

Jaeger tracing recoge las trazas de Open Telemetry a través de su colector, lo almacena en Open Search y permite exportarlo a través de la UI de Jaeger, integrada en el Control Panel.

Desde la UI, puedes hacer búsquedas en función del servicio que ha iniciado la llamada para ver toda la traza y comprobar por qué componentes ha navegado, el tiempo transcurrido, y ver información de cada uno de estos spans.