Tempo is a scalable distributed tracing backend based on object storage. This episode covers its component architecture, the concepts of span, trace, and sampling, native OTLP support, and a comparison of Tempo with Jaeger in terms of architecture and storage.

The third pillar of observability is traces — the map of a request's journey across many services. Without traces, finding which service slows down a request is pure guesswork. Grafana Tempo is the backend that stores and queries that trace data.
Tempo is designed with the same philosophy as Loki: cheap, scalable, and based on object storage. This episode covers Tempo's architecture, fundamental tracing concepts, sampling strategies, and a comparison of Tempo with Jaeger.
curl -s http://localhost:3200/readyThe ready output from curl -s http://localhost:3200/ready means Tempo is ready to receive traces — a habit you've been using since episode 4.
Like its siblings Mimir and Loki, Tempo splits the trace path into components:
otlp -> distributor -> ingester -> object storage
query -> query-frontend -> querier <- blokThe otlp -> distributor -> ingester -> object storage flow is the main storage path. The metrics-generator reads the same traces to derive metrics.
span:
name: call.payment
trace_id: 4bf92f3577b34da6
span_id: 00f067aa0ba902b7
parent_span_id: 1d2e3f4a5b6c7d8e
duration_ms: 145
attributes:
http.status_code: 500The parent_span_id field is what forms the parent-child relationships between spans within one trace.
A trace only forms when context is forwarded between services. The standard used is W3C Trace Context via the traceparent header — you'll practice this hands-on in episode 14.
Storing every trace is unrealistic at high traffic. There are two main approaches:
sampler:
type: traceidratio
ratio: 0.1The value ratio: 0.1 means 10 percent of traces are stored. The fuller sampling concept is in episode 24.
tempo: object storage + TraceQL, cheap, Grafana-integrated
jaeger: external database, mature, broad ecosystemThe tempo: object storage + TraceQL pattern is the choice in this series because of native Grafana integration and storage cost.
Info
Native integration with Grafana is Tempo's main selling point. Stored traces can be directly visualized as waterfall diagrams without additional plugins.
In episode 13 you understood Tempo as an object-storage-based trace backend with native OTLP support, learned its architectural components from distributor to metrics-generator, understood the concepts of span, trace, context propagation, and sampling, and compared Tempo with Jaeger.
The key takeaways:
In the next episode 14 we'll discuss OpenTelemetry instrumentation for traces — auto-instrumentation per language, creating manual spans, W3C context propagation, and best practices for span naming and attributes. It's time to make your applications produce real traces.