04 – Grafana Tempo Deep-Dive
Learning Objectives
- Explain Tempo’s architecture and index-free design.
- Compare Tempo to Jaeger/Zipkin/X-Ray/vendor backends.
- Understand push ingestion and query flow.
Architecture Overview
- Distributor → Ingester → Compactor → Storage → Query Frontend/Querier.
- Object storage (S3/GCS/Azure/MinIO) holds blocks of trace data; compaction improves query speed.
- Index-free: avoids costly secondary indexes; TraceQL + block metadata power queries.
Push vs Pull
- Prometheus pulls metrics; Tempo receives pushes from collectors/SDKs using OTLP/Jaeger.
Tempo vs Others
- Jaeger backend relies on indices in ES/Cassandra; Tempo optimizes for cheap object storage.
- Zipkin: simple, but not built for multi-tenant petabyte scale.
- X-Ray/vendor APM: managed, but can be costlier or lock you in. Tempo keeps data portable.
Minimal Tempo Config (filesystem for dev)
Create tempo.yaml:
server:
http_listen_port: 3200
distributor:
receivers:
otlp:
protocols:
grpc:
http:
storage:
trace:
backend: local
local:
path: /tmp/tempo/traces
compactor:
compaction:
block_retention: 168h # 7 days
Hands-on Lab
- Start Tempo with the config above (via Docker in Section 5).
- Verify Tempo UI/API on
http://localhost:3200(Explore via Grafana in Section 5).
Deliverables
- Running Tempo accepting OTLP.
Quiz (Self-check)
- Name core Tempo components and their roles.
- Why is index-free storage a cost advantage?
Resources
- Grafana Tempo Architecture Docs
- Tempo Config Reference