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.
- Versión
00- Trace ID
4bf92f3577b34da6a3ce929d0e0e4736- Parent ID (span ID)
00f067aa0ba902b7- Trace flags
01
| 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.
- 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.
| # | Clave | Valor | Estado |
|---|---|---|---|
| 1 | rojo | 00f067aa0ba902b7 | OK |
| 2 | congo | t61rcWkgMzE | OK |
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
| 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.
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
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
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
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
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
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.
if (traceFlags === 0x01) { record(); } 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.
x-datadog-trace-id: 100985939111033328018442752961257817910
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.
if (version !== '00') throw new Error('bad traceparent'); 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.
traceparent: 00-4BF92F3577B34DA6A3CE929D0E0E4736-00F067AA0BA902B7-01
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?
¿Qué significa traceparent trace-flags 00?
¿Cuál es la diferencia entre trace-flags 01, 02 y 03?
¿Por qué mi trace ID es todo ceros?
¿Cómo convierto un trace ID de W3C a un trace ID de Datadog?
¿Un traceparent contiene una marca de tiempo?
¿La cabecera que pego aquí se sube a algún sitio?
¿Funciona este decodificador sin conexión?
Herramientas relacionadas
Ver todas las herramientas →Generador y constructor de comandos cURL
Web & API
Construye comandos curl en tu navegador: define método, cabeceras, autenticación y cuerpo, y obtén el comando listo para copiar al instante. Presets para Bearer, POST JSON y subida de archivos. Gratis, privado, sin registro.
Generador htpasswd — bcrypt, Apache MD5 (apr1) y Basic Auth
Web & API
Genera entradas htpasswd con bcrypt, Apache MD5 (apr1), SHA-1 y más. Obtén configuración lista para pegar en Apache, nginx y Docker. 100% en tu navegador — sin subidas.
Generador de etiquetas meta y Open Graph
Web & API
Genera etiquetas meta Open Graph, Twitter Card y SEO con vista previa en vivo de Google, Facebook y X. 100% gratis, en el navegador, sin registro — copia y pega el código.
Probador de nginx location — por qué gana ese bloque
Web & API
Qué bloque location de nginx gana — y por qué perdieron los demás. Probador gratuito para =, ^~, ~ y ~*, todo en tu navegador.
Descifrado AES — Compatible con OpenSSL y CryptoJS
Herramientas de Seguridad
Descifra AES en línea — GCM/CBC/CTR, frase de contraseña o clave sin procesar, detecta automáticamente el formato "U2FsdGVkX1" de OpenSSL y CryptoJS. 100 % en el navegador, las claves nunca salen de la página.
Herramienta de Cifrado AES — GCM, CBC y CTR
Herramientas de Seguridad
Cifrado AES online y gratuito — AES-128/192/256, GCM/CBC/CTR, frase de contraseña (PBKDF2) o clave sin procesar. Se ejecuta 100 % en tu navegador; nada se sube a un servidor.