# Observability
All Observability notes →3 — Cross-Signal Correlation
Metrics, logs, and traces are only more useful together than apart if something ties a specific instance of each of them back to the same event. The shared identifier that makes that jump possible — and what breaks when a hop in the call chain doesn't carry it.
What is Jaeger
CNCF-graduated distributed tracing system built at Uber in 2015, Dapper-lineage like Zipkin before it — and, since Jaeger v2, rebuilt on top of the OpenTelemetry Collector rather than bespoke ingestion code.
What is Tempo
Grafana Labs' distributed tracing backend — the radical simplification vs. Jaeger's classic architecture: no dedicated index, just object storage and a trace-ID lookup, queried with TraceQL and linked from metrics via exemplars.
1 — Why Tracing Exists
Covers the request-fan-out problem that metrics and logs can't solve alone, and why tracing became necessary in microservice architectures.
2 — Trace Context
Covers the trace ID / span ID / trace flags that identify a request and its position in a trace, and how they are carried across process boundaries.
3 — Span Modeling
Covers what a span should represent — operation boundaries, parent/child relationships, and span attributes vs. events.
4 — Context Propagation
Covers how trace context survives async boundaries, message queues, and batch jobs — and the common places it silently breaks.
5 — Trace Sampling
Covers head-based sampling decisions made at trace start, and their tradeoff against tail-based sampling on completeness vs. cost.
6 — Tail Sampling
Covers sampling decisions made after a trace completes, keeping error and slow traces at the cost of buffering full traces at the collector.
8 — Service Graphs
Covers deriving a live service dependency graph from trace data, and using it for blast-radius and dependency-health analysis.