¿Qué es Jaeger?
Jaeger es un software que puede utilizar para supervisar y solucionar problemas de componentes de software interconectados, conocidos como microservicios. Varios microservicios se comunican entre ellos para completar una única función de software. Los desarrolladores utilizan Jaeger para visualizar la cadena de eventos en estas interacciones de microservicios y aislar un problema cuando algo va mal. Jaeger también se denomina Jaeger Tracing (rastreo de Jaeger) porque sigue, o rastrea, la ruta de una solicitud a través de una serie de interacciones de microservicios.
¿Por qué es importante Jaeger?
En el pasado, el diseño de software era monolítico, con varias funciones agrupadas en una única base de código. Por ejemplo, para diseñar una aplicación de pedidos de comida, se agrupaban el menú de comida, restaurantes y sistemas de pago en una sola unidad de software. Este tipo de diseño de software hacía que la solución fuera más compleja y difícil de mantener. Cuando los desarrolladores hacían cambios en el código de un área, afectaban a todo el sistema, lo que convertía el proceso de administración de cambios en algo largo y tedioso. Para resolver este problema, el diseño de la arquitectura se hizo más modular.
Microservicios
Las aplicaciones modernas funcionan como una colección de unidades independientes más pequeñas llamadas microservicios. Por ejemplo, una aplicación moderna para pedir comida puede estar formada por estas partes:
- Un servicio de geolocalización para detectar dónde está el cliente
- Un servicio que recoge y envía los pedidos a los restaurantes
- Una puerta de enlace de pago con varias opciones de pago
Cada microservicio funciona como una aplicación independiente y tiene acceso a su propia base de datos y lógica. Los microservicios se comunican entre sí mediante peticiones y respuestas, como una aplicación web. Un sistema base de microservicios también se denomina sistema distribuido.
Solución de problemas de la arquitectura de microservicios
Investigar los problemas en los sistemas distribuidos es un reto debido al complejo comportamiento de los microservicios. Por ejemplo, hacer un pedido de comida en una aplicación modular puede desencadenar varias peticiones a diferentes microservicios. Estas solicitudes pueden producirse de forma concurrente e independiente y no tienen por qué ser secuenciales. Si se produce un problema con el pedido de comida, los desarrolladores deben determinar qué microservicio lo causó. Los enfoques convencionales de seguimiento de problemas solo proporcionan una imagen parcial de la solicitud, lo que hace que la resolución de problemas de los microservicios sea tediosa.
Jaeger es una herramienta de software que los equipos de TI utilizan para obtener visibilidad y claridad en toda la cadena de eventos. Así pueden resolver los problemas más rápidamente y mejorar la experiencia del cliente.
¿Para qué se utiliza Jaeger?
Los desarrolladores utilizan Jaeger para mejorar el rendimiento de los sistemas distribuidos de diferentes maneras. A continuación, presentamos algunos ejemplos.
Monitoreo de transacciones distribuidas
Jaeger tiene características que monitorean los movimientos de datos entre los microservicios. Los desarrolladores pueden adoptar un enfoque proactivo para detectar y resolver problemas antes de interrumpir la experiencia del usuario.
Optimización de la latencia
Los análisis de Jaeger pueden localizar los cuellos de botella en los microservicios que ralentizan una aplicación. Los desarrolladores utilizan Jaeger para inspeccionar el comportamiento de los microservicios y encontrar formas de hacerlos más rápidos.
Análisis de la causa raíz
En una arquitectura de microservicios, un problema puede llevar a otros. Los desarrolladores pueden utilizar Jaeger para encontrar el punto de partida de una serie de problemas relacionados en una aplicación.
Análisis de dependencia de servicios
La dependencia de servicios significa que una aplicación depende de varios componentes para ejecutarse. Por ejemplo, una aplicación de navegación depende de los servicios de localización de la aplicación móvil. Los desarrolladores utilizan Jaeger para entender las complejas relaciones entre los diferentes microservicios.
Propagación del contexto distribuido
La propagación del contexto distribuido es la forma en que una aplicación pasa información descriptiva junto con los datos. Esto ayuda a los desarrolladores a evaluar el rendimiento de los microservicios en su conjunto. Por ejemplo, Jaeger etiqueta las solicitudes de pedidos con el nombre del cliente para que los desarrolladores puedan asociar la ruta de la solicitud con el cliente específico.
¿Cómo funciona Jaeger?
Jaeger funciona según los principios del rastreo distribuido y utiliza el marco OpenTracing.
Seguimiento distribuido
El seguimiento distribuido es una técnica de software que monitorea secuencias de eventos entre microservicios. Hace un seguimiento de todas las conexiones y proporciona tablas y gráficos para visualizar las rutas de las peticiones en una aplicación. Como herramienta de trazado distribuido, Jaeger rastrea los movimientos de las solicitudes asignando un identificador único a cada una de ellas y recogiendo información cuando un servicio concreto procesa la solicitud.
OpenTracing
OpenTracing es un marco de trabajo de código abierto, o disponible de forma gratuita, que proporciona los estándares para hacer realidad un rastreo distribuido preciso y llave en mano en los sistemas de software modernos. Por ejemplo, proporciona un estándar común para definir la estructura de la información monitoreada que viaja entre los microservicios. Jaeger utiliza OpenTracing para proporcionar una solución completa para recopilar, almacenar, gestionar, analizar y visualizar los datos de los microservicios.
Modelo de datos OpenTracing
El modelo de datos OpenTracing proporciona la definición básica para conectar los datos de diferentes componentes. Los dos términos principales que utiliza son spany trace.
Span
Un span es una única unidad lógica de trabajo hecha en un sistema de rastreo distribuido. Cada span tiene estos componentes:
- Un nombre de operación
- Una hora de inicio y una hora de finalización
- Etiquetas o valores que ayudan a los desarrolladores a analizar el span
- Registros que almacenan cualquier mensaje que el microservicio genere
- Contexto del span o descripciones adicionales del span
Trace
Un trace es una colección de uno o más spans que pertenecen al mismo proceso. Representa los eventos que ocurren durante un tiempo específico. Los spans que pertenecen al mismo rastro comparten el mismo ID de rastro. Por ejemplo, un rastreo que se genera cuando un cliente hace un pedido de comida da lugar a los siguientes spans:
- El cliente envía un pedido
- Se procesa el pago
- La lista de pedidos se envía al restaurante
- Se recoge la comida
- La comida se entrega
¿Cuáles son los componentes de Jaeger?
La plataforma de rastreo distribuido Jaeger consta de los siguientes componentes.
Cliente Jaeger
El cliente Jaeger contiene despliegues específicas del lenguaje de la API de OpenTracing en lenguajes de programación como Go, JavaScript, Java, Python, Ruby y PHP.
Los desarrolladores utilizan estas API para crear los spans de Jaeger sin tener que escribir el código fuente para el rastreo distribuido.
Agente Jaeger
El agente Jaeger es un daemon de red o un proceso que se ejecuta continuamente en segundo plano para hacer funciones que son necesarias para otros procesos. Se encarga de escuchar los envíos que el cliente hace a través del protocolo de datagramas de usuario (UDP), un tipo de método de comunicación que permite a las aplicaciones intercambiar mensajes a través de una red.
El agente se conecta al cliente en entornos de contenedores como Amazon Elastic Kubernetes Service. Los grupos de agentes crean los spans en lotes y los envían al colector. Esto permite que la aplicación se ejecute sin enviar activamente información de rastreo al backend de Jaeger.
Colector Jaeger
Un recopilador Jaeger es un componente de software que recupera los rastros del recopilador Jaeger. Comprueba, procesa y almacena las trazas en la base de datos.
Almacenamiento
El sistema de rastreo de Jaeger recibe tramos y los almacena en un backend de almacenamiento persistente o en una base de datos. El almacenamiento persistente significa que los datos almacenados permanecen intactos incluso si la computadora se apaga. Por ejemplo, los desarrolladores utilizan AWS OpenSearch Service como almacenamiento persistente para almacenar y aceptar los spans.
Ingestador
Una forma de desplegar Jaeger es enviando datos de rastreo a Kafka, un sistema distribuido para que las aplicaciones almacenen y recuperen flujos de información. Un ingestador es un módulo que lee los datos de rastreo de Kafka y los almacena por separado.
Consulta
El servicio de consulta recupera la información de rastreo de la base de datos. Los desarrolladores utilizan las consultas para encontrar rastros con una hora, etiquetas, duración y operación específicas.
Jaeger Console
Jaeger Console es un programa de software con una interfaz de usuario que se puede utilizar para ver y analizar los rastros. Muestra los datos de las trazas en gráficos y tablas.
¿Cómo utilizan los desarrolladores Jaeger?
Cuando los desarrolladores crean una aplicación, utilizan las bibliotecas de cliente de Jaeger para crear rastros. Al agregar códigos al programa para producir datos de rastreo, crean lo que se conoce como una aplicación instrumentada. La aplicación instrumentada genera automáticamente lo siguiente:
- Spans que contienen el ID del span, ID de rastreo, etiquetas, registros y contexto del span
- Rastreos para cada solicitud
Los desarrolladores utilizan la consola de Jaeger para buscar, filtrar, visualizar y analizar estos datos de rastreo distribuidos. Pueden utilizar el software de interfaz de usuario de Jaeger para ver información detallada, como la duración del proceso, errores y registros de los microservicios.
¿Cuáles son las estrategias de muestreo de Jaeger?
Una aplicación instrumentada transmite automáticamente datos de rastreo cada vez que se ejecuta la aplicación. Puedes utilizar estos datos de rastreo para medir el rendimiento de la aplicación. También se denominan datos de telemetría. Para evitar que el backend de Jaeger se vea abrumado por un exceso de datos de telemetría, puede filtrarlos o muestrearlos configurando estrategias de muestreo en su despliegue de Jaeger. Estas son algunas estrategias de muestreo:
- El muestreo constante recoge el mismo número de muestras para todos los tipos de rastreos.
- El muestreo probabilístico recoge muestras de forma aleatoria hasta alcanzar un determinado porcentaje.
- El muestreo con límite de velocidad recupera un número específico de muestras cada segundo.
- El muestreo adaptativo ajusta automáticamente la tasa de muestreo para conseguir un número de trazas durante una duración determinada.
¿Qué es AWS App Mesh?
AWS App Mesh es una malla de servicios o infraestructura de software que se encarga de las tareas arduas, de modo que puede gestionar los sistemas distribuidos basados en microservicios con mayor facilidad. AWS App Mesh hace lo siguiente:
- Ofrece visibilidad integral coherente y alta disponibilidad para sus aplicaciones.
- Configura cada servicio para exportar datos de telemetría e implementar una lógica uniforme de control de las comunicaciones en su aplicación.
- Ofrece control del tráfico de red para ayudar a los desarrolladores a crear aplicaciones en la nube seguras.
Puede usar AWS App Mesh como una solución independiente para sus necesidades de seguimiento distribuido. También admite varias herramientas de terceros que no son de AWS, como Jaeger, que puede usar para monitorear, registrar o rastrear las comunicaciones de microservicios.
Cree una cuenta de AWS y comience a utilizar Jaeger en App Mesh hoy mismo.
Siguientes pasos Jaeger en AWS
Obtenga acceso inmediato al nivel Gratuito de AWS.
Comience a crear con AWS en la consola de administración de AWS.