Skip to main content

Cómo Funciona el Rastreo

Vale mucho la pena entender cómo OTel consigue construir el trace.

Tenemos algo ocurriendo en un proceso y otra cosa ocurriendo en otro proceso, pero ¿cómo crees que esto está sucediendo?

Tenemos el siguiente escenario: app A y app B ambas instrumentadas con OTel y A hace una petición HTTP a B.

alt text

La instrumentación envía los datos a Jaeger que será nuestro backend OTel.

alt text

Cuando estos servicios estén reportando sobre el rastreo, necesitan saber algunas cosas, siendo el principal el Trace ID (ID de Rastreo).

El Trace ID es compartido entre todos los intervalos (spans) para que sepamos quién es quién, quién se relaciona con quién y el tiempo empleado.

Cada intervalo necesita tener un ID padre; si no lo tiene, será la raíz del rastreo.

Básicamente, cuando la aplicación B está reportando a Jaeger, necesita reportar:

  • Su Span ID
  • Span ID de los padres (que fue creado en la app A)
  • Trace ID (que fue creado en la app A)

Esto significa que cuando estemos enviando la llamada HTTP de la App A a la App B, necesitamos proporcionar el contexto de telemetría.

Esto se hace inyectando en el encabezado (Header) de la llamada HTTP. La App B extraerá el contexto del encabezado de la llamada que fue inyectado automáticamente.

alt text

Entonces, ¿OTel soporta solo HTTP? Claro que no. Soporta varias formas de comunicación y esto fue solo un ejemplo. Podríamos haber usado Kafka, SQS, RabbitMQ, gRPC, Socket.io, etc.

alt text

Los SpanID son generados automáticamente.

En realidad, siempre estamos creando spans que son mostrados por herramientas como Jaeger a través de un árbol de dependencia usando los valores como traceID, parentId, spanID, etc.

Podemos utilizar el context para llevar más información entre las aplicaciones distribuidas. En lugar de repetir el paso de valor llamada tras llamada, por ejemplo un userID, podemos utilizar la idea de Baggage. Si eres desarrollador de backend, vale la pena echarle un vistazo a esto. No voy a profundizar mucho sobre esto porque está más asociado al desarrollo, pero sepas que existe.

En OpenTelemetry, Baggage es una información contextual que reside junto al contexto. Baggage es un almacenamiento de clave-valor, lo que significa que permite propagar cualquier dato que desees junto con el contexto.