🔍 ¿Tu aplicación funciona… pero no sabes qué pasa dentro?

Published: (February 22, 2026 at 10:06 PM EST)
3 min read
Source: Dev.to

Source: Dev.to

¿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:

👉

🧠 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 de entorno:

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

  1. Se intercepta la petición HTTP.
  2. Se crea un span raíz.
  3. Se instrumentan Controller, Service y JDBC.
  4. Se exporta vía OTLP.
  5. El Collector procesa.
  6. 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

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.

Una vez que entiendes lo que ocurre dentro… ya no quieres volver atrás.

Si quieres probarlo ahora mismo:

👉

0 views
Back to Blog

Related posts

Read more »