1. Introducción a Jaeger
1. Introducción a Jaeger
El problema que resuelve
Imaginá una request que entra a tu API, pasa por un servicio de autenticación, hace tres llamadas a otros microservicios, dos consultas a la base de datos y una llamada a un servicio externo. La request tarda 2.3 segundos.
¿Dónde se fue el tiempo?
- Con logs: hay que reconstruir manualmente el orden y correlacionar timestamps. Insufrible a escala.
- Con métricas: sabés que tu p99 subió, pero no qué request específica está lenta ni por qué.
- Con trazas distribuidas: ves el árbol completo de la request, qué hizo cada servicio y cuánto tardó.
flowchart LR
R[Request] --> A[API Gateway\n40ms]
A --> B[Auth Service\n80ms]
B --> C[Order Service\n1.8s]
C --> D[(Postgres)]
D --> E[Payment Service\n200ms]
E --> F[Stripe API]
style C fill:#fee2e2,stroke:#991b1b
En un timeline de Jaeger ese rectángulo rojo de 1.8s en Order Service salta solo. En logs lo encontrás si tenés suerte.
¿Qué es Jaeger?
Jaeger es una plataforma open source para distributed tracing: capturar, almacenar y visualizar trazas que recorren múltiples servicios.
Sus capacidades principales:
- Recolección de spans desde tus aplicaciones (vía OTLP, Thrift o gRPC).
- Almacenamiento persistente en backends como Cassandra, Elasticsearch, OpenSearch, Badger o ClickHouse.
- Búsqueda y visualización mediante una UI web rica.
- Análisis de dependencias entre servicios (DAG automático).
- Service Performance Monitoring (SPM): RED metrics derivadas de las trazas.
Historia rápida
| Año | Hito |
|---|---|
| 2015 | Uber empieza Jaeger inspirado en Dapper de Google |
| 2017 | Open source bajo licencia Apache 2.0 |
| 2017 | Aceptado como proyecto CNCF (Cloud Native Computing Foundation) |
| 2019 | Graduado de la CNCF — máximo nivel de madurez |
| 2022 | SDKs propios deprecados a favor de OpenTelemetry |
| 2024 | Lanzamiento de Jaeger v2 basado en OpenTelemetry Collector |
El paso clave es 2022: Jaeger dejó de tener SDKs propios. Hoy se instrumenta con OpenTelemetry y Jaeger es solo el backend.
Casos de uso
Diagnóstico de latencia
El uso más común. Tu p99 subió de 200ms a 2s. Buscás un trace lento en la UI, abrís el timeline y ves dónde se va el tiempo.
Debugging de errores
Una request falla con 500. El trace te muestra qué span tiró la excepción, con stack trace, atributos del request y contexto previo.
Análisis de dependencias
¿Qué servicios llaman al servicio de pricing? Jaeger genera el grafo automáticamente leyendo las trazas.
Auditoría de flujos
¿Realmente la request pasa por todos los servicios que creés que pasa? Las trazas te muestran lo que realmente sucede.
Capacity planning
¿Qué porcentaje del tiempo de una request lo consume Postgres vs Redis vs lógica de aplicación? Las trazas agregadas dan la respuesta.
Comparación con alternativas
| Herramienta | Origen | Storage típico | Notas |
|---|---|---|---|
| Jaeger | Uber / CNCF | Cassandra, ES, ClickHouse | Maduro, UI excelente, SPM nativo |
| Zipkin | MySQL, Cassandra, ES | Más viejo, menos features modernas | |
| Grafana Tempo | Grafana Labs | Object storage (S3, GCS) | Optimizado para costo a gran escala |
| AWS X-Ray | Amazon | AWS managed | Solo AWS, vendor lock-in |
| Datadog APM | Datadog | SaaS | Comercial, integrado con su stack |
| Honeycomb | Honeycomb | SaaS | Comercial, foco en exploración |
Cuándo elegir Jaeger:
- Querés algo open source y self-hosted.
- Tu equipo ya usa o va a usar OpenTelemetry.
- Necesitás UI rica de timelines, comparación de trazas y system architecture.
- Volumen moderado a alto pero no extremo (para extremo: Tempo).
Cuándo no:
- Querés pagar a alguien para no operarlo (usá un SaaS).
- Volumen extremadamente alto con presupuesto bajo (Tempo es más barato a gran escala).
El cambio mental que requiere
Adoptar tracing no es solo “instalar Jaeger”. Implica cambiar cómo pensás los problemas de producción:
flowchart LR
A[Sintoma:\nlatencia alta] --> B[Buscar trace\nrepresentativo]
B --> C[Leer timeline]
C --> D[Identificar span\nculpable]
D --> E[Mirar atributos\ny logs del span]
E --> F[Hipótesis\nde causa raíz]
En lugar de:
- “Vamos al log de orders y buscamos por user_id”.
Pasa a ser:
- “Buscamos un trace lento de checkout y vemos qué span se llevó el tiempo”.
El reflejo del trace-first hay que entrenarlo. Es lo que hace que Jaeger valga la pena: si tu equipo sigue empezando por logs ante cada incidente, no estás capitalizando la inversión.
Lo que viene en este tutorial
En el próximo capítulo cubrimos los conceptos: qué es exactamente un trace, qué es un span, cómo se relacionan jerárquicamente, y qué información lleva cada uno. Es la base sin la cual el resto del tutorial no se entiende.