observability
Tempo Tracing Storage Calculator
Calculate Grafana Tempo or Jaeger distributed tracing storage requirements. Size disk, S3, and RAM based on spans/sec, bytes per span, sampling rate, and retention.
Tracing Storage with Grafana Tempo
Distributed tracing captures the full execution path of requests across microservices. Without sampling, trace storage grows proportionally to request rate × span size.
Storage Formula
raw_gb_per_day = spans_per_sec × bytes_per_span × 86400 / 1e9
compressed_gb_per_day = raw_gb_per_day / 4 (Tempo Parquet compression)
total_storage = compressed_gb_per_day × retention_daysTempo Architecture with S3
OTel Collector → Tempo Distributor → Ingester (RAM/WAL) → S3 blocks
→ Querier (on demand)With S3 backend, Tempo's local disk only holds the WAL (~5 min buffer). All historical data lives in object storage.
Sampling Strategy
# OpenTelemetry Collector — tail-based sampling
processors:
tail_sampling:
policies:
- name: errors-policy
type: status_code
status_code: {status_codes: [ERROR]}
- name: slow-policy
type: latency
latency: {threshold_ms: 500}
- name: base-rate
type: probabilistic
probabilistic: {sampling_percentage: 5}Backend Comparison
| Tempo + S3 | Jaeger + ES | |
|---|---|---|
| Compression | ~4× | ~1.5× |
| Storage cost | Low | High |
| Query speed | Good | Fast |
| Operational cost | Low | High |
Frequently Asked Questions
Should I use Grafana Tempo or Jaeger?
Tempo is recommended for new deployments. It uses S3-compatible object storage natively, compresses traces ~4× with Parquet, and integrates directly with Grafana. Jaeger uses Elasticsearch which is much more expensive — 5–10× more storage and RAM for equivalent trace volume.
What sampling rate should I use?
For high-traffic services (>1000 req/sec): 1–10% head-based sampling with tail-based sampling to capture all errors and slow requests. For low-traffic services: 100%. Without sampling at 1000 spans/sec and 500 bytes/span, you generate 43 GB/day of raw traces.
What's the difference between head-based and tail-based sampling?
Head-based sampling decides at the start of a request (fast, cheap, but misses errors). Tail-based sampling buffers the full trace and decides at the end — capturing all errors/slow traces regardless of base rate. Grafana Tempo supports tail-based sampling via the Tempo Operator.
How does Tempo compress trace data?
Tempo stores traces as Parquet files with snappy compression, achieving ~4× compression on typical trace data. A 1 KB span compresses to ~250 bytes. Jaeger with Elasticsearch achieves only ~1.5× compression due to the inverted index overhead.