← Back to Labs

Distributed Tracing Lab

Follow one checkout request from edge to payments and a queue worker, then see how one lost carrier splits the trace story.

Incident modeChoose whether propagation stays intact, breaks on the payments hop, or breaks on the queue handoff
browserAthens useredge proxyFrankfurtorders-apiBerlinpayments-apiSofiareceipt queuebroker topicmail workerWarsawcollectorOTLP ingest + batchtrace backendquery + waterfallactive tracing boundary
Carrier now
incoming request: no traceparent present
generated traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
tracestate: acme=edge=fra-1,sampler=head
Collector view
Nothing has been exported yet. The live request is still only local span state plus a propagated header.
Trace backend
A query later should find one trace root at the edge.
single live trace
4bf92f35...0e4736
No downstream split exists yet. The request lineage is still one tree in progress.
gateway GET /checkout
Span setSee which spans exist so far, which trace id they use, and where each parent points
gateway GET /checkout
server · edge proxy
trace=4bf92f35...0e4736 span=00f067aa0ba902b7
parent=root
root span created at the first instrumented hop
Step 1 / 6The edge starts one root trace for the incoming checkout request

A browser request arrives with no tracing context, so the edge creates a new trace id and root span before forwarding anything inward.

What changed: The first instrumented hop generated trace context because the browser request arrived without any existing `traceparent`.

Propagation result: The trace has one root span and one trace id. No downstream continuity question exists yet.

Active incident mode: Every hop forwards trace context correctly, including the async queue message.

Root trace created

Arrow keys to navigate · R to reset

Tap dots to jump to any step

Read the full article →Take the quiz →