Skip to content

Decodificador traceparent — W3C Trace Context

Deja de contar dígitos hex. Decodificador traceparent gratis y online — todo en tu navegador, sin subidas. Trace ID, span ID, 8 bits trace-flags, tracestate, Datadog/X-Ray/B3.

Sin rastreo Se ejecuta en el navegador Gratis
Todo se decodifica localmente en tu navegador: las cabeceras que pegas nunca salen de este dispositivo. Abre el panel de red y mira cómo se queda en silencio, o desconéctate del todo.
Prueba un ejemplo
Desglose de campos
Versión
00
Trace ID
4bf92f3577b34da6a3ce929d0e0e4736
Parent ID (span ID)
00f067aa0ba902b7
Trace flags
01
trace-flags, bit a bit
Bit Máscara Nombre Estado
0 0x01 sampled 1
1 0x02 random-trace-id 0
2 0x04 reserved 0
3 0x08 reserved 0
4 0x10 reserved 0
5 0x20 reserved 0
6 0x40 reserved 0
7 0x80 reserved 0

Lee estos bits con un AND bit a bit. Comparar el byte entero con 01 informa mal de cualquier traza que además lleve un bit reservado.

Otros formatos de propagación
x-datadog-trace-id
11803532876627986230
x-datadog-tags: _dd.p.tid
4bf92f3577b34da6
x-datadog-parent-id
67667974448284343
AWS X-Ray trace ID
1-4bf92f35-77b34da6a3ce929d0e0e4736
b3 (single header)
4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-1
X-B3-TraceId
4bf92f3577b34da6a3ce929d0e0e4736
X-B3-SpanId
00f067aa0ba902b7
X-B3-Sampled
1

Datadog transporta los 64 bits bajos del trace ID como cadena decimal y los 64 bits altos en hexadecimal dentro de una etiqueta. Pasar el valor completo de 128 bits como decimal es el motivo clásico de que un trace ID sacado de tus logs no encuentre nada en la interfaz.

Un ID de X-Ray lleva incrustada una marca de tiempo de 32 bits; un trace ID de W3C no lleva ninguna marca de tiempo. La fecha de abajo solo tiene sentido si el identificador se originó realmente en X-Ray.

Miembros de tracestate 2/32
# Clave Valor Estado
1 rojo 00f067aa0ba902b7 OK
2 congo t61rcWkgMzE OK

Formato traceparent: anatomía de los campos

Formato traceparent: anatomía de los campos
Campo Dígitos hex Bytes Significado Valor inválido
version 2 1 Versión del formato. Hoy siempre 00; ff está prohibida. ff
trace-id 32 16 Identifica la traza completa de extremo a extremo. Todo ceros
parent-id 16 8 Identifica el span que llama, no la petición. Todo ceros
trace-flags 2 1 Un campo de 8 bits — léelo bit a bit, nunca como un booleano.

Valores de trace-flags: 00, 01, 02 y 03 explicados

Valores de trace-flags: 00, 01, 02 y 03 explicados
Hex Binario sampled random-trace-id Significado
00 00000000 0 0 Aguas arriba se decidió no muestrear — mira a quien llama, no a tu servicio.
01 00000001 1 0 Registrada con normalidad. Es lo que ves la mayoría de las veces.
02 00000010 0 1 Trace ID aleatorio declarado, pero sin muestrear.
03 00000011 1 1 Registrada, y el trace ID se declara uniformemente aleatorio.

bit 0 — Quien llama registró esta traza. Apagado significa que decidió deliberadamente no hacerlo.

bit 1 — Level 2: los 7 bytes de la derecha del trace ID son uniformemente aleatorios.

bit 2-7 — Reservado. Debe ignorarse al recibir y ponerse a cero en las peticiones salientes.

Los anchos de campo, los valores inválidos, la semántica de los bits de flags y los límites de tracestate de esta página se comprobaron contra el texto publicado de la especificación, no contra artículos de segunda mano. — Go Tools Engineering · Jul 22, 2026

Construido directamente sobre la recomendación W3C Trace Context y la candidate recommendation del Level 2, con el analizador cubierto por tests unitarios para cada forma válida e inválida que nombra la especificación.

¿Qué es la cabecera traceparent?

traceparent es la cabecera HTTP que lleva una traza distribuida de un servicio al siguiente. Antes de que se estandarizara, cada proveedor de trazado propagaba el contexto en su propia cabecera, de modo que una petición que cruzaba sistemas perdía su identidad en la frontera. La especificación W3C Trace Context lo resolvió con un formato único y deliberadamente pequeño: version-trace-id-parent-id-trace-flags, cuatro campos hexadecimales unidos por guiones, 55 caracteres en total para la versión actual.

Cada campo hace una sola cosa. La version hoy es siempre 00, y ff está prohibida sin más. El trace-id son 16 bytes que identifican la petición completa de extremo a extremo — se mantiene constante en cada salto. El parent-id son 8 bytes que identifican el span de quien llama de forma inmediata, así que, a diferencia del trace-id, cambia en cada salto. En el byte trace-flags vive casi toda la confusión: parece un booleano porque 01 es con diferencia el valor más habitual, pero son ocho bits. El bit 0 es sampled. El bit 1, añadido en Trace Context Level 2, es random-trace-id, y afirma que los siete bytes de la derecha del trace ID son uniformemente aleatorios para que los sistemas de aguas abajo puedan muestrear o repartir sobre ellos. Los seis bits restantes están reservados, que es exactamente por lo que el campo debe leerse con un AND bit a bit en vez de compararse por igualdad.

Una cabecera acompañante, tracestate, transporta al lado pares clave-valor específicos de cada proveedor, con un tope de 32 miembros. Ese techo explica un síntoma desconcertante: datos de proveedor que están presentes en el borde y han desaparecido varios saltos después, porque los intermediarios empezaron a descartar entradas en cuanto la lista superó el límite. La cabecera se volvió realmente universal cuando OpenTelemetry la adoptó, y esta página lo decodifica todo — campos, bits, miembros de tracestate y los identificadores equivalentes de otros formatos de propagación — sin enviar nada a ninguna parte.

# The header as it travels on the wire
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
tracestate:  rojo=00f067aa0ba902b7,congo=t61rcWkgMzE

# Read the four fields apart
#   version     00
#   trace-id    4bf92f3577b34da6a3ce929d0e0e4736   (16 bytes, whole request)
#   parent-id   00f067aa0ba902b7                   (8 bytes, calling span)
#   trace-flags 01                                 (bit 0 set = sampled)

# Send one yourself
$ curl -H 'traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01' \
       https://example.com/api

Características principales

Cada campo, separado y copiable

Version, trace-id, parent-id y trace-flags reciben su propia fila y su propio botón de copiar, así que llevar un trace ID de 32 caracteres a una consulta es un clic en lugar de un arrastre cuidadoso.

trace-flags leído como ocho bits

El byte de flags se despliega en las ocho posiciones con sus máscaras hexadecimales. El bit 0 es sampled, el bit 1 es el flag random-trace-id del Level 2, y los bits reservados se muestran en lugar de descartarse en silencio.

Conversión a Datadog, X-Ray y B3

Los 64 bits bajos como trace ID decimal de Datadog, los 64 bits altos como la etiqueta que viaja con él, la forma 1-{8}-{24} de X-Ray y los dos formatos de B3, de cabecera única y múltiple — todo calculado con BigInt para que nada se desborde.

Diagnósticos, no solo veredictos

Un trace ID todo a ceros se explica como un trazado que nunca se inicializó; un bit sampled apagado, como una decisión tomada aguas arriba. Saber cuál de los dos tienes delante suele ser toda la sesión de depuración.

tracestate con el techo de 32 miembros

Los miembros se listan con validación de clave y valor uno a uno y un recuento continuo frente al límite de la especificación: el mismo límite que explica por qué los datos de un proveedor se esfuman unos saltos más abajo.

Nada sale de tu navegador

El análisis son operaciones de cadenas y aritmética BigInt, sin dependencias ni llamadas de red, verificado por un test de contrato automatizado en cada build. «Copiar enlace» usa el fragmento de la URL, que nunca se transmite.

Ejemplos de traceparent, decodificados

El ejemplo de la propia especificación, decodificado

00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
version 00 · trace-id 4bf92f3577b34da6a3ce929d0e0e4736 · parent-id 00f067aa0ba902b7 · trace-flags 01 (sampled)

Cuatro campos separados por guiones, 55 caracteres en total para la versión 00. El trace-id identifica la petición completa mientras atraviesa todos los servicios; el parent-id — al que se suele llamar span ID — identifica solo a quien llama de forma inmediata, y por eso cambia en cada salto mientras el trace-id no. El 01 final es un byte entero, no un booleano: el bit 0 está activo, así que quien llamó registró esta traza.

trace-flags 00 — quien llama decidió no registrar

00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00
Cabecera válida · bit sampled apagado

Esta cabecera es perfectamente válida, y ese es justo el punto. Un bit sampled apagado es una instrucción que viene de arriba, no un defecto de tu servicio: quien te llamó evaluó su muestreador y decidió no registrar. Buscar aquí spans perdidos en tu propia configuración cuesta horas. La pregunta correcta es qué servicio te está llamando, enviando un span padre y decidiendo no muestrear la traza.

Un trace ID todo a ceros significa que el trazado nunca arrancó

00-00000000000000000000000000000000-00f067aa0ba902b7-01
Inválido — trace-id todo a ceros

La especificación declara inválido un trace-id todo a ceros y exige ignorar el traceparent entero. Conviene saber qué señala en la práctica: no «una traza que todavía no tiene datos», sino un SDK que nunca se inicializó, o un middleware que inyecta una cabecera de relleno. La misma regla se aplica a un parent-id todo a ceros.

El mismo trace ID en el formato de Datadog

00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
x-datadog-trace-id 11803532876627986230 · _dd.p.tid 4bf92f3577b34da6

Datadog transporta los 64 bits bajos de un trace ID de 128 bits como cadena decimal, y los 64 bits altos en hexadecimal dentro de una etiqueta aparte. Si metes el valor completo de 128 bits como decimal, obtienes un número que no coincide con nada — y por eso esta conversión aparece una y otra vez en los issue trackers de los tracers. La mitad baja aquí es a3ce929d0e0e4736, y 64 bits superan lo que puede contener un número de JavaScript, así que esta página hace la aritmética con BigInt.

Cómo usar el decodificador traceparent

  1. 1

    Pega la cabecera traceparent

    Suelta el valor crudo de la cabecera — por ejemplo 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01. La decodificación ocurre mientras escribes; no hay ningún botón que pulsar.

  2. 2

    Lee los cuatro campos por separado

    Version, trace-id, parent-id y trace-flags se reparten en filas propias, cada una con su botón de copiar, para llevarte solo el trace ID a una consulta sin seleccionar 32 caracteres a mano.

  3. 3

    Revisa los flags bit a bit

    El byte trace-flags se despliega en sus ocho bits con sus máscaras, de modo que sampled y el flag random-trace-id del Level 2 se ven por separado en lugar de quedar escondidos en un valor de dos caracteres.

  4. 4

    Convierte al formato de tu backend

    Debajo se generan Datadog, AWS X-Ray y las dos formas de B3, incluido el trace ID decimal de 64 bits bajos que espera Datadog y la etiqueta de 64 bits altos que viaja con él.

  5. 5

    Añade tracestate y comparte el resultado

    Pega una cabecera tracestate para listar sus miembros con validación individual y un recuento frente al límite de 32, y usa «Copiar enlace» para capturar el estado exacto en una URL que puedas dejar en un ticket.

Errores comunes con traceparent

Comparar el byte de flags entero con 01

Eso trata un campo de ocho bits como una enumeración. Una traza que está muestreada y además lleva el flag random-trace-id del Level 2 tiene flags 03, y la comprobación de igualdad la da por no muestreada.

✗ Incorrecto
if (traceFlags === 0x01) { record(); }
✓ Correcto
if (traceFlags & 0x01) { record(); }

Convertir los 128 bits a un solo número decimal

Datadog espera los 64 bits bajos en decimal y los 64 bits altos en hexadecimal dentro de una etiqueta aparte. Pasar el valor completo como un único número decimal produce un identificador que no coincide con nada.

✗ Incorrecto
x-datadog-trace-id: 100985939111033328018442752961257817910
✓ Correcto
x-datadog-trace-id: 11803532876627986230
x-datadog-tags: _dd.p.tid=4bf92f3577b34da6

Rechazar cualquier versión que no sea 00

La especificación pide a los analizadores que lean lo que reconozcan de una versión superior y toleren campos de más. Rechazar de plano reinicia la traza y rompe el enlace al cruzar la frontera.

✗ Incorrecto
if (version !== '00') throw new Error('bad traceparent');
✓ Correcto
if (version !== '00' && header.length >= 55) { /* parse the known prefix */ }

Emitir hexadecimal en mayúsculas

La gramática solo admite minúsculas. Un trace ID en mayúsculas lleva el valor correcto y aun así lo rechaza un receptor conforme, lo que lo convierte en un fallo especialmente frustrante de detectar a simple vista.

✗ Incorrecto
traceparent: 00-4BF92F3577B34DA6A3CE929D0E0E4736-00F067AA0BA902B7-01
✓ Correcto
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Qué puedes hacer con el decodificador traceparent

Averiguar por qué una traza no tiene spans
Pega la cabecera entrante y lee el bit sampled. Si está apagado, la traza nunca se iba a registrar y la respuesta está en quien llama, no en tu instrumentación — una distinción que ahorra muchísimo tiempo revisando tu propia configuración de muestreo.
Encontrar una traza que tu backend no encuentra
Cuando un trace ID copiado de los logs de la aplicación no devuelve nada en Datadog, el culpable suele ser el formato. Conviértelo aquí para ver el identificador decimal de 64 bits bajos que espera la API, junto con la etiqueta de 64 bits altos que tiene que acompañarlo.
Verificar las cabeceras que inyecta tu gateway
Los proxies y los service mesh generan contexto de traza en la entrada. Pega lo que llegó de verdad para confirmar la longitud, el hexadecimal en minúsculas y unos identificadores distintos de cero antes de dar por hecho que el fallo está aguas abajo.
Reproducir a mano una traza de producción
Coge una cabecera de una petición real y reprodúcela contra un endpoint de staging para seguir la misma traza. Construye la petición con el generador de comandos curl y pega la cabecera directamente ahí.
Explicar Trace Context a un equipo
Las tablas de anatomía de campos y de trace-flags de esta página son material de referencia estático que puedes señalar, y las fichas de ejemplo demuestran cada caso de error sin que nadie tenga que romper un servicio para producirlo.

Cómo funciona el validador de W3C Trace Context

La gramática de los cuatro campos
version "-" trace-id "-" parent-id "-" trace-flags, todo en hexadecimal minúsculo. Version tiene 2 dígitos, trace-id 32, parent-id 16 y trace-flags 2 — 52 dígitos hexadecimales más 3 guiones, exactamente 55 caracteres para la versión 00. El hexadecimal en mayúsculas invalida la cabecera aunque el valor parezca correcto, y tanto un trace-id como un parent-id todo a ceros son explícitamente inválidos, no vacíos.
trace-flags es un campo de bits
El bit 0 (máscara 0x01) es sampled: activo significa que quien llama pudo haber registrado datos de traza. El bit 1 (máscara 0x02), introducido en el Level 2, es random-trace-id: cuando está activo, al menos los 7 bytes de la derecha del trace-id deben haberse elegido al azar con distribución uniforme, lo que permite a los sistemas de aguas abajo muestrear o repartir sobre ellos. Los bits 2 a 7 están reservados y deben ignorarse al recibir y ponerse a cero en las peticiones salientes. Como puede haber bits reservados presentes, el campo debe comprobarse con un AND bit a bit — una comprobación de igualdad contra 0x01 informa mal de una traza muestreada que además lleva un bit reservado.
Compatibilidad hacia adelante con versiones futuras
Hoy la versión es 00 y ff está prohibida, pero un analizador que rechace todo lo demás se equivoca. La especificación pide a los receptores que intenten analizar cuando la versión es superior y la cabecera es al menos tan larga como el formato conocido: leer los campos que reconozcan y tolerar datos extra al final, en vez de reiniciar la traza. Este decodificador cumple esa regla: una versión futura se analiza correctamente y se marca como aviso, no como error.
Límites de tracestate que muerden en producción
Como mucho 32 miembros de lista: es un límite gramatical duro, así que una lista más larga invalida la cabecera y los receptores la descartan. Cada clave tiene 256 caracteres como máximo y empieza por letra minúscula o dígito; desde Level 2 la @ es un carácter de clave corriente y ya no un separador de tenant. Cada valor son de 1 a 256 caracteres ASCII imprimibles, sin coma ni signo igual nunca. Las claves duplicadas son inválidas, pero los miembros de lista vacíos están permitidos de forma explícita: la coma final que deja un intermediario al borrar una entrada sigue siendo una cabecera válida. Aparte de eso, los proveedores deberían propagar al menos 512 caracteres de la cabecera combinada; cuando tienen que recortar para caber en ese presupuesto, las entradas de más de 128 caracteres deben caer primero, y por eso los datos de un proveedor verboso desaparecen antes que los de uno escueto.

Buenas prácticas de Trace Context

Comprueba los flags con un AND bit a bit
Escribe flags & 0x01 en lugar de flags == 0x01. Seis de los ocho bits están reservados para uso futuro, y una comprobación de igualdad empezará a informar mal de las trazas muestreadas en cuanto alguno de ellos aparezca en producción.
Trata un ID todo a ceros como una tubería rota
No es un valor vacío que haya que tolerar. Rechaza la cabecera y ve a buscar el componente que no inicializó su tracer o que está inyectando un relleno.
Mira aguas arriba cuando el bit sampled está apagado
Los muestreadores parent-based propagan la decisión de quien llama. Si faltan trazas, identifica qué servicio te está enviando un span padre con el muestreo desactivado antes de revisar tu propia configuración.
Mantén tracestate corto
El techo de 32 miembros es un límite gramatical duro: si lo superas, la cabecera es inválida. Aparte de eso, solo 512 caracteres de la cabecera combinada tienen la propagación garantizada, y el recorte descarta primero las entradas de más de 128 caracteres. Lo que tenga que sobrevivir a una cadena de llamadas larga no debería ir en tracestate.
No registres nunca un trace ID como número de JavaScript
Un trace ID de 128 bits, e incluso un identificador de Datadog de 64 bits, superan Number.MAX_SAFE_INTEGER. Guárdalos como cadenas y convierte con BigInt cuando tengas que operar, o corromperás en silencio los últimos dígitos.

Preguntas frecuentes sobre el decodificador traceparent

¿Qué es la cabecera traceparent?
Es la única cabecera HTTP que lleva una traza distribuida a través de las fronteras entre servicios, estandarizada por el W3C para que herramientas de distintos proveedores puedan seguir la misma petición. Contiene cuatro campos separados por guiones — version, trace-id, parent-id y trace-flags — y en la versión actual mide siempre exactamente 55 caracteres. Hoy la hablan todos los sistemas de trazado importantes, y eso es lo que hace que una petición se pueda seguir desde un proxy de borde a través de media docena de servicios sin que cada salto tenga que ponerse de acuerdo en un proveedor. La gramática completa está definida en la recomendación W3C Trace Context.
¿Qué significa traceparent trace-flags 00?
Significa que quien llama decidió de forma explícita que esta traza no se registrara. El bit sampled es el bit 0 del byte trace-flags; cuando está apagado, un muestreador de aguas arriba evaluó la petición y optó por no registrarla. Es el valor peor interpretado de toda la cabecera, porque parece un fallo y en realidad es una decisión. Si faltan spans, la pregunta útil no es qué se ha roto en tu servicio, sino qué servicio de aguas arriba te está enviando un span padre con el muestreo desactivado — un muestreador parent-based propagará después esa decisión a todo lo que venga detrás.
¿Cuál es la diferencia entre trace-flags 01, 02 y 03?
trace-flags es un campo de ocho bits, así que estos valores son combinaciones y no una enumeración. 01 activa solo el bit 0: la traza está muestreada. 02 activa solo el bit 1, el flag random-trace-id del Level 2, que afirma que al menos los siete bytes de la derecha del trace ID se generaron con aleatoriedad uniforme — así los sistemas de aguas abajo pueden muestrear o repartir sobre esos bytes sin riesgo. 03 activa los dos. Como es un campo de bits, tienes que comprobarlo con un AND bit a bit; comparar el byte entero con 01 informará mal de cualquier traza que además lleve un bit reservado, y los bits reservados son precisamente lo que empezarán a usar las versiones futuras.
¿Por qué mi trace ID es todo ceros?
Porque el trazado nunca se inicializó, no porque la traza exista pero no tenga datos. La especificación incluye el trace-id todo a ceros entre los valores inválidos e indica a los receptores que ignoren la cabecera completa, así que nada de aguas abajo va a enlazar con ella. En la práctica viene de un SDK que no llegó a arrancar, de una cabecera construida a mano, o de un middleware que inserta un relleno cuando no había contexto real disponible. El parent-id todo a ceros, 0000000000000000, es inválido por el mismo motivo.
¿Cómo convierto un trace ID de W3C a un trace ID de Datadog?
Coge los 64 bits bajos — los 16 dígitos hexadecimales de la derecha — y escríbelos como cadena decimal; eso es lo que va en x-datadog-trace-id. Los 64 bits altos siguen en hexadecimal y viajan por separado en la etiqueta _dd.p.tid. El parent-id se convierte a decimal entero. Hacerlo al revés, o convertir los 128 bits a un único número decimal, produce un identificador que no coincide con nada en la interfaz, y por eso reaparece en los issue trackers de los tracers. Esta página hace la división por ti; si quieres explorar la aritmética hexadecimal de fondo sobre valores arbitrarios, el convertidor de bases numéricas se ocupa de la conversión de base general, mientras que esta página se ciñe a los identificadores de traza.
¿Un traceparent contiene una marca de tiempo?
No — y esto despista, porque otros identificadores de traza sí la llevan. Un trace-id de W3C son 16 bytes opacos sin tiempo embebido. Un trace ID de AWS X-Ray, en cambio, tiene la forma 1-{8 hex}-{24 hex}, donde los ocho primeros dígitos hexadecimales son el instante de creación en segundos epoch, así que convertir entre ambos formatos mueve bytes de sitio pero no puede inventar una marca de tiempo que nunca estuvo ahí. Si necesitas identificadores que sí se ordenen por tiempo, para eso están UUIDv7 y ULID.
¿La cabecera que pego aquí se sube a algún sitio?
No. Cada campo se analiza localmente en tu navegador con simples operaciones de cadenas y aritmética BigInt: no hay llamada a ningún servidor, no se registra lo que escribes y no se guarda nada. Aquí esto pesa más que en la mayoría de herramientas, porque un traceparent tomado de una petición de producción identifica tráfico real en tu backend de observabilidad. No hace falta que nos creas: abre las herramientas de desarrollo del navegador y mira cómo el panel de red se queda en silencio mientras escribes, o desconéctate de la red por completo y sigue decodificando. La ausencia de cualquier petición externa la garantiza además un test de contrato automatizado que se ejecuta en cada build, para que no pueda romperse en silencio.
¿Funciona este decodificador sin conexión?
Sí. La página es estática y el decodificador son unos pocos kilobytes de JavaScript sin dependencias, así que una vez cargado puedes desconectarte — o activar el modo avión antes de pegar nada — y sigue funcionando exactamente igual. Si manejas cabeceras de un entorno sensible, ese es el orden que conviene: cargar la página, desconectar y después pegar. El botón «Copiar enlace» codifica el estado en el fragmento de la URL, detrás del carácter #, y los fragmentos tampoco se transmiten nunca a un servidor.

Herramientas relacionadas

Ver todas las herramientas →