Skip to content

traceparent-Dekodierer — W3C Trace Context

Schluss mit dem Hex-Zählen. Kostenloser Online-traceparent-Dekodierer — läuft im Browser, kein Upload. Trace-ID, Span-ID, 8 trace-flags-Bits, tracestate, Datadog/X-Ray/B3.

Kein Tracking Läuft im Browser Kostenlos
Alles wird lokal in Ihrem Browser dekodiert — die Header, die Sie einfügen, verlassen dieses Gerät nie. Öffnen Sie das Netzwerk-Panel und sehen Sie zu, wie es still bleibt, oder gehen Sie ganz offline.
Beispiel ausprobieren
Feldaufschlüsselung
Version
00
Trace-ID
4bf92f3577b34da6a3ce929d0e0e4736
Parent-ID (Span-ID)
00f067aa0ba902b7
Trace-Flags
01
trace-flags, Bit für Bit
Bit Maske Name Zustand
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

Lesen Sie diese Bits mit einem bitweisen UND. Ein Vergleich des ganzen Bytes mit 01 meldet jeden Trace falsch, der zusätzlich ein reserviertes Bit trägt.

Andere Propagationsformate
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 transportiert die unteren 64 Bit der Trace-ID als Dezimalstring und die oberen 64 Bit hexadezimal in einem Tag. Den gesamten 128-Bit-Wert als Dezimalzahl zu übergeben, ist der klassische Grund, warum eine Trace-ID aus Ihren Logs in der Oberfläche nichts findet.

Eine X-Ray-ID enthält einen 32-Bit-Zeitstempel; eine W3C-Trace-ID trägt überhaupt keinen Zeitstempel. Das Datum unten ist nur aussagekräftig, wenn der Bezeichner tatsächlich aus X-Ray stammt.

tracestate-Mitglieder 2/32
# Schlüssel Wert Status
1 rojo 00f067aa0ba902b7 OK
2 congo t61rcWkgMzE OK

traceparent-Format: Aufbau der Felder

traceparent-Format: Aufbau der Felder
Feld Hex-Ziffern Bytes Bedeutung Ungültiger Wert
version 2 1 Formatversion. Heute immer 00; ff ist verboten. ff
trace-id 32 16 Identifiziert den gesamten Trace von Anfang bis Ende. Nur Nullen
parent-id 16 8 Identifiziert den aufrufenden Span, nicht die Anfrage. Nur Nullen
trace-flags 2 1 Ein 8-Bit-Feld — Bit für Bit lesen, nie als Boolean.

trace-flags-Werte: 00, 01, 02 und 03 erklärt

trace-flags-Werte: 00, 01, 02 und 03 erklärt
Hex Binär sampled random-trace-id Bedeutung
00 00000000 0 0 Der Aufrufer hat sich gegen Sampling entschieden — schauen Sie dorthin, nicht in Ihren Dienst.
01 00000001 1 0 Normal aufgezeichnet. Das sehen Sie in den meisten Fällen.
02 00000010 0 1 Zufällige Trace-ID zugesichert, aber nicht gesampelt.
03 00000011 1 1 Aufgezeichnet, und die Trace-ID ist als gleichverteilt zufällig zugesichert.

bit 0 — Der Aufrufer hat diesen Trace aufgezeichnet. Nicht gesetzt heißt, er hat sich bewusst dagegen entschieden.

bit 1 — Level 2: Die rechten 7 Bytes der Trace-ID sind gleichverteilt zufällig.

bit 2-7 — Reserviert. Muss beim Empfang ignoriert und bei ausgehenden Anfragen gelöscht werden.

Feldbreiten, ungültige Werte, die Semantik der Flag-Bits und die tracestate-Limits auf dieser Seite wurden gegen den veröffentlichten Spezifikationstext geprüft, nicht gegen Sekundärquellen. — Go Tools Engineering · Jul 22, 2026

Direkt gegen die W3C-Trace-Context-Empfehlung und die Level-2-Candidate-Recommendation gebaut, mit Unit-Tests für den Parser über jede gültige und ungültige Form, die die Spezifikation benennt.

Was ist der traceparent-Header?

traceparent ist der HTTP-Header, der einen verteilten Trace von einem Dienst zum nächsten trägt. Vor der Standardisierung propagierte jeder Tracing-Hersteller den Kontext in seinem eigenen Header, sodass eine Anfrage beim Systemwechsel ihre Identität an der Grenze verlor. Die W3C-Trace-Context-Spezifikation hat das mit einem einzigen, bewusst kleinen Format behoben: version-trace-id-parent-id-trace-flags, vier hexadezimale Felder mit Bindestrichen verbunden, in der aktuellen Version insgesamt 55 Zeichen.

Jedes Feld hat genau eine Aufgabe. Die version ist heute immer 00, ff ist rundweg verboten. Die trace-id sind 16 Bytes, die die ganze Anfrage von Anfang bis Ende identifizieren — sie bleibt über jeden Hop konstant. Die parent-id sind 8 Bytes, die den Span des unmittelbaren Aufrufers identifizieren, sie ändert sich also anders als die trace-id bei jedem Hop. Im trace-flags-Byte sitzt die meiste Verwirrung: Es sieht wie ein Boolean aus, weil 01 der mit Abstand häufigste Wert ist, aber es sind acht Bits. Bit 0 ist sampled. Bit 1, ergänzt in Trace Context Level 2, ist random-trace-id und sichert zu, dass die rechten sieben Bytes der Trace-ID gleichverteilt zufällig sind, sodass nachgelagerte Systeme darauf sampeln oder sharden dürfen. Die übrigen sechs Bits sind reserviert — und genau deshalb muss das Feld mit einem bitweisen UND gelesen und nicht auf Gleichheit geprüft werden.

Ein begleitender Header, tracestate, trägt herstellerspezifische Schlüssel-Wert-Paare daneben, gedeckelt bei 32 Mitgliedern. Diese Obergrenze erklärt ein rätselhaftes Symptom: Herstellerdaten, die am Edge vorhanden und einige Hops später verschwunden sind, weil Zwischensysteme begannen, Einträge zu verwerfen, sobald die Liste das Limit überschritt. Wirklich universell wurde der Header, als OpenTelemetry ihn übernahm, und diese Seite dekodiert ihn vollständig — Felder, Bits, tracestate-Mitglieder und die entsprechenden Bezeichner anderer Propagationsformate — ohne irgendetwas irgendwohin zu senden.

# 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

Wichtige Funktionen

Jedes Feld einzeln und kopierbar

Version, trace-id, parent-id und trace-flags bekommen je eine eigene Zeile und einen eigenen Kopieren-Button, sodass eine 32-stellige Trace-ID mit einem Klick in der Query landet statt mit vorsichtigem Ziehen.

trace-flags als acht Bits gelesen

Das Flags-Byte wird in alle acht Positionen samt hexadezimaler Masken aufgeklappt. Bit 0 ist sampled, Bit 1 das random-trace-id-Flag aus Level 2, und die reservierten Bits werden gezeigt statt stillschweigend verworfen.

Umrechnung nach Datadog, X-Ray und B3

Die unteren 64 Bit als dezimale Datadog-Trace-ID, die oberen 64 Bit als begleitendes Tag, die X-Ray-Form 1-{8}-{24} sowie beide B3-Layouts, einzeln und mehrköpfig — alles mit BigInt gerechnet, damit nichts überläuft.

Diagnosen statt bloßer Urteile

Eine Trace-ID aus lauter Nullen wird als nie initialisiertes Tracing erklärt, ein nicht gesetztes sampled-Bit als Entscheidung weiter oben in der Kette. Zu wissen, welcher der beiden Fälle vorliegt, ist meist die ganze Debugging-Sitzung.

tracestate mit der 32er-Obergrenze

Die Mitglieder werden mit Validierung von Schlüssel und Wert je Eintrag und laufender Zählung gegen das Limit der Spezifikation aufgelistet — dasselbe Limit, das erklärt, warum Herstellerdaten wenige Hops später verschwinden.

Nichts verlässt Ihren Browser

Geparst wird mit einfacher String- und BigInt-Arithmetik, ohne Abhängigkeiten und ohne Netzwerkaufrufe, abgesichert durch einen automatischen Contract-Test bei jedem Build. „Link kopieren“ nutzt das URL-Fragment, das nie übertragen wird.

traceparent-Beispiele, dekodiert

Das Beispiel aus der Spezifikation, dekodiert

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

Vier durch Bindestriche getrennte Felder, insgesamt 55 Zeichen bei Version 00. Die trace-id identifiziert die gesamte Anfrage über alle Dienste hinweg; die parent-id — meist Span-ID genannt — identifiziert nur den unmittelbaren Aufrufer und ändert sich deshalb bei jedem Hop, während die trace-id gleich bleibt. Die abschließende 01 ist ein vollständiges Byte, kein Boolean: Bit 0 ist gesetzt, der Aufrufer hat diesen Trace also aufgezeichnet.

trace-flags 00 — der Aufrufer wollte nicht aufzeichnen

00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00
Gültiger Header · sampled-Bit nicht gesetzt

Dieser Header ist völlig gültig, und genau das ist der Punkt. Ein nicht gesetztes sampled-Bit ist eine Anweisung von weiter oben, kein Defekt in Ihrem Dienst: Wer Sie aufgerufen hat, hat seinen Sampler ausgewertet und sich gegen die Aufzeichnung entschieden. Hier nach fehlenden Spans in der eigenen Konfiguration zu suchen, kostet Stunden. Die richtige Frage lautet, welcher Dienst Sie aufruft, einen Parent-Span mitschickt und den Trace nicht sampelt.

Eine trace-id aus lauter Nullen heißt: Tracing hat nie begonnen

00-00000000000000000000000000000000-00f067aa0ba902b7-01
Ungültig — trace-id besteht nur aus Nullen

Die Spezifikation erklärt eine trace-id aus lauter Nullen für ungültig und verlangt, den gesamten traceparent zu ignorieren. Wichtiger ist, was sie in der Praxis signalisiert: nicht „einen Trace, der noch keine Daten hat“, sondern ein SDK, das nie initialisiert wurde, oder eine Middleware, die einen Platzhalter-Header einsetzt. Dieselbe Regel gilt für eine parent-id aus lauter Nullen.

Dieselbe Trace-ID im Format von Datadog

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

Datadog transportiert die unteren 64 Bit einer 128-Bit-Trace-ID als Dezimalstring und die oberen 64 Bit hexadezimal in einem separaten Tag. Wer den gesamten 128-Bit-Wert als Dezimalzahl einsetzt, erhält eine Zahl, die zu nichts passt — genau deshalb taucht diese Umrechnung in den Issue-Trackern der Tracer immer wieder auf. Die untere Hälfte lautet hier a3ce929d0e0e4736, und 64 Bit übersteigen das, was eine JavaScript-Zahl fassen kann; diese Seite rechnet deshalb mit BigInt.

So verwenden Sie den traceparent-Dekodierer

  1. 1

    traceparent-Header einfügen

    Fügen Sie den rohen Header-Wert ein — zum Beispiel 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01. Dekodiert wird beim Tippen; es gibt keinen Button zu drücken.

  2. 2

    Die vier Felder getrennt lesen

    Version, trace-id, parent-id und trace-flags stehen in eigenen Zeilen, jede mit Kopieren-Button, sodass Sie nur die Trace-ID in eine Query übernehmen können, ohne 32 Zeichen von Hand zu markieren.

  3. 3

    Die Flags Bit für Bit prüfen

    Das trace-flags-Byte wird in alle acht Bits samt Masken aufgeklappt, sodass sampled und das random-trace-id-Flag aus Level 2 einzeln sichtbar sind statt in einem zweistelligen Wert versteckt.

  4. 4

    In das Format Ihres Backends umrechnen

    Darunter entstehen Datadog, AWS X-Ray und beide B3-Varianten, einschließlich der dezimalen Trace-ID aus den unteren 64 Bit, die Datadog erwartet, und des Tags mit den oberen 64 Bit, das sie begleitet.

  5. 5

    tracestate ergänzen und Ergebnis teilen

    Fügen Sie einen tracestate-Header ein, um seine Mitglieder mit Einzelvalidierung und Zählung gegen das 32er-Limit zu sehen, und halten Sie den exakten Zustand mit „Link kopieren“ in einer URL fest, die Sie in ein Ticket schreiben können.

Häufige Fehler bei traceparent

Das ganze Flags-Byte mit 01 vergleichen

Das behandelt ein Acht-Bit-Feld wie eine Aufzählung. Ein Trace, der gesampelt ist und zusätzlich das random-trace-id-Flag aus Level 2 trägt, hat flags 03, und der Gleichheitstest meldet ihn als nicht gesampelt.

✗ Falsch
if (traceFlags === 0x01) { record(); }
✓ Richtig
if (traceFlags & 0x01) { record(); }

Alle 128 Bit in eine Dezimalzahl umrechnen

Datadog erwartet die unteren 64 Bit dezimal und die oberen 64 Bit hexadezimal in einem separaten Tag. Den vollen Wert als eine Dezimalzahl zu übergeben, erzeugt einen Bezeichner, der zu nichts passt.

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

Jede Version außer 00 ablehnen

Die Spezifikation verlangt von Parsern, aus einer höheren Version zu lesen, was sie erkennen, und nachfolgende Felder zu tolerieren. Rundweg abzulehnen startet den Trace neu und zerreißt die Verbindung über die Grenze hinweg.

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

Hexadezimal in Großbuchstaben ausgeben

Die Grammatik lässt nur Kleinbuchstaben zu. Eine großgeschriebene Trace-ID trägt den richtigen Wert und wird von einem konformen Empfänger trotzdem abgelehnt, was den Fehler mit bloßem Auge besonders ärgerlich macht.

✗ Falsch
traceparent: 00-4BF92F3577B34DA6A3CE929D0E0E4736-00F067AA0BA902B7-01
✓ Richtig
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Was Sie mit dem traceparent-Dekodierer machen können

Herausfinden, warum ein Trace keine Spans hat
Fügen Sie den eingehenden Header ein und lesen Sie das sampled-Bit. Ist es nicht gesetzt, wäre der Trace ohnehin nie aufgezeichnet worden, und die Antwort liegt beim Aufrufer, nicht bei Ihrer Instrumentierung — eine Unterscheidung, die viel Zeit beim Prüfen der eigenen Sampler-Konfiguration spart.
Einen Trace finden, den Ihr Backend nicht findet
Wenn eine aus den Anwendungslogs kopierte Trace-ID in Datadog nichts liefert, liegt es meist am Format. Rechnen Sie sie hier um und sehen Sie den dezimalen Bezeichner aus den unteren 64 Bit, den die API erwartet, samt dem Tag mit den oberen 64 Bit, das ihn begleiten muss.
Header prüfen, die Ihr Gateway einsetzt
Proxys und Service Meshes erzeugen Trace-Kontext beim Eintritt. Fügen Sie ein, was tatsächlich angekommen ist, und bestätigen Sie Länge, kleingeschriebenes Hexadezimal und Bezeichner ungleich null, bevor Sie den Fehler weiter unten vermuten.
Einen Produktions-Trace von Hand reproduzieren
Nehmen Sie einen Header aus einer echten Anfrage und spielen Sie ihn gegen einen Staging-Endpunkt, um demselben Trace zu folgen. Bauen Sie die Anfrage mit dem curl-Command-Builder und fügen Sie den Header direkt ein.
Trace Context im Team erklären
Die Tabellen zum Feldaufbau und zu den trace-flags auf dieser Seite sind statisches Referenzmaterial, auf das Sie zeigen können, und die Beispiel-Chips führen jeden Fehlerfall vor, ohne dass jemand einen Dienst kaputtmachen muss.

So funktioniert der W3C-Trace-Context-Validator

Die Grammatik der vier Felder
version "-" trace-id "-" parent-id "-" trace-flags, durchgehend kleingeschriebenes Hexadezimal. Version hat 2 Ziffern, trace-id 32, parent-id 16 und trace-flags 2 — 52 Hex-Ziffern plus 3 Bindestriche, bei Version 00 also exakt 55 Zeichen. Großgeschriebenes Hexadezimal macht den Header ungültig, obwohl der Wert richtig aussieht, und sowohl eine trace-id als auch eine parent-id aus lauter Nullen sind ausdrücklich ungültig und nicht etwa leer.
trace-flags ist ein Bitfeld
Bit 0 (Maske 0x01) ist sampled: gesetzt heißt, der Aufrufer hat möglicherweise Trace-Daten aufgezeichnet. Bit 1 (Maske 0x02), eingeführt in Level 2, ist random-trace-id: Ist es gesetzt, müssen mindestens die rechten 7 Bytes der trace-id gleichverteilt zufällig gewählt worden sein, worauf nachgelagerte Systeme sampeln oder sharden dürfen. Die Bits 2 bis 7 sind reserviert, müssen beim Empfang ignoriert und bei ausgehenden Anfragen gelöscht werden. Weil reservierte Bits auftreten können, muss das Feld mit einem bitweisen UND geprüft werden — ein Gleichheitstest gegen 0x01 meldet einen gesampelten Trace falsch, der zusätzlich ein reserviertes Bit trägt.
Vorwärtskompatibilität mit künftigen Versionen
Version ist heute 00 und ff ist verboten, aber ein Parser, der alles andere ablehnt, liegt falsch. Die Spezifikation verlangt von Empfängern, bei höherer Version einen Parse-Versuch zu unternehmen, sofern der Header mindestens so lang ist wie das bekannte Format: die erkannten Felder lesen und zusätzliche Daten am Ende tolerieren, statt den Trace neu zu starten. Dieser Dekodierer hält sich daran — eine künftige Version wird erfolgreich geparst und als Warnung statt als Fehler markiert.
tracestate-Limits, die in Produktion zubeißen
Höchstens 32 Listenmitglieder — eine harte grammatikalische Grenze: Ist die Liste länger, ist der Header ungültig und Empfänger verwerfen ihn. Jeder Schlüssel ist höchstens 256 Zeichen lang und beginnt mit einem Kleinbuchstaben oder einer Ziffer; seit Level 2 ist das @ ein gewöhnliches Schlüsselzeichen und kein Mandantentrenner mehr. Jeder Wert besteht aus 1 bis 256 druckbaren ASCII-Zeichen, niemals mit Komma oder Gleichheitszeichen. Doppelte Schlüssel sind ungültig, leere Listenmitglieder dagegen ausdrücklich erlaubt — ein nachgestelltes Komma, das ein Zwischensystem beim Entfernen eines Eintrags hinterlässt, ergibt weiterhin einen gültigen Header. Davon getrennt gilt: Hersteller sollten mindestens 512 Zeichen des zusammengesetzten Headers weitergeben; wer kürzen muss, um in dieses Budget zu passen, sollte zuerst Einträge über 128 Zeichen streichen — deshalb verschwinden die Daten eines geschwätzigen Herstellers vor denen eines knappen.

Best Practices für Trace Context

Flags mit einem bitweisen UND prüfen
Schreiben Sie flags & 0x01 statt flags == 0x01. Sechs der acht Bits sind für künftige Verwendung reserviert, und ein Gleichheitstest meldet gesampelte Traces falsch, sobald eines davon in freier Wildbahn auftaucht.
Eine ID aus lauter Nullen als kaputte Pipeline behandeln
Das ist kein leerer Wert, den man tolerieren sollte. Lehnen Sie den Header ab und suchen Sie die Komponente, die ihren Tracer nicht initialisiert hat oder einen Platzhalter einsetzt.
Nach oben schauen, wenn das sampled-Bit nicht gesetzt ist
Parent-based Sampler geben die Entscheidung des Aufrufers weiter. Fehlen Traces, klären Sie zuerst, welcher Dienst Ihnen einen Parent-Span mit abgeschaltetem Sampling schickt, bevor Sie Ihre eigene Konfiguration durchgehen.
tracestate kurz halten
Die Obergrenze von 32 Mitgliedern ist eine harte grammatikalische Grenze — wird sie überschritten, ist der Header ungültig. Davon getrennt: Nur 512 Zeichen des zusammengesetzten Headers propagieren garantiert, und beim Kürzen fallen Einträge über 128 Zeichen zuerst weg. Was eine lange Aufrufkette überleben muss, gehört nicht in tracestate.
Eine Trace-ID nie als JavaScript-Zahl protokollieren
Eine 128-Bit-Trace-ID und selbst ein 64-Bit-Datadog-Bezeichner übersteigen beide Number.MAX_SAFE_INTEGER. Halten Sie sie als Strings und rechnen Sie mit BigInt, wenn es sein muss, sonst beschädigen Sie stillschweigend die letzten Stellen.

FAQ zum traceparent-Dekodierer

Was ist der traceparent-Header?
Es ist der eine HTTP-Header, der einen verteilten Trace über Dienstgrenzen hinweg transportiert, vom W3C standardisiert, damit Werkzeuge verschiedener Hersteller derselben Anfrage folgen können. Er enthält vier durch Bindestriche getrennte Felder — version, trace-id, parent-id und trace-flags — und ist in der aktuellen Version immer genau 55 Zeichen lang. Jedes größere Tracing-System spricht ihn inzwischen, und genau das macht eine Anfrage vom Edge-Proxy durch ein halbes Dutzend Dienste nachvollziehbar, ohne dass sich jeder Hop auf denselben Hersteller einigen müsste. Die vollständige Grammatik steht in der W3C-Trace-Context-Empfehlung.
Was bedeutet traceparent trace-flags 00?
Es bedeutet, dass der Aufrufer ausdrücklich entschieden hat, diesen Trace nicht aufzuzeichnen. Das sampled-Bit ist Bit 0 des trace-flags-Bytes; ist es nicht gesetzt, hat ein Sampler weiter oben die Anfrage bewertet und sich gegen die Aufzeichnung entschieden. Das ist der am häufigsten fehlgedeutete Wert im ganzen Header, weil er wie ein Fehler aussieht und in Wahrheit eine Entscheidung ist. Wenn Spans fehlen, lautet die nützliche Frage nicht, was in Ihrem Dienst kaputt ist, sondern welcher vorgelagerte Dienst Ihnen einen Parent-Span mit abgeschaltetem Sampling schickt — ein Parent-based Sampler gibt diese Entscheidung anschließend an alles Nachgelagerte weiter.
Was ist der Unterschied zwischen trace-flags 01, 02 und 03?
trace-flags ist ein Acht-Bit-Feld, diese Werte sind also Kombinationen und keine Aufzählung. 01 setzt nur Bit 0: Der Trace ist gesampelt. 02 setzt nur Bit 1, das random-trace-id-Flag aus Level 2, das zusichert, dass mindestens die rechten sieben Bytes der Trace-ID gleichverteilt zufällig erzeugt wurden — nachgelagerte Systeme können dann gefahrlos auf diesen Bytes sampeln oder sharden. 03 setzt beide. Weil es ein Bitfeld ist, müssen Sie es mit einem bitweisen UND prüfen; ein Vergleich des ganzen Bytes mit 01 meldet jeden Trace falsch, der zusätzlich ein reserviertes Bit trägt — und genau die reservierten Bits werden künftige Versionen in Gebrauch nehmen.
Warum besteht meine Trace-ID nur aus Nullen?
Weil Tracing nie initialisiert wurde, nicht weil der Trace existiert, aber keine Daten hat. Die Spezifikation führt eine trace-id aus lauter Nullen als ungültigen Wert und weist Empfänger an, den kompletten Header zu ignorieren, sodass nichts Nachgelagertes daran anknüpft. In der Praxis stammt sie von einem SDK, das nicht gestartet ist, von einem handgebauten Header oder von einer Middleware, die einen Platzhalter einsetzt, wenn kein echter Kontext vorlag. Die parent-id aus lauter Nullen, 0000000000000000, ist aus demselben Grund ungültig.
Wie konvertiere ich eine W3C-Trace-ID in eine Datadog-Trace-ID?
Nehmen Sie die unteren 64 Bit — die rechten 16 Hex-Ziffern — und stellen Sie sie als Dezimalstring dar; das gehört in x-datadog-trace-id. Die oberen 64 Bit bleiben hexadezimal und reisen separat im Tag _dd.p.tid. Die parent-id wird als Ganzes dezimal umgerechnet. Wer das vertauscht oder alle 128 Bit in eine einzige Dezimalzahl umrechnet, erhält einen Bezeichner, der in der Oberfläche zu nichts passt — deshalb kehrt das Thema in den Issue-Trackern der Tracer immer wieder. Diese Seite nimmt Ihnen die Aufteilung ab; wenn Sie die zugrunde liegende Hexadezimalarithmetik an beliebigen Werten nachvollziehen wollen, erledigt der Zahlensystem-Konverter allgemeine Basiswechsel, während diese Seite bei Trace-Bezeichnern bleibt.
Enthält ein traceparent einen Zeitstempel?
Nein — und das führt in die Irre, weil manche anderen Trace-Bezeichner genau das tun. Eine W3C-trace-id besteht aus 16 undurchsichtigen Bytes ohne eingebettete Zeit. Eine AWS-X-Ray-Trace-ID dagegen hat die Form 1-{8 hex}-{24 hex}, wobei die ersten acht Hex-Ziffern den Erzeugungszeitpunkt in Epoch-Sekunden enthalten; die Umrechnung zwischen beiden Formaten verschiebt also nur Bytes und kann keinen Zeitstempel erfinden, der nie da war. Wenn Sie Bezeichner brauchen, die sich zeitlich sortieren lassen, sind UUIDv7 und ULID dafür gemacht.
Wird der Header, den ich hier einfüge, irgendwohin hochgeladen?
Nein. Jedes Feld wird lokal in Ihrem Browser mit einfacher String- und BigInt-Arithmetik geparst — es gibt keinen Serveraufruf, keine Protokollierung Ihrer Eingaben und nichts, was gespeichert bleibt. Das wiegt hier schwerer als bei den meisten Tools, denn ein traceparent aus einer Produktionsanfrage identifiziert echten Verkehr in Ihrem Observability-Backend. Sie müssen uns nicht glauben: Öffnen Sie die Entwicklerwerkzeuge Ihres Browsers und sehen Sie zu, wie das Netzwerk-Panel still bleibt, während Sie tippen, oder trennen Sie die Netzwerkverbindung ganz und dekodieren Sie weiter. Dass keine externe Anfrage stattfindet, sichert außerdem ein automatischer Contract-Test bei jedem Build ab, damit es nicht unbemerkt zurückfällt.
Funktioniert dieser Dekodierer offline?
Ja. Die Seite ist statisch und der Dekodierer sind ein paar Kilobyte JavaScript ohne Abhängigkeiten; sobald er geladen ist, können Sie offline gehen — oder den Flugmodus einschalten, bevor Sie etwas einfügen — und alles arbeitet unverändert weiter. Wenn Sie mit Headern aus einer sensiblen Umgebung hantieren, lohnt sich genau diese Reihenfolge: Seite laden, Verbindung trennen, dann einfügen. Die Schaltfläche „Link kopieren“ kodiert den Zustand im URL-Fragment hinter dem Zeichen #, und Fragmente werden ebenfalls nie an einen Server übertragen.

Verwandte Werkzeuge

Alle Werkzeuge anzeigen →