DEV Community

Andrzej Korcz
Andrzej Korcz

Posted on

Dwa popularne standardy propagacji śledzenia komunikatów.

Image description

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

Przykład nagłówka traceparent:

  traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
Enter fullscreen mode Exit fullscreen mode

Gdzie:

  • 00 to wersja.
  • 4bf92f3577b34da6a3ce929d0e0e4736 to Trace ID.
  • 00f067aa0ba902b7 to Parent ID (Span ID).
  • 01 to flagi (bit flagi próbkowania, gdzie 01 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
Enter fullscreen mode Exit fullscreen mode

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 jak Trace 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
Enter fullscreen mode Exit fullscreen mode
  • x-B3-ParentSpanId: Identyfikator rodzica aktualnego spana. Ten nagłówek zawiera ID spana, który bezpośrednio poprzedza obecny span. Jest on podobny do Parent ID w W3C Trace Context.

Przykład:

  x-B3-ParentSpanId: 00f067aa0ba902b7
Enter fullscreen mode Exit fullscreen mode
  • 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 do Parent ID w W3C Trace Context, ale dotyczy konkretnego spana, a nie rodzica.

Przykład:

  x-B3-SpanId: 00f067aa0ba902b7
Enter fullscreen mode Exit fullscreen mode
  • 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
Enter fullscreen mode Exit fullscreen mode

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)