Skip to content

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.

Bez śledzenia Działa w przeglądarce Bezpłatne
Wszystko jest dekodowane lokalnie w przeglądarce — wklejane nagłówki nigdy nie opuszczają tego urządzenia. Wystarczy otworzyć panel Sieć i patrzeć, jak milczy, albo całkiem odłączyć się od sieci.
Wypróbuj przykład
Rozbicie pól
Wersja
00
Trace ID
4bf92f3577b34da6a3ce929d0e0e4736
Parent ID (span ID)
00f067aa0ba902b7
Trace flags
01
trace-flags, bit po bicie
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.

Inne formaty propagacji
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.

Człony tracestate 2/32
# Klucz Wartość Status
1 rojo 00f067aa0ba902b7 OK
2 congo t61rcWkgMzE OK

Format traceparent: anatomia pól

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

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.

Szerokości pól, wartości nieprawidłowe, semantyka bitów flag oraz limity tracestate na tej stronie zostały sprawdzone względem opublikowanego tekstu specyfikacji, a nie opracowań wtórnych. — Zespół inżynierów Go Tools · Jul 22, 2026

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. 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. 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. 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. 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. 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.

✗ Niepoprawne
if (traceFlags === 0x01) { record(); }
✓ Poprawne
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.

✗ Niepoprawne
x-datadog-trace-id: 100985939111033328018442752961257817910
✓ Poprawne
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.

✗ Niepoprawne
if (version !== '00') throw new Error('bad traceparent');
✓ Poprawne
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.

✗ Niepoprawne
traceparent: 00-4BF92F3577B34DA6A3CE929D0E0E4736-00F067AA0BA902B7-01
✓ Poprawne
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?
To pojedynczy nagłówek HTTP, który przenosi rozproszony ślad przez granice usług, ustandaryzowany przez W3C tak, aby narzędzia różnych dostawców podążały za tym samym żądaniem. Zawiera cztery pola rozdzielone myślnikami — version, trace-id, parent-id i trace-flags — a w bieżącej wersji ma zawsze dokładnie 55 znaków. Każdy liczący się system śledzenia już go rozumie i to właśnie sprawia, że żądanie da się prześledzić od proxy brzegowego przez kilkanaście usług bez uzgadniania dostawcy na każdym przeskoku. Pełna gramatyka jest zdefiniowana w rekomendacji W3C Trace Context.
Co oznacza traceparent trace-flags 00?
Oznacza, że wywołujący świadomie zdecydował, iż tego śladu nie należy rejestrować. Bit sampled to bit 0 bajtu trace-flags; gdy jest wyzerowany, sampler wyżej w łańcuchu ocenił żądanie i wybrał brak rejestracji. To najczęściej źle odczytywana wartość w tym nagłówku, bo wygląda jak awaria, a jest decyzją. Gdy brakuje spanów, użyteczne pytanie nie dotyczy tego, co zepsuło się w usłudze, lecz tego, która usługa wyżej w łańcuchu przysyła span nadrzędny z wyłączonym próbkowaniem — sampler dziedziczący decyzję po rodzicu przekaże ten wybór wszystkim niżej.
Jaka jest różnica między trace-flags 01, 02 i 03?
Trace-flags to pole ośmiobitowe, więc te wartości są kombinacjami, a nie wyliczeniem. 01 ustawia wyłącznie bit 0: ślad jest próbkowany. 02 ustawia wyłącznie bit 1, czyli flagę random-trace-id z poziomu Level 2, która potwierdza, że co najmniej siedem skrajnie prawych bajtów trace ID wygenerowano z równomiernym rozkładem losowym — systemy niżej w łańcuchu mogą wtedy bezpiecznie próbkować lub dzielić ruch po tych bajtach. 03 ustawia oba. Ponieważ jest to pole bitowe, trzeba je sprawdzać operacją bitową AND; porównanie całego bajtu z 01 błędnie zaraportuje każdy ślad, który niesie też bit zarezerwowany, a bity zarezerwowane to dokładnie to, z czego zaczną korzystać przyszłe wersje.
Dlaczego mój trace ID składa się z samych zer?
Ponieważ śledzenie nigdy nie zostało zainicjowane, a nie dlatego, że ślad istnieje, ale nie ma danych. Specyfikacja wymienia trace-id z samych zer jako wartość nieprawidłową i nakazuje odbiorcom zignorować cały nagłówek, więc nic dalej się z nim nie powiąże. W praktyce bierze się to z SDK, które nie wystartowało, z ręcznie sklejonego nagłówka albo z warstwy pośredniej wstawiającej wartość zastępczą, gdy prawdziwego kontekstu nie było. Parent-id z samych zer, 0000000000000000, jest nieprawidłowy z tego samego powodu.
Jak przekonwertować trace ID W3C na trace ID Datadog?
Trzeba wziąć dolne 64 bity — 16 prawych cyfr szesnastkowych — i zapisać je jako łańcuch dziesiętny; to trafia do x-datadog-trace-id. Górne 64 bity pozostają szesnastkowe i podróżują osobno w tagu _dd.p.tid. Parent-id konwertuje się na wartość dziesiętną w całości. Odwrócenie tego albo przeliczenie wszystkich 128 bitów na jedną liczbę dziesiętną daje identyfikator, który nie pasuje do niczego w interfejsie, i dlatego problem wraca w zgłoszeniach do tracerów. Ta strona wykonuje podział automatycznie; do samodzielnej pracy z arytmetyką szesnastkową na dowolnych wartościach służy konwerter systemów liczbowych, a ta strona pozostaje przy identyfikatorach śladów.
Czy traceparent zawiera znacznik czasu?
Nie — i to bywa mylące, bo niektóre inne identyfikatory śladów go zawierają. Trace-id W3C to 16 nieprzezroczystych bajtów bez wbudowanego czasu. Trace ID w AWS X-Ray ma z kolei postać 1-{8 cyfr szesnastkowych}-{24 cyfry szesnastkowe}, gdzie pierwsze osiem cyfr to czas utworzenia w sekundach epoch, więc konwersja między tymi formatami przestawia bajty, ale nie wymyśli znacznika czasu, którego nigdy nie było. Gdy potrzebne są identyfikatory sortujące się chronologicznie, służą do tego UUIDv7 i ULID.
Czy nagłówek wklejony na tej stronie jest gdziekolwiek wysyłany?
Nie. Każde pole jest analizowane lokalnie w przeglądarce zwykłymi operacjami na łańcuchach i arytmetyką BigInt — nie ma wywołania serwera, nie ma zapisu tego, co zostało wpisane, nic nie zostaje zachowane. Tutaj ma to większe znaczenie niż przy większości narzędzi, bo traceparent pobrany z produkcyjnego żądania identyfikuje realny ruch w systemie obserwowalności. Nie trzeba wierzyć na słowo: wystarczy otworzyć narzędzia deweloperskie przeglądarki i patrzeć, jak panel Sieć milczy podczas pisania, albo całkiem odłączyć się od sieci i dekodować dalej. Braku jakiegokolwiek zapytania zewnętrznego pilnuje też automatyczny test kontraktowy uruchamiany przy każdym budowaniu, więc nie da się tego po cichu zepsuć.
Czy ten dekoder działa offline?
Tak. Strona jest statyczna, a dekoder to kilka kilobajtów JavaScriptu bez zależności, więc po jej wczytaniu można przejść w tryb offline — albo włączyć tryb samolotowy jeszcze przed wklejeniem czegokolwiek — i wszystko działa tak samo. Przy nagłówkach z wrażliwego środowiska warto zachować właśnie taką kolejność: wczytać stronę, odłączyć sieć, dopiero potem wkleić. Przycisk Kopiuj link koduje stan we fragmencie adresu URL po znaku #, a fragmenty również nigdy nie są przesyłane na serwer.

Powiązane narzędzia

Zobacz wszystkie narzędzia →