ConfigsApr 16, 2026·4 min read

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.

TL;DR
Grafana Tempo stores distributed traces in cheap object storage and integrates natively with Grafana dashboards.
§01

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.

§02

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.

§03

How to use

  1. Deploy Tempo using the official Helm chart or Docker Compose setup.
  2. Configure your applications to send traces via OTLP (OpenTelemetry), Jaeger, or Zipkin protocols.
  3. Set up an object storage backend (S3, GCS, or local filesystem for testing).
  4. Add Tempo as a data source in Grafana and use the Explore view to query traces with TraceQL.
§04

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
§05

Related on TokRepo

§06

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

How does Tempo differ from Jaeger?+

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).

Does Tempo require Grafana?+

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.

What is TraceQL?+

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'.

Can Tempo handle high-volume production traffic?+

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.

What trace formats does Tempo support?+

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)

Discussion

Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.

Related Assets