Implementing Distributed Tracing

1. Understanding Trace Context Propagation

StandardHeader
W3C Trace Contexttraceparent, tracestate
B3 (single)b3: traceId-spanId-sampled-parentId
B3 (multi)X-B3-TraceId, X-B3-SpanId, X-B3-Sampled
Jaegeruber-trace-id
Baggagebaggage: key=value,... for cross-cutting metadata

2. Implementing Span Creation

Example: OpenTelemetry Java

Tracer tracer = GlobalOpenTelemetry.getTracer("order-svc");
Span span = tracer.spanBuilder("createOrder")
    .setAttribute("user.id", userId)
    .setSpanKind(SpanKind.SERVER)
    .startSpan();
try (Scope s = span.makeCurrent()) {
    span.addEvent("validation.started");
    Order o = createOrder(req);
    span.setAttribute("order.id", o.id);
    return o;
} catch (Exception e) {
    span.recordException(e);
    span.setStatus(StatusCode.ERROR, e.getMessage());
    throw e;
} finally {
    span.end();
}
Span FieldDetail
NameOperation: HTTP GET /orders/:id
KindSERVER, CLIENT, PRODUCER, CONSUMER, INTERNAL
AttributesKey-value tags
EventsTime-stamped log entries
StatusOK / ERROR + message

3. Implementing Trace Sampling Strategies

StrategyDetail
Always-on100% — expensive
Probabilistic headX% sampled at root
Rate-limitedN per second
Tail-basedDecide after seeing whole trace; keep errors / slow
AdaptivePer-service rate based on volume

4. Working with OpenTelemetry

ComponentPurpose
SDKPer-language instrumentation
Auto-instrumentationJava agent, Python opentelemetry-instrument
OTLPWire protocol (gRPC/HTTP)
CollectorReceive, process, export
BackendsJaeger, Tempo, Zipkin, vendor SaaS
SignalsTraces, metrics, logs unified

5. Implementing Baggage for Context

PropertyDetail
DefinitionKey-value metadata propagated across services
Use casesTenant id, feature flag, A/B variant
CostAdds bytes to every request header
CautionAvoid PII; bound size

6. Understanding Trace Visualization

ViewInsight
Waterfall / GanttSpan timing, parallelism
Service map / graphTopology, error rates
Flame graphHot path identification
ComparisonDiff against baseline

7. Implementing Service Dependency Mapping

SourceDetail
Trace aggregationBuild graph from spans
Service meshKiali (Istio), Linkerd Viz
eBPF (Cilium)Network-level dependency map

8. Handling Trace Storage and Querying

BackendStorage
JaegerCassandra, ES, Badger
TempoS3 / GCS object store
ZipkinES, MySQL, Cassandra
IndexingBy trace id; secondary by service+operation+tags

9. Implementing Critical Path Analysis

StepAction
1Find longest path through span tree
2Identify dominant span(s)
3Optimize or parallelize hottest segment

10. Understanding Distributed Tracing Trade-offs

ProCon
End-to-end latency visibilityHeader overhead per request
Root cause analysisStorage cost grows with traffic
Service map auto-discoverySampling loses outliers (mitigated by tail sampling)