Descripción general
Jaeger es un sistema de software open source que sirve para detectar operaciones entre los servicios distribuidos. Se utiliza para supervisar entornos complejos de microservicios y solucionar los problemas asociados a ellos.
¿Qué es el rastreo de entornos distribuidos?
El rastreo de entornos distribuidos es una forma de ver y comprender toda la cadena de eventos en una interacción compleja entre microservicios.
El desarrollo moderno de software en la nube se basa en los microservicios, es decir, en servicios independientes que ofrecen una función central distinta. Cuando un usuario realiza una solicitud en una aplicación, muchos servicios individuales responden para generar cierto resultado.
Una sola llamada en una aplicación puede generar la respuesta de muchos servicios diferentes que interactúan entre sí.La pregunta aquí es cómo hacen los desarrolladores y los ingenieros para aislar un problema cuando ocurre un error o cuando una solicitud se ejecuta con lentitud. Para ello, es necesario hacer un seguimiento de todas las conexiones.
Ahí es donde interviene el rastreo de entornos distribuidos. Normalmente, se ejecuta como parte de una malla de servicios, que es una forma de gestionar y observar los microservicios.
Jaeger utiliza el rastreo de entornos distribuidos para seguir la ruta de una solicitud a través de los diferentes microservicios. En lugar de adivinar, podemos observar una representación visual de los flujos de la llamada.
La información organizada sobre las operaciones es útil para la depuración y la optimización de los servicios. Jaeger incluye herramientas para supervisar las operaciones de los entornos distribuidos, optimizar el rendimiento y la latencia y realizar un análisis de la causa raíz (RCA), que es un método para la resolución de problemas.
Comunidad open source de Jaeger
Dado que Jaeger es un proyecto open source, se beneficia de una comunidad de cientos de colaboradores. Se basa en el uso de herramientas de instrumentación y de API de OpenTracing que no dependen de ningún proveedor en particular.
En 2015, la empresa de transporte compartido Uber desarrolló Jaeger como un proyecto open source. En 2017, la fundación Cloud Native Computing Foundation (CNCF) lo aceptó como un proyecto "en incubación" y, en 2019, pasó a estar dentro de la categoría de proyectos "graduados".
Funcionamiento de Jaeger
La solución recopila, almacena y visualiza los rastreos de los sistemas distribuidos y ofrece información sobre el flujo de solicitudes a través del sistema, el tiempo empleado y la localización de errores.
Jaeger presenta las solicitudes de ejecución como rastreos, los cuales muestran la ruta de ejecución/datos que se generan a través de un sistema.
Un rastreo se compone de uno o varios intervalos, que son las unidades lógicas de trabajo en Jaeger, como las consultas a bases de datos o las solicitudes HTTP. Todos los intervalos incluyen el nombre de la operación, la hora de inicio y la duración, y pueden agruparse y ordenarse.
Proceso de Jaeger
El software hace un seguimiento de las ejecuciones de una operación a través de un sistema distribuido y asigna rutinas específicas a varios de sus elementos.
El SDK de OpenTelemetry se puede utilizar con diferentes lenguajes de programación y luego se exporta a un formato que Jaeger u otra plataforma de rastreo comprendan.
Una vez en funcionamiento, sigue el proceso que se describe a continuación:
- Para llevar a cabo un seguimiento, Jaeger primero debe instrumentar una aplicación. Este proceso modifica el código para poder generar rastreos. Puede realizarse de forma manual o automática. En el primer caso, se utilizan bibliotecas cliente de Jaeger que están disponibles para varios lenguajes de programación, en tanto que en el segundo, se hace uso de middleware y marcos que son compatibles con las API OpenTracing u OpenTelemetry.
- Cuando se ejecuta la aplicación, los rastreos muestran en detalle la ruta de ejecución de una operación en los microservicios. Todos los rastreos constan de varios intervalos, cada uno de los cuales contiene información, como el nombre de la operación, la hora de inicio y de finalización y las etiquetas de par de clave-valor que aportan más contexto (por ejemplo, códigos de estado HTTP o mensajes de error).
- Para conectar distintos intervalos en un único rastreo, Jaeger pasa identificadores y otro tipo de contexto de rastreo entre servicios en las solicitudes y sus respuestas. A esta operación se la denomina propagación de contexto. Cada intervalo y rastreo poseen un identificador único que permite unir los elementos individuales del proceso de una solicitud.
- Los intervalos se recopilan con las bibliotecas cliente de Jaeger y se envían a Jaeger Agent, el cual suele implementarse junto con la aplicación o como DaemonSet en otros entornos, por ejemplo, Kubernetes.
- Jaeger Collector recibe los intervalos de Jaeger Agent y los almacena en una base de datos backend. Este software es compatible con varias opciones de almacenamiento, como Elasticsearch, Cassandra o Google Cloud Bigtable, lo cual ofrece escalabilidad y flexibilidad a la hora de gestionar los datos de rastreo.
- El servicio Jaeger Query proporciona una interfaz de usuario para que busquen y vean los rastreos. De este modo, los desarrolladores y operadores pueden explorar información detallada sobre cada uno de los rastreos, visualizar la jerarquía de los intervalos y su duración, así como analizar el comportamiento y el rendimiento del sistema.
- Jaeger Console es una interfaz de usuario que permite visualizar los datos del rastreo de entornos distribuidos para obtener información sobre los problemas de latencia, el análisis de errores, la evaluación de dependencias y la optimización del rendimiento.
Casos prácticos de Jaeger
Jaeger proporciona información sobre el comportamiento de los microservicios y las solicitudes a través de un sistema distribuido. Así, puede aportar las siguientes ventajas:
- Optimización del rendimiento: puede señalar con precisión los puntos en los que se producen retrasos dentro de una serie de microservicios, así como mostrar el modo en que interactúan los servicios y su interdependencia para optimizar la asignación de los recursos.
- Análisis de la causa raíz: rastrea el origen de una falla en el servicio o un resultado inesperado para brindar una solución rápida. Además, puede integrarse con sistemas de supervisión que alerten a los equipos cuando surjan patrones inusuales, como picos de latencia o tasas de errores.
- Seguridad y cumplimiento: al mostrar el flujo de datos a través de un sistema, los rastreos pueden utilizarse para hacer un seguimiento de auditoría, lo que es fundamental para cumplir los requisitos normativos en materia de tratamiento y procesamiento de datos.
- Desarrollo y pruebas: los desarrolladores pueden realizar rastreos de Jaeger en entornos locales, de modo que puedan detectar los errores, la latencia y los problemas de dependencia antes de implementar una aplicación.
Rastreo de entornos distribuidos y Red Hat
Red Hat® OpenShift® Observability es un amplio conjunto de funciones para la determinación del estado interno de los sistemas que permite que los usuarios obtengan información detallada sobre el rendimiento y el estado de sus aplicaciones e infraestructura basadas en OpenShift. Una función de la stack de determinación del estado interno de Red Hat es el rastreo de entornos distribuidos, que hasta 2024 incluía Jaeger. A principios de este año, la empresa dejó de utilizar Jaeger y Elasticsearch, y optó por Tempo Operator y la compilación OpenTelemetry de Red Hat.
Esta compilación se puede utilizar para recopilar rastreos en varios formatos, no solo los que provienen de clientes de Jaeger, sino también de Zipkin y OpenTelemetry Protocol (OTLP); sin embargo, eso no es más que el principio, ya que este recopilador puede emplearse para recoger todas sus señales de determinación del estado interno. Las últimas versiones de rastreo de entornos distribuidos de Red Hat incorporan numerosas mejoras. Además de implementar la generación automática de indicadores de los intervalos, permite crear alertas en función de estos indicadores. Para ayudar a la integración de la stack de Prometheus, incorporamos a nuestra compilación el elemento Target Allocator, el cual permite que los clientes rastreen los extremos de la aplicación fácilmente, y gestionen y ajusten la capacidad de manera eficiente.
Tempo remplaza las funciones de almacenamiento y visualización de los rastreos de entornos distribuidos que ofrece el producto Jaeger. Facilita las implementaciones locales sencillas para probar el rastreo o para solucionar rápidamente los problemas de las implementaciones de gran tamaño y de aquellas que no requieren un gran espacio de almacenamiento. Además, sigue incorporando la interfaz de usuario de Jaeger, lo cual garantiza una visualización clara de los rastreos.