Dekoder traceparent — W3C Trace Context
Koniec z liczeniem cyfr hex. Darmowy dekoder traceparent online — działa w przeglądarce, nic nie wysyła. Trace ID, span ID, 8 bitów trace-flags, tracestate, Datadog/X-Ray/B3.
- Wersja
00- Trace ID
4bf92f3577b34da6a3ce929d0e0e4736- Parent ID (span ID)
00f067aa0ba902b7- Trace flags
01
| Bit | Maska | Nazwa | Stan |
|---|---|---|---|
| 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 |
Te bity trzeba czytać operacją bitową AND. Porównanie całego bajtu z 01 błędnie zaraportuje każdy ślad, który niesie też bit zarezerwowany.
- 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 przenosi dolne 64 bity trace ID jako łańcuch dziesiętny, a górne 64 bity szesnastkowo w tagu. Podanie całej 128-bitowej wartości dziesiętnie to klasyczny powód, dla którego trace ID z logów niczego nie znajduje w interfejsie.
Identyfikator X-Ray zawiera 32-bitowy znacznik czasu; trace ID W3C nie niesie znacznika czasu w ogóle. Data poniżej ma sens tylko wtedy, gdy identyfikator faktycznie powstał w X-Ray.
| # | Klucz | Wartość | Status |
|---|---|---|---|
| 1 | rojo | 00f067aa0ba902b7 | OK |
| 2 | congo | t61rcWkgMzE | OK |
Format traceparent: anatomia pól
| Pole | Cyfry szesnastkowe | Bajty | Znaczenie | Wartość nieprawidłowa |
|---|---|---|---|---|
| version | 2 | 1 | Wersja formatu. Dzisiaj zawsze 00; ff jest zakazane. | ff |
| trace-id | 32 | 16 | Identyfikuje cały ślad od początku do końca. | Same zera |
| parent-id | 16 | 8 | Identyfikuje span wywołujący, a nie żądanie. | Same zera |
| trace-flags | 2 | 1 | Pole 8-bitowe — czytaj je bit po bicie, nigdy jak wartość logiczną. | — |
Wartości trace-flags: 00, 01, 02 i 03 wyjaśnione
| Szesnastkowo | Dwójkowo | sampled | random-trace-id | Znaczenie |
|---|---|---|---|---|
| 00 | 00000000 | 0 | 0 | Wyżej w łańcuchu zdecydowano o niepróbkowaniu — patrz na wywołującego, nie na swoją usługę. |
| 01 | 00000001 | 1 | 0 | Zarejestrowany normalnie. To widać najczęściej. |
| 02 | 00000010 | 0 | 1 | Zadeklarowany losowy trace ID, ale bez próbkowania. |
| 03 | 00000011 | 1 | 1 | Zarejestrowany, a trace ID zadeklarowano jako równomiernie losowy. |
bit 0 — Wywołujący zarejestrował ten ślad. Wyzerowany oznacza, że świadomie tego nie zrobił.
bit 1 — Level 2: siedem skrajnie prawych bajtów trace ID jest równomiernie losowych.
bit 2-7 — Zarezerwowany. Trzeba go ignorować i zerować w żądaniach wychodzących.
Zbudowane bezpośrednio na rekomendacji W3C Trace Context oraz na kandydackiej rekomendacji Level 2, z parserem pokrytym testami jednostkowymi dla każdej poprawnej i niepoprawnej postaci wymienionej w specyfikacji.
Czym jest nagłówek traceparent?
traceparent to nagłówek HTTP, który przenosi rozproszony ślad z jednej usługi do następnej. Zanim go ustandaryzowano, każdy dostawca narzędzi śledzących propagował kontekst we własnym nagłówku, więc żądanie przechodzące między systemami traciło tożsamość na granicy. Specyfikacja W3C Trace Context rozwiązała to jednym, celowo małym formatem: version-trace-id-parent-id-trace-flags, cztery pola szesnastkowe połączone myślnikami, łącznie 55 znaków w bieżącej wersji.
Każde pole ma jedno zadanie. Version to dzisiaj zawsze 00, a ff jest wprost zakazane. Trace-id to 16 bajtów identyfikujących całe żądanie od początku do końca — pozostaje stałe na każdym przeskoku. Parent-id to 8 bajtów identyfikujących span bezpośredniego wywołującego, więc w odróżnieniu od trace-id zmienia się przy każdym przeskoku. Bajt trace-flags jest miejscem największych nieporozumień: wygląda jak wartość logiczna, bo 01 to zdecydowanie najczęstsza wartość, ale to osiem bitów. Bit 0 to sampled. Bit 1, dodany w Trace Context Level 2, to random-trace-id — potwierdza, że siedem skrajnie prawych bajtów trace ID jest równomiernie losowych, dzięki czemu systemy niżej w łańcuchu mogą po nich próbkować lub dzielić ruch. Pozostałych sześć bitów jest zarezerwowanych i dokładnie dlatego pole trzeba czytać operacją bitową AND, a nie porównywać na równość.
Towarzyszący nagłówek tracestate niesie obok niego pary klucz-wartość specyficzne dla dostawców, z limitem 32 członów. Ten limit tłumaczy zagadkowy objaw: dane dostawcy są obecne na brzegu sieci, a kilka przeskoków dalej znikają, bo pośrednicy zaczęli usuwać wpisy, gdy lista przekroczyła limit. Nagłówek stał się naprawdę uniwersalny, gdy przyjęło go OpenTelemetry, a ta strona dekoduje go w całości — pola, bity, człony tracestate i odpowiedniki identyfikatorów dla innych formatów propagacji — nie wysyłając niczego nigdzie.
# 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 Kluczowe funkcje
Każde pole rozdzielone i gotowe do skopiowania
Version, trace-id, parent-id i trace-flags dostają własny wiersz i własny przycisk kopiowania, więc przeniesienie 32-znakowego trace ID do zapytania to jedno kliknięcie zamiast ostrożnego przeciągania myszą.
Trace-flags czytane jako osiem bitów
Bajt flag zostaje rozłożony na wszystkie osiem pozycji wraz z ich maskami szesnastkowymi. Bit 0 to sampled, bit 1 to flaga random-trace-id z poziomu Level 2, a bity zarezerwowane są pokazane, a nie po cichu pomijane.
Konwersja na Datadog, X-Ray i B3
Dolne 64 bity jako dziesiętny trace ID dla Datadog, górne 64 bity jako tag podróżujący razem z nim, postać X-Ray 1-{8}-{24} oraz oba układy B3, jedno- i wielonagłówkowy — wszystko liczone na BigInt, więc nic się nie przepełnia.
Diagnoza zamiast samego werdyktu
Trace ID z samych zer jest wyjaśniany jako śledzenie, które nigdy nie wystartowało, a wyzerowany bit sampled jako decyzja podjęta wyżej w łańcuchu. Rozpoznanie, z którym z tych dwóch przypadków ma się do czynienia, to zwykle cała sesja debugowania.
Tracestate z limitem 32 członów
Człony są wypisywane z walidacją klucza i wartości osobno dla każdego z nich oraz z licznikiem względem limitu ze specyfikacji — tego samego limitu, który tłumaczy znikanie danych dostawcy kilka przeskoków dalej.
Nic nie opuszcza przeglądarki
Analiza to zwykłe operacje na łańcuchach i arytmetyka BigInt, bez zależności i bez wywołań sieciowych, potwierdzone automatycznym testem kontraktowym przy każdym budowaniu. Kopiuj link używa fragmentu adresu URL, który nigdy nie jest przesyłany.
Przykłady traceparent, zdekodowane
Przykład z samej specyfikacji, zdekodowany
00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
version 00 · trace-id 4bf92f3577b34da6a3ce929d0e0e4736 · parent-id 00f067aa0ba902b7 · trace-flags 01 (sampled)
Cztery pola rozdzielone myślnikami, łącznie 55 znaków dla wersji 00. Trace-id identyfikuje całe żądanie na wszystkich usługach, przez które przechodzi; parent-id — często nazywany span ID — identyfikuje wyłącznie bezpośredniego wywołującego, dlatego zmienia się na każdym przeskoku, a trace-id nie. Końcowe 01 to pełny bajt, a nie wartość logiczna: bit 0 jest ustawiony, więc wywołujący zarejestrował ten ślad.
trace-flags 00 — wywołujący postanowił nie rejestrować
00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00
Nagłówek poprawny · bit sampled wyzerowany
Ten nagłówek jest w pełni poprawny i o to właśnie chodzi. Wyzerowany bit sampled to instrukcja z góry łańcucha, a nie defekt usługi: ten, kto ją wywołał, uruchomił własny sampler i zdecydował, że nie rejestruje. Szukanie brakujących spanów we własnej konfiguracji kosztuje w tym miejscu wiele godzin. Właściwe pytanie brzmi: która usługa wywołuje tę usługę, przysyła span nadrzędny i decyduje o niepróbkowaniu śladu.
Trace ID z samych zer oznacza, że śledzenie nigdy nie wystartowało
00-00000000000000000000000000000000-00f067aa0ba902b7-01
Nieprawidłowy — trace-id z samych zer
Specyfikacja uznaje trace-id złożone z samych zer za nieprawidłowe i wymaga zignorowania całego nagłówka traceparent. Warto wiedzieć, co to sygnalizuje w praktyce: nie „ślad, który nie ma jeszcze danych”, lecz SDK, które nigdy nie zostało zainicjowane, albo warstwę pośrednią wstrzykującą nagłówek zastępczy. Ta sama reguła dotyczy parent-id z samych zer.
Ten sam trace ID w formacie Datadog
00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
x-datadog-trace-id 11803532876627986230 · _dd.p.tid 4bf92f3577b34da6
Datadog przenosi dolne 64 bity 128-bitowego trace ID jako łańcuch dziesiętny, a górne 64 bity szesnastkowo w osobnym tagu. Po podaniu całej 128-bitowej wartości dziesiętnie otrzymuje się liczbę, która nie pasuje do niczego — i właśnie dlatego ta konwersja wraca raz po raz w zgłoszeniach do tracerów. Dolna połowa to tutaj a3ce929d0e0e4736, a 64 bity przekraczają zakres liczby w JavaScripcie, więc ta strona liczy na BigInt.
Jak korzystać z dekodera traceparent
- 1
Wklej nagłówek traceparent
Wystarczy wstawić surową wartość nagłówka — na przykład 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01. Dekodowanie odbywa się w trakcie pisania, nie trzeba niczego klikać.
- 2
Odczytaj cztery pola osobno
Version, trace-id, parent-id i trace-flags trafiają do własnych wierszy, każdy z przyciskiem kopiowania, dzięki czemu sam trace ID można przenieść do zapytania bez ręcznego zaznaczania 32 znaków.
- 3
Sprawdź flagi bit po bicie
Bajt trace-flags zostaje rozłożony na wszystkie osiem bitów wraz z ich maskami, więc sampled i flaga random-trace-id z poziomu Level 2 są widoczne osobno, a nie ukryte w dwuznakowej wartości.
- 4
Przelicz na format swojego backendu
Pod spodem generowane są identyfikatory Datadog, AWS X-Ray oraz obie postacie B3, łącznie z dziesiętnym trace ID z dolnych 64 bitów, którego oczekuje Datadog, i tagiem z górnych 64 bitów podróżującym obok niego.
- 5
Dodaj tracestate i udostępnij wynik
Wklejenie nagłówka tracestate wypisuje jego człony z osobną walidacją każdego z nich i licznikiem względem limitu 32 członów, a przycisk Kopiuj link zapisuje dokładny stan w adresie URL, który da się wkleić do zgłoszenia.
Najczęstsze błędy przy traceparent
Porównywanie całego bajtu flag z 01
Traktuje pole ośmiobitowe jak wyliczenie. Ślad, który jest próbkowany i niesie też flagę random-trace-id z poziomu Level 2, ma flagi 03, a porównanie na równość zaraportuje go jako niepróbkowany.
if (traceFlags === 0x01) { record(); } if (traceFlags & 0x01) { record(); } Przeliczanie wszystkich 128 bitów na jedną liczbę dziesiętną
Datadog oczekuje dolnych 64 bitów dziesiętnie, a górnych 64 bitów szesnastkowo w osobnym tagu. Przekazanie całej wartości jako jednej liczby dziesiętnej daje identyfikator, który nie pasuje do niczego.
x-datadog-trace-id: 100985939111033328018442752961257817910
x-datadog-trace-id: 11803532876627986230 x-datadog-tags: _dd.p.tid=4bf92f3577b34da6
Odrzucanie każdej wersji innej niż 00
Specyfikacja prosi parsery, aby z wyższej wersji odczytały to, co rozpoznają, i tolerowały dodatkowe pola. Odrzucenie wprost rozpoczyna ślad od nowa i zrywa powiązanie na granicy.
if (version !== '00') throw new Error('bad traceparent'); if (version !== '00' && header.length >= 55) { /* parse the known prefix */ } Wysyłanie zapisu szesnastkowego wielkimi literami
Gramatyka dopuszcza wyłącznie małe litery. Trace ID zapisany wielkimi literami niesie właściwą wartość i mimo to zostaje odrzucony przez zgodnego odbiorcę, co czyni z tego wyjątkowo frustrujący błąd do wypatrzenia okiem.
traceparent: 00-4BF92F3577B34DA6A3CE929D0E0E4736-00F067AA0BA902B7-01
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
Co można zrobić dekoderem traceparent
- Ustal, dlaczego ślad nie ma spanów
- Wystarczy wkleić przychodzący nagłówek i odczytać bit sampled. Gdy jest wyzerowany, ślad i tak nie miał być rejestrowany, a odpowiedź leży po stronie wywołującego, nie instrumentacji — rozróżnienie, które oszczędza mnóstwo czasu poświęcanego na audyt własnej konfiguracji samplera.
- Znajdź ślad, którego backend nie widzi
- Gdy trace ID skopiowany z logów aplikacji niczego nie zwraca w Datadog, winny jest zwykle format. Przeliczenie go tutaj pokazuje dziesiętny identyfikator z dolnych 64 bitów, którego oczekuje API, wraz z tagiem z górnych 64 bitów, który musi mu towarzyszyć.
- Zweryfikuj nagłówki wstrzykiwane przez bramę
- Proxy i service mesh generują kontekst śladu na wejściu. Wklejenie tego, co faktycznie dotarło, pozwala potwierdzić długość, małe litery w zapisie szesnastkowym i niezerowe identyfikatory, zanim uzna się, że wina leży dalej.
- Odtwórz produkcyjny ślad ręcznie
- Nagłówek z prawdziwego żądania można odtworzyć wobec środowiska testowego, żeby przejść tym samym śladem. Żądanie da się zbudować kreatorem poleceń curl i wkleić nagłówek prosto do niego.
- Wyjaśnij zespołowi kontekst śladu
- Tabele anatomii pól i wartości trace-flags na tej stronie są statycznym materiałem referencyjnym, na który można wskazać, a gotowe przyciski pokazują każdy rodzaj błędu bez psucia jakiejkolwiek usługi.
Jak działa walidator W3C Trace Context
- Gramatyka czterech pól
- Kolejność jest taka: version, myślnik, trace-id, myślnik, parent-id, myślnik, trace-flags — w całości małymi literami w zapisie szesnastkowym. Version ma 2 cyfry, trace-id 32, parent-id 16, a trace-flags 2 — 52 cyfry szesnastkowe plus 3 myślniki, dokładnie 55 znaków dla wersji 00. Wielkie litery w zapisie szesnastkowym unieważniają nagłówek, choć wartość wygląda poprawnie, a trace-id i parent-id złożone z samych zer są jawnie nieprawidłowe, a nie puste.
- Trace-flags to pole bitowe
- Bit 0 (maska 0x01) to sampled: ustawiony oznacza, że wywołujący mógł zarejestrować dane śladu. Bit 1 (maska 0x02), wprowadzony w Level 2, to random-trace-id: gdy jest ustawiony, co najmniej siedem skrajnie prawych bajtów trace-id musiało zostać wylosowanych z rozkładem równomiernym, co pozwala systemom niżej w łańcuchu próbkować lub dzielić ruch po tych bajtach. Bity od 2 do 7 są zarezerwowane, trzeba je ignorować przy odbiorze i zerować w żądaniach wychodzących. Ponieważ bity zarezerwowane mogą być obecne, pole trzeba sprawdzać operacją bitową AND — porównanie na równość z 0x01 błędnie zaraportuje próbkowany ślad, który niesie też bit zarezerwowany.
- Zgodność w przód z przyszłymi wersjami
- Version to dzisiaj 00, a ff jest zakazane, ale parser odrzucający wszystko inne działa źle. Specyfikacja prosi odbiorców, aby przy wyższej wersji spróbowali analizy, o ile nagłówek jest co najmniej tak długi jak znany format: odczytali pola, które rozpoznają, i tolerowali dodatkowe dane na końcu, zamiast rozpoczynać ślad od nowa. Ten dekoder trzyma się tej reguły: przyszła wersja zostaje przeanalizowana poprawnie i oznaczona jako ostrzeżenie, a nie błąd.
- Limity tracestate, które bolą na produkcji
- Najwyżej 32 człony listy — to twarda granica gramatyczna, więc dłuższa lista czyni nagłówek nieprawidłowym, a odbiorcy go odrzucają. Każdy klucz ma najwyżej 256 znaków i zaczyna się od małej litery lub cyfry; od Level 2 znak @ jest zwykłym znakiem klucza, a nie separatorem najemcy. Każda wartość to od 1 do 256 drukowalnych znaków ASCII, nigdy z przecinkiem ani znakiem równości. Powtórzone klucze są nieprawidłowe, ale puste człony listy są wprost dozwolone — przecinek pozostawiony na końcu przez pośrednika, który usunął wpis, wciąż daje prawidłowy nagłówek. Osobna sprawa: dostawcy powinni propagować co najmniej 512 znaków połączonego nagłówka; gdy muszą przyciąć, żeby zmieścić się w tym budżecie, jako pierwsze powinny wypadać wpisy dłuższe niż 128 znaków — dlatego dane rozgadanego dostawcy znikają wcześniej niż dane oszczędnego.
Dobre praktyki pracy z Trace Context
- Sprawdzaj flagi operacją bitową AND
- Należy pisać flags & 0x01 zamiast flags == 0x01. Sześć z ośmiu bitów jest zarezerwowanych na przyszłość, a porównanie na równość zacznie błędnie raportować próbkowane ślady w chwili, gdy którykolwiek z nich pojawi się w praktyce.
- Traktuj identyfikator z samych zer jak zepsuty potok
- To nie jest pusta wartość, którą można tolerować. Warto odrzucić nagłówek i odszukać komponent, który nie zainicjował swojego tracera albo wstrzykuje wartość zastępczą.
- Przy wyzerowanym bicie sampled patrz wyżej w łańcuchu
- Samplery dziedziczące decyzję po rodzicu propagują wybór wywołującego. Gdy brakuje śladów, najpierw trzeba ustalić, która usługa przysyła span nadrzędny z wyłączonym próbkowaniem, a dopiero potem audytować własną konfigurację.
- Utrzymuj tracestate krótkim
- Limit 32 członów to twarda granica gramatyczna — po jego przekroczeniu nagłówek jest nieprawidłowy. Osobna sprawa: gwarantowana propagacja obejmuje tylko 512 znaków połączonego nagłówka, a przycinanie usuwa najpierw wpisy dłuższe niż 128 znaków. Cokolwiek ma przetrwać długi łańcuch wywołań, nie należy do tracestate.
- Nigdy nie zapisuj trace ID jako liczby w JavaScripcie
- 128-bitowy trace ID, a nawet 64-bitowy identyfikator Datadog przekraczają Number.MAX_SAFE_INTEGER. Trzeba trzymać je jako łańcuchy i przeliczać przez BigInt, gdy potrzebna jest arytmetyka, inaczej ostatnie cyfry po cichu się popsują.
Najczęściej zadawane pytania o dekoder traceparent
Czym jest nagłówek traceparent?
Co oznacza traceparent trace-flags 00?
Jaka jest różnica między trace-flags 01, 02 i 03?
Dlaczego mój trace ID składa się z samych zer?
Jak przekonwertować trace ID W3C na trace ID Datadog?
Czy traceparent zawiera znacznik czasu?
Czy nagłówek wklejony na tej stronie jest gdziekolwiek wysyłany?
Czy ten dekoder działa offline?
Powiązane narzędzia
Zobacz wszystkie narzędzia →Generator i konstruktor poleceń cURL
Web & API
Twórz polecenia curl w przeglądarce — ustaw metodę, nagłówki, autoryzację i treść, a gotowe polecenie pojawi się natychmiast. Presety dla Bearer, POST JSON i przesyłania plików. Bezpłatnie, prywatnie, bez rejestracji.
Generator htpasswd — bcrypt, Apache MD5 (apr1) i Basic Auth
Web & API
Generuj wpisy htpasswd z bcrypt, Apache MD5 (apr1), SHA-1 i innymi algorytmami. Gotowe bloki konfiguracji dla Apache, nginx i Docker. 100% w Twojej przeglądarce — bez przesyłania danych.
Generator Open Graph i meta tagów
Web & API
Generuj tagi Open Graph, Twitter Card i SEO meta tagi z podglądem na żywo dla Google, Facebooka i X. 100% za darmo, w przeglądarce, bez rejestracji — skopiuj i wklej kod.
Nginx Location Tester — dlaczego wygrywa ten blok
Web & API
Który blok location w nginx wygrywa — i dlaczego przegrały pozostałe. Darmowy tester dla =, ^~, ~ i ~*, w całości w przeglądarce.
Narzędzie do odszyfrowywania AES — OpenSSL i CryptoJS
Narzędzia bezpieczeństwa
Odszyfruj AES online — GCM/CBC/CTR, hasło lub klucz surowy, automatyczne wykrywanie formatu OpenSSL i CryptoJS „U2FsdGVkX1”. 100% w przeglądarce, klucze nigdy jej nie opuszczają.
Narzędzie do szyfrowania AES — GCM, CBC i CTR
Narzędzia bezpieczeństwa
Darmowe szyfrowanie AES online — AES-128/192/256, GCM/CBC/CTR, hasło (PBKDF2) lub klucz surowy. Działa w 100% w przeglądarce; nic nie jest przesyłane.