¿Te ha pasado que tu aplicación responde lento…
pero no sabes exactamente dónde está el problema?
¿El controller responde, pero no sabes cuánto tardó el service?
¿La base de datos está lenta o es tu lógica?
¿Todo funciona en local… pero no entiendes qué ocurre internamente?
Ahí es donde entra la observabilidad moderna.
En este artículo vas a entender, de forma práctica y profunda:
Qué es realmente la observabilidad
Cómo funcionan las trazas distribuidas
Qué hace OpenTelemetry internamente
Para qué sirve el Collector
Cómo Jaeger visualiza todo
Cómo instrumentar automáticamente una aplicación Spring Boot
Todo aplicado a una aplicación tradicional, sencilla, real.
Y lo mejor: puedes ejecutarlo tú mismo en este repositorio:
👉 https://github.com/juanhcode/otel-jaeger-observability-demo
🧠 1. Observabilidad
La observabilidad se basa en tres pilares fundamentales:
Logs → Qué ocurrió
Métricas → Cuánto ocurrió
Trazas → Cómo ocurrió
Las trazas permiten reconstruir el recorrido completo de una solicitud dentro de tu aplicación.
No importa si es una app pequeña.
Si quieres entender su comportamiento interno, necesitas trazas.
🔎 2. ¿Qué es una traza?
Una traza representa el recorrido completo de una petición.
Cliente → Controller → Service → Repository → Base de datos
Cada parte es un Span.
Una traza incluye:
- Trace ID
- Span ID
- Relaciones padre-hijo
- Atributos
- Eventos
- Duración
🏗 3. Arquitectura implementada
Spring Boot
↓
OpenTelemetry Java Agent
↓
OTLP
↓
OpenTelemetry Collector
↓
Jaeger
↓
Jaeger UI
🐳 4. Infraestructura
Se utiliza Docker Compose para levantar:
- Jaeger All-in-One
- OpenTelemetry Collector
Jaeger UI disponible en:
⚙️ 5. Configuración del Collector
El Collector:
- Recibe OTLP
- Procesa datos (resource + batch)
- Exporta a Jaeger
El processor resource agrega:
- service.name
- deployment.environment
☕ 6. Aplicación
La aplicación contiene:
- Controller REST
- Service
- Repository JPA
- Base H2 en memoria
Endpoints:
POST /user\
GET /user
🎯 7. Instrumentación automática
Variables:
export OTEL_PROTOCOL="grpc"\
export OTEL_EXPORTER_OTLP_ENDPOINT="http://127.0.0.1:4318"\
export OTEL_METRICS_EXPORTER=none
Ejecución:
java -javaagent:opentelemetry-javaagent.jar -jar demo-0.0.1-SNAPSHOT.jar
👀 8. Flujo interno
- Se intercepta la petición HTTP
- Se crea un span raíz
- Se instrumentan Controller, Service y JDBC
- Se exporta vía OTLP
- El Collector procesa
- Jaeger visualiza
🚀 9. Beneficios
Detectar cuellos de botella
Identificar latencias exactas
Entender el flujo real de ejecución
Tener observabilidad estándar
Evitar vendor lock-in
Y todo esto en una aplicación sencilla.
No necesitas tener 20 microservicios para necesitar observabilidad.
🏁 Conclusión
La observabilidad no es solo para arquitecturas complejas.
Incluso una aplicación tradicional puede beneficiarse enormemente de entender qué ocurre internamente.
Con OpenTelemetry y Jaeger puedes pasar de “no sé qué está pasando”
a tener visibilidad completa de tu aplicación en minutos.
Y una vez entiendes lo que ocurre dentro… ya no quieres volver atrás.
Y si quieres probarlo ahora mismo:
👉 https://github.com/juanhcode/otel-jaeger-observability-demo
Top comments (0)