ESB

WSO2 EI Tutorial: Trazabilidad con Jaeger

En un mundo moderno el desarrollo de aplicaciones abarca más aspectos que la simple realización del código. Implica tareas de despliegue a través de la integración continua o control del uso y/o de su estado a través de la monitorización. Sobre todo en la creación y mantenimiento de micro servicios.

Centrados en este último aspecto WSO2 nos provee el perfil de Analytics integrado en el Enterprise Integrator. A través del cual podemos recopilar estadísticas del uso de cada uno de los artefactos desplegados u obtener trazas de los mismos. Esto nos ayudará a optimizar el rendimiento y latencia de nuestros servicios, mejorar en el análisis de errores o apoyar en la supervisión de transacciones distribuidas.

Ahora, como parte de una de las mejoras de la versión 6.6.0, podremos conectar el WSO2 Enterprise Integrator a otras herramientas de monitorización y observabilidad de trazas distintas al Analytics. Más concretamente con Jaeger.

1. Qué es Jaeger y cómo conectarlo con WSO2 Enterprise Integrator

Jaeger es una herramienta que nos ayudará con la supervisión de aplicaciones, a través de la trazabilidad. El cual tiene como principal virtud, su adaptación al modelo de OpenTracing.

Para ver el funcionamiento conjunto de ambos vamos a hacer un simple ejemplo de su funcionamiento a través de una API dummy. Llamaremos a esta API, se ejecutarán varios mediadores y se devolverá una respuesta. Y tanto el  WSO2 Enterprise Integrator como Jaeger pueden ser desplegados fácilmente a través de un docker-compose, por ejemplo.

Por defecto WSO2 Enterprise Integrator no está preparado para el envío de información y es por ello que tendremos que modificar el fichero synapse.properties antes de arrancarlo. Deberemos modificarlo para habilitar el envío de las trazas.

mediation.flow.statistics.tracer.collect.payloads=true
mediation.flow.statistics.tracer.collect.properties=true
mediation.flow.statistics.collect.all=true

Con esto indicaremos que se permite enviar información de los mensajes y sus propiedades de contexto y transporte. Además también habilita el envío de esta información para todos los artefactos.

Y además también tendremos que configurar el mismo fichero, para indicar a dónde debe enviar la información, por defecto es el Analytics.

opentracing.enable=true
jaeger.sampler.manager.host=localhost
jaeger.sampler.manager.port=5778
jaeger.sender.agent.host=localhost
jaeger.sender.agent.port=6831
jaeger.reporter.log.spans=true
jaeger.reporter.max.queue.size=1
jaeger.reporter.flush.interval=10000

1.1 Creando API

1.1.1 Primer Paso

Una vez arrancados ambos productos, vamos a crear la API de prueba. Va a ser algo sencillo con diferentes mediadores dentro. Y una vez creada pulsaremos sobre la opción enable tracing. De esta forma, cada vez que invoquemos un método de la API, desde el WSO2 EI se enviará información hacia Jaeger.

Para ello accedemos a la URL http://localhost:16686 y buscamos el servicio wso2-synapse. Y se mostrarán todas las invocaciones realizadas a WSO2.

1.1.2 Segundo Paso

Desde este panel podremos ver las invocaciones realizadas, filtrarlas u ordenarlas. Y pulsando sobre cada una de ellas, tendremos una visualización más amplia de dicha llamada.

1.1.3 Tercer Paso

Se mostrará el tiempo de procesado, los elementos que han intervenido internamente y cómo se han visto afectadas las propiedades y el mensaje a través de estos elementos. Todo ello información que nos permitirá mejorar nuestros análisis del comportamiento actual y futuro de la aplicación.

Además también se pueden seleccionar diferentes trazas y compararlas:

2. CONCLUSIÓN

Como veis, Jaeger es una herramienta sencilla pero muy útil tanto a la hora del desarrollo como del mantenimiento. La cual se puede enlazar fácilmente dentro del ecosistema WSO2.

implementar-wso2-ebook-es

Implementa WSO2 paso a paso en tu empresa

Descubre todo lo que necesitas saber para integrar los sistemas de tu empresa con WSO2 con nuestra guía. ¡Incluye casos de éxito!

daniel blanco
Written By

Daniel Santiago Blanco Cuadrado

Senior Integration Engineer