Observability · Cluster
Tracing
Spans, context propagation, and sampling.
- 01 Span Anatomy: Trace IDs, Span IDs, and Parent Links How a trace is assembled from spans, why two identifiers with different scopes are needed, and what a span record must carry for the tree to be reconstructible offline.
- 02 The traceparent Header: Field Widths and Version Negotiation The exact byte layout of the W3C traceparent header, why its fields are fixed width, what the flags byte means, and how a version-00 parser must treat unknown versions.
- 03 Propagating Context Across Queues, Threads, and Proxies Why an implicit current-span variable fails the moment work moves to another thread or another process, and how context has to be carried explicitly through each boundary type.
- 04 Clock Skew and the Arithmetic of Span Durations Why span durations stay trustworthy while span start times do not, how skew makes a child appear to outlive its parent, and what correction can and cannot recover.
- 05 Head-Based Sampling: Where the Decision Belongs and What It Costs How probabilistic and rate-limiting samplers make the keep-or-drop call at trace start, why the decision must be consistent across the trace, and how the sampled flag makes it authoritative downstream.
- 06 Tail-Based Sampling: Buffering Traces Until the Outcome Is Known Why deciding after the trace completes requires holding spans in memory, how the buffering window and the trace-ID routing rule interact, and where the pipeline loses traces it intended to keep.
- 07 The baggage Header: Limits, Trust Boundaries, and Misuse How W3C Baggage carries arbitrary key-value pairs alongside a trace, the member and byte limits that force dropping, and why every entry crossing a trust boundary is untrusted input.
- 08 Adaptive Sampling: Feedback Control over Span Volume How a sampler adjusts its rate from observed traffic instead of a fixed configuration, why per-operation rates are needed, and the statistical damage caused by a rate that keeps changing.
- 09 Routing Traces Through a Collector Pipeline by Trace ID Why a stateful tracing stage cannot sit behind a round-robin load balancer, how consistent hashing keeps one trace on one worker, and what happens when the worker set changes.
- 10 Storing Traces: Two Access Patterns That Cannot Share One Index Why a trace store must support both point lookup by trace identifier and time-range search by service, how indexes serve each, and where retention and cost force the two apart.