Table of Contents |
---|
...
Objetivo
El objetivo de esta funcionalidad es disponer de Trazas distribuidas en Plataforma, lo que nos permitirá rastrear 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 entra al sistema hasta que se procesa.
La petición traceará desde la entrada, que puede ser un módulo de plataforma (como el Api Manager) o un microservicio gestionado por plataforma incluyendo todos los módulos de plataforma.
Objetivos de la funcionalidad
Con esta nueva funcionalidad añadida a la Onesait Platform, se pretende:
Monitorear transacciones distribuidas.
Poder resolver problemas optimización de rendimiento y latencia.
Análisis para obtener la raíz del problema.
Detección de anomalías.
Análisis de dependencia de servicios.
Propagación de contexto distribuido.
¿Cómo se ha soportado?
...
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 ayudarnos 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 2 microservicios y varios componentes de Plataforma.
...
Como se 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, obtener las trazas y enviarlas al colector Otel.
¿Qué es OTel?
El objetivo de https://opentelemetry.io/ es proporcionar un conjunto de SDK, API y herramientas estandarizadas e independientes del proveedor para ingerir, transformar y enviar datos a un back-end de Observabilidad.
Desde el colector de trazas de OTel se transmiten al colector Jaeger.
...
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 .
¿Qué es Jaeger?
Jaeger (Jaeger tracing) se utiliza para monitorear y solucionar problemas de sistemas distribuidos basados en microservicios, que incluyen:
Propagación de contexto distribuida
Monitoreo de transacciones distribuidas
Análisis de raíz de la causa
Análisis de dependencia del servicio
Optimización de rendimiento/latencia
Entre el colector de Jaeger y la base de datos Open Search se puede utilizar Kafka como una cola persistente intermediaria.
...
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 nos permite exportarlo a través de la UI de Jaeger, integrada en el Control Panel.
Desde la UI podemos hacer búsquedas en función del servicio que ha iniciado la llamada para ver toda la traza y comprobar porque componentes ha navegado, el tiempo transcurrido e información de cada uno de estos spans.
...
Ejemplo
Para aclarar un poco estos conceptos se muestra como podrían interactuar 2 microservicios y estos con plataforma y como se verían las trazas simplificándolo un poco.
...
Se puede apreciar que la traza es el conjunto de spans involucrados en todo el proceso a través del tiempo y como se pueden identificar cada span con el servicio al que pertenece y en el orden que se han ejecutado.
...
Un ejemplo real
...
Para este ejemplo se ha creado un micro servicio (demoservice) de Java con Spring Boot.
...
En siguientes entradas detallaremos en profundidad como instrumentalizar los microservicios de forma automática o manual.
Instrumentación
En este enlace se muestra como instrumentar microservicios java
...