1. W3C Trace Context (standard propagacji śledzenia przyjęty przez W3C):
Ten standard został wprowadzony, aby zapewnić jednolity format propagacji kontekstu śledzenia między różnymi systemami, serwisami i narzędziami. Działa niezależnie od implementacji i ma na celu ujednolicenie formatu w różnych środowiskach. W3C Trace Context składa się z dwóch kluczowych nagłówków:
-
traceparent
: To główny nagłówek w W3C Trace Context. Zawiera najważniejsze informacje o kontekście śledzenia:-
Wersja: Numer wersji standardu (obecnie
00
). - Trace ID: Globalny unikalny identyfikator całego śledzenia (np. cała ścieżka od producenta do konsumenta).
- Parent ID (Span ID): Identyfikator spana reprezentującego bezpośredniego rodzica w śledzeniu.
- Flagi: Informacje na temat próbkowania (czy dany span ma być śledzony i przesyłany do systemu zbierającego).
-
Wersja: Numer wersji standardu (obecnie
Przykład nagłówka traceparent
:
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
Gdzie:
-
00
to wersja. -
4bf92f3577b34da6a3ce929d0e0e4736
toTrace ID
. -
00f067aa0ba902b7
toParent ID
(Span ID). -
01
to flagi (bit flagi próbkowania, gdzie01
oznacza, że span ma być śledzony).-
tracestate
: To dodatkowy nagłówek używany w W3C Trace Context. Zawiera bardziej zaawansowane informacje, które mogą być specyficzne dla dostawcy systemu śledzenia (np. dodatkowe dane potrzebne narzędziu śledzącemu). Pozwala na propagowanie dodatkowych metadanych związanych z śledzeniem, np. priorytety lub informacje specyficzne dla narzędzia (np. Jaeger, Zipkin).
-
Przykład:
tracestate: congo=t61rcWkgMzE
2. B3 Propagation (standard używany przez Zipkin):
B3 to inny, popularny standard propagacji kontekstu śledzenia, stosowany głównie w systemie Zipkin, ale obsługiwany także przez inne tracery, takie jak Jaeger. B3 działa w sposób nieco prostszy niż W3C Trace Context i składa się z kilku nagłówków:
-
x-B3-TraceId
: To globalny identyfikator śledzenia (trace). Odpowiada za identyfikację całego cyklu śledzenia, podobnie jakTrace ID
w W3C. Ten identyfikator jest unikalny dla całego śledzenia i pozwala połączyć wszystkie spany w jeden trace.
Przykład:
x-B3-TraceId: 4bf92f3577b34da6a3ce929d0e0e4736
-
x-B3-ParentSpanId
: Identyfikator rodzica aktualnego spana. Ten nagłówek zawiera ID spana, który bezpośrednio poprzedza obecny span. Jest on podobny doParent ID
w W3C Trace Context.
Przykład:
x-B3-ParentSpanId: 00f067aa0ba902b7
-
x-B3-SpanId
: To identyfikator spana w ramach śledzenia. Każdy span w trace ma swój unikalny identyfikator, który odróżnia go od innych spanów w danym trace. Jest podobny doParent ID
w W3C Trace Context, ale dotyczy konkretnego spana, a nie rodzica.
Przykład:
x-B3-SpanId: 00f067aa0ba902b7
-
x-B3-Sampled
: To flaga określająca, czy dany span (i cały trace) powinien być próbkowany i wysyłany do systemu zbierającego. Możliwe wartości to:-
1
oznacza, że span ma być śledzony. -
0
oznacza, że span nie będzie śledzony.
-
Przykład:
x-B3-Sampled: 1
Podział nagłówków:
-
W3C Trace Context:
traceparent
tracestate
-
B3 Propagation (Zipkin):
x-B3-TraceId
x-B3-ParentSpanId
x-B3-SpanId
x-B3-Sampled
Jakie są różnice między tymi standardami?
W3C Trace Context jest bardziej nowoczesnym, ujednoliconym standardem wspieranym przez organizację W3C, co oznacza, że jest neutralny w stosunku do narzędzi do śledzenia (np. Jaeger, Zipkin). Umożliwia bardziej elastyczną propagację informacji o śledzeniu, w tym dostarczanie zaawansowanych metadanych poprzez
tracestate
.B3 jest starszym standardem propagacji, który został wprowadzony przez Zipkin. Jest prostszy i używa osobnych nagłówków dla każdego elementu kontekstu śledzenia (trace ID, span ID itd.), zamiast jednej złożonej struktury, jak w W3C Trace Context.
Co to oznacza dla Twojej aplikacji?
- Twoja aplikacja aktualnie obsługuje zarówno W3C Trace Context (
traceparent
,tracestate
), jak i B3 (x-B3-*
). - W wielu przypadkach, systemy takie jak Jaeger, Zipkin, lub OpenTelemetry potrafią obsługiwać oba standardy, ale powinno się wybrać jeden spójny standard propagacji. Korzystanie z obu może wprowadzać zamieszanie i niespójności, zwłaszcza gdy różne systemy interpretują nagłówki inaczej.
- Jeśli chcesz mieć pełną kontrolę nad śledzeniem, najlepiej jest zdecydować się na jeden standard (najczęściej rekomendowany jest W3C Trace Context, ponieważ jest to standard uznawany przez W3C i ma szersze wsparcie).
Jeśli twój system korzysta z różnych narzędzi do śledzenia (np. Jaeger, Zipkin) i musisz wspierać oba standardy, konieczne może być skonfigurowanie odpowiednich integracji lub middleware, które będą konwertować nagłówki między tymi standardami.
Top comments (0)