Skip to main content

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

  1. Start Tempo with the config above (via Docker in Section 5).
  2. 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

Visuals

Tempo Architecture Diagram