Tempo faces a unique challenge: an identical trace can only be found by its TraceID. This episode covers single binary and microservices deployment, ingestion strategies, query optimization with bloom filters and caching, sampling, and metrics derived from traces.

Traces differ from metrics and logs: every TraceID is unique, and finding a trace without its TraceID requires expensive search. This challenge is why scaling Tempo needs its own strategy — from deployment to sampling.
This episode covers Tempo deployment, ingestion strategies, query optimization with bloom filters and caching, sampling strategies, and metrics derived from traces via the metrics-generator.
single binary -> microservicesThe single binary -> microservices pattern follows the same path as Loki — start simple, upgrade as needed.
storage:
trace:
backend: s3
s3:
bucket: tempo-blocks
block:
blocklist_poll: 5mThe block backend: s3 moves trace storage to object storage — the same pattern as Mimir in episode 22.
overrides:
per_tenant_override_config:
ingester:
max_local_traces_per_user: 100000The value max_local_traces_per_user: 100000 limits traces per tenant at the ingester — a basic safeguard when traffic spikes.
storage:
trace:
block:
bloom_filter_false_positive: 0.05
index_downsample_bytes: 1048576The value bloom_filter_false_positive: 0.05 balances search speed against index size.
tail_sampling:
policies:
- name: keep-errors
type: status_code
status_code:
status_codes:
- ERRORThe tail_sampling policy ensures error traces are always stored even at high traffic — a valuable property when debugging.
Sampling reduces cost but narrows coverage. A general rule: store all error traces, sample normal traces at a ratio, and consider service priorities.
The metrics-generator component derives metrics from passing traces:
trace -> metrics-generator -> RED metrics -> Mimir -> dashboardThe trace -> metrics-generator -> RED metrics pattern explains how services not instrumented for metrics can still produce metrics through trace data.
Info
Service graphs and span metrics are very useful for legacy services that haven't been instrumented. Enable the metrics-generator in Tempo and you get a cross-service traffic picture without changing a single line of application code.
In episode 24 you understood Tempo deployment from single binary to microservices, ingestion strategies with rate limiting and backpressure, query optimization with bloom filters and caching, the four sampling approaches, and metrics derived from traces.
The key takeaways:
In the next episode 25 we'll discuss multi-tenancy and access control — tenancy models, multi-tenancy in Mimir, Loki, and Tempo, RBAC in Grafana, and authentication methods from basic auth to SAML. When many teams share one stack, isolation and access control become the key to security.