Grafana Tempo — Massively Scalable Distributed Tracing Backend
Grafana Tempo is a high-volume, minimal-dependency distributed tracing backend that ingests OpenTelemetry, Jaeger, and Zipkin spans into cheap object storage and integrates natively with Grafana for trace exploration.
What it is
Grafana Tempo is a high-volume, minimal-dependency distributed tracing backend. It ingests spans from OpenTelemetry, Jaeger, and Zipkin into object storage (S3, GCS, Azure Blob) and provides native integration with Grafana for trace visualization.
Tempo targets platform teams and SREs who need distributed tracing at scale without the operational overhead of running Elasticsearch or Cassandra clusters that traditional tracing backends require.
The project is actively maintained and suitable for both individual developers and teams looking to integrate it into their existing toolchain. Documentation and community support are available for onboarding.
How it saves time or tokens
Tempo uses object storage instead of databases, cutting storage costs by 10-100x compared to Elasticsearch-backed alternatives. There is no indexing step, so ingestion throughput scales linearly. The TraceQL query language lets you search traces by attributes directly from Grafana without maintaining a separate query infrastructure.
For teams evaluating multiple tools in the same category, the clear documentation and active community reduce the time spent on research and troubleshooting. Getting started takes minutes rather than hours of configuration.
How to use
- Deploy Tempo using the official Helm chart or Docker Compose setup.
- Configure your applications to send traces via OTLP (OpenTelemetry), Jaeger, or Zipkin protocols.
- Set up an object storage backend (S3, GCS, or local filesystem for testing).
- Add Tempo as a data source in Grafana and use the Explore view to query traces with TraceQL.
Example
# tempo.yaml - minimal configuration
server:
http_listen_port: 3200
distributor:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
storage:
trace:
backend: s3
s3:
bucket: tempo-traces
endpoint: s3.amazonaws.com
region: us-east-1
Related on TokRepo
- AI Tools for Monitoring — Compare Tempo with other observability and monitoring tools.
- AI Tools for DevOps — Explore the broader DevOps toolchain that Tempo fits into.
Common pitfalls
- Expecting Tempo to index all span attributes by default. Tempo is a trace store, not a search engine. Use TraceQL for attribute-based queries but set up service graphs for discovery.
- Skipping the compactor component. Without compaction, object storage fills with small files that degrade query performance over time.
- Not setting trace retention policies. Object storage is cheap but not free. Configure max_block_duration and retention to control costs.
- Not reading the changelog before upgrading. Breaking changes between versions can cause unexpected failures in production. Pin your version and review release notes.
Frequently Asked Questions
Jaeger requires an indexed storage backend like Elasticsearch or Cassandra. Tempo stores traces in object storage without indexing, reducing operational complexity and cost. Both accept the same trace formats (OTLP, Jaeger, Zipkin).
No, but Tempo is designed to work with Grafana. Without Grafana, you can still query traces via the Tempo HTTP API. Grafana provides the visualization, TraceQL editor, and correlation with logs and metrics.
TraceQL is Tempo's query language for searching traces by span attributes, duration, status, and resource labels. It runs directly in Grafana's Explore view and supports complex filters like 'find traces where span duration > 500ms and service = payment'.
Yes. Tempo is designed for high ingestion rates. Its architecture separates distributors (ingestion) from queriers (search), allowing independent scaling. Object storage backends handle virtually unlimited data volume.
Tempo natively ingests OpenTelemetry (OTLP over gRPC and HTTP), Jaeger (Thrift and gRPC), and Zipkin (JSON and Thrift). No format conversion is needed for applications already instrumented with these protocols.
Citations (3)
- Grafana Tempo GitHub— High-volume distributed tracing backend with object storage
- Grafana Tempo Documentation— Ingests OpenTelemetry, Jaeger, and Zipkin spans
- TraceQL Documentation— TraceQL query language for trace search
Related on TokRepo
Discussion
Related Assets
DTM — Distributed Transaction Manager for Microservices
A cross-language distributed transaction framework supporting Saga, TCC, XA, and two-phase message patterns for reliable microservice coordination.
WatermelonDB — Reactive Database for React Native Apps
A high-performance reactive database framework for React Native and React web apps, built on top of SQLite with lazy loading and sync primitives.
Dexie.js — Minimalist IndexedDB Wrapper for the Web
A lightweight wrapper around IndexedDB that provides a clean Promise-based API for client-side storage in web applications.