Baggage

Información contextual que se pasa entre señales.

En OpenTelemetry, el Baggage es información contextual que viaja con el contexto. El Baggage es un almacén de pares clave-valor, lo que significa que te permite propagar cualquier dato que desees junto con el contexto.

El Baggage te permite pasar datos a través de servicios y procesos, permitiendo que se puedan añadir a trazas, métricas o logs en esos servicios.

Ejemplo

El Baggage se usa a menudo en el trazado distribuido para propagar datos adicionales entre servicios.

Por ejemplo, imagina que tienes un clientId al inicio de una petición, pero te gustaría que ese ID estuviera disponible en todos los spans de una traza, en algunas métricas en otro servicio y en algunos logs a lo largo del camino. Debido a que la traza puede abarcar múltiples servicios, necesitas alguna forma de propagar esos datos sin necesidad de copiar el clientId en diversos lugares de tu código.

Al usar la propagación de contexto para pasar el Baggage a través de estos servicios, el clientId queda disponible para que se añada a cualquier span, métrica o log adicionales. Además, las instrumentaciones se encargan de propagar automáticamente el Baggage por ti.

Baggage en OpenTelemetry

¿Para qué debes usar el Baggage de OTel?

El Baggage se usa típicamente para incluir información que sólo está disponible al inicio de una solicitud en los servicios posteriores. Por ejemplo, se pueden incluir la Identificación de la Cuenta, el ID del Usuario, el ID del Producto o la IP de origen.

Propagar esta información usando Baggage permite un análisis más profundo de la telemetría en un backend. Por ejemplo, si incluyes información como un ID de Usuario en un span que rastrea una llamada a una base de datos, puedes responder con mucha más facilidad a preguntas como: “¿qué usuarios están experimentando más lentitud en las llamadas a la base de datos?”. También puedes registrar información sobre una operación posterior adjuntando ese mismo ID de Usuario a los logs.

Baggage en OpenTelemetry

Consideraciones de seguridad del Baggage

Los elementos sensibles del Baggage pueden compartirse con recursos no deseados, como APIs de terceros. Esto se debe a que la instrumentación automática incluye el Baggage en la mayoría de las solicitudes de red de tu servicio. Específicamente, el Baggage y otras partes del contexto de traza se envían en encabezados HTTP, haciéndolos visibles para cualquiera que esté inspeccionando tu tráfico de red. Si el tráfico está restringido dentro de tu red, este riesgo podría no aplicarse, pero ten en cuenta que los servicios posteriores podrían propagar el Baggage fuera de tu red.

Además, no hay verificaciones de integridad embedidas que permitan asegurar que los elementos del Baggage son tuyos, así que ten precaución al leerlos.

El Baggage no es equivalente a los atributos

Es importante notar que el Baggage es un almacén separado de pares clave-valor y, si no se añade explícitamente, no se asocia junto con los atributos a spans, métricas o logs.

Para añadir Baggage a los atributos, debes leer explícitamente los datos del Baggage y añadirlos como atributos a tus spans, métricas o logs.

Dado que uno de los casos de uso comunes del Baggage es añadir datos a los Atributos de Span a lo largo de toda una traza, varios lenguajes tienen Baggage Span Processors que añaden datos del Baggage como atributos al crear el span.

Para más información, consulta la especificación del Baggage.