🔎 Jaeger (Distributed Tracing) Cheatsheet Completo 🔎

Jaeger es un sistema de trazabilidad distribuida de código abierto, inspirado en Dapper de Google y OpenZipkin. Se utiliza para monitorear y solucionar problemas de transacciones complejas en entornos de microservicios. Recopila datos de traza de todas las partes de tu aplicación y proporciona una interfaz de usuario para visualizarlos.


1. 🌟 Conceptos Clave de Trazabilidad Distribuida


2. 🛠️ Arquitectura de Jaeger

Jaeger se compone de varios componentes principales:


3. ⚙️ Instalación de Jaeger Server (Docker)

Para un entorno de desarrollo o pruebas, se suele usar la imagen all-in-one que incluye todos los componentes de Jaeger Server y el almacenamiento en memoria.

docker run -d --name jaeger -p 16686:16686 -p 6831:6831/udp -p 6832:6832/udp -p 14268:14268 jaegertracing/all-in-one:latest

3.1. Configuración de Almacenamiento (Opcional para Producción)

Para producción, necesitas configurar un backend de almacenamiento persistente.


4. 📝 Instrumentación de Aplicaciones (Spring Boot con Micrometer Tracing)

Micrometer Tracing (parte de Spring Boot 3+ y Micrometer 1.10+) es el enfoque recomendado y estándar para instrumentar aplicaciones Spring Boot para Jaeger (basado en OpenTelemetry).

  1. Añadir dependencias en pom.xml (en tu microservicio):

    <dependencies>
        &lt;!-- Micrometer Tracing Bridge para OpenTelemetry -->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bridge-otel</artifactId>
        </dependency>
        &lt;!-- Exporter para Jaeger -->
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-jaeger</artifactId>
        </dependency>
        &lt;!-- Para la API de OpenTelemetry (si necesitas instrumentación manual más allá del bridge) -->
        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-api</artifactId>
            <version>1.34.1</version> &lt;!-- Usar la versión compatible -->
        </dependency>
        &lt;!-- Spring Boot Actuator para exposición de métricas y health -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
  2. Configurar application.yml (en tu microservicio cliente):

    # src/main/resources/application.yml
    spring:
      application:
        name: my-product-service # ¡CRÍTICO! El nombre del servicio para las trazas
      sleuth: # Propiedades del "bridge" OpenTelemetry
        sampler:
          probability: 1.0 # Muestrear el 100% de las trazas (0.0 a 1.0)
          # Para producción, un valor como 0.1 (10%) o 0.01 (1%) es más común para no saturar.
        propagation:
          type: W3C # Usar el formato de encabezado W3C Trace Context (traceparent, tracestate)
    
    management:
      tracing:
        sampling:
          probability: 1.0 # Equivalente a spring.sleuth.sampler.probability
        propagation:
          type: W3C
        exporters:
          jaeger:
            endpoint: http://localhost:14250 # Endpoint gRPC de Jaeger Collector (por defecto)
          logging: # Útil para depuración local
            enabled: true # Para ver las trazas en los logs de la consola
    • Nota: 14250 es el puerto gRPC del Jaeger Collector. Si usas el agente, el endpoint sería http://localhost:6831 (UDP Thrift) o http://localhost:14268 (HTTP Thrift/JSON) dependiendo del formato del cliente. Los exporters de OTel suelen usar gRPC o HTTP.

5. 🚀 Visualización de Trazas en la UI de Jaeger

  1. Acceder a la UI: http://localhost:16686
  2. Buscar Trazas:
    • Service: Selecciona el nombre del servicio (tu spring.application.name).
    • Operation: Elige una operación (nombre de Span).
    • Tags: Filtra por tags (http.status_code=500, error=true, user.id=123).
    • Lookback: Rango de tiempo para buscar trazas.
    • Min Duration / Max Duration: Filtra por duración de la traza.
    • Limit: Número máximo de trazas a mostrar.
  3. Visualizar Detalles de la Traza:
    • Gráfico de Gantt: Muestra la duración de cada Span y su relación jerárquica.
    • Detalles del Span: Haz clic en un Span para ver sus tags, logs, y otros metadatos.
    • Flame Graph / Call Graph: Diferentes vistas para analizar el rendimiento y la jerarquía de Spans.
    • JSON: Puedes ver la representación JSON cruda de la traza.

6. 🌐 Integración y Ecosistema


7. 💡 Buenas Prácticas y Consejos


Este cheatsheet te proporciona una referencia completa de Jaeger, cubriendo sus conceptos esenciales de trazabilidad distribuida, su arquitectura, cómo instalar el servidor, instrumentar aplicaciones Spring Boot, visualizar trazas y aplicar las mejores prácticas para un monitoreo y depuración eficientes en arquitecturas de microservicios.