Skip to main content

Install Tempo or Jaeger

Inspect 1.36

Pick a trace backend to store spans and search them. Tempo keeps traces cheap on object storage and lives inside Grafana beside your metrics and logs; Jaeger is a standalone tracing system with its own UI. If you already run Grafana and Loki here, Tempo is the natural fit. Either way, the exports to it, so switching backends is a change to one exporter block rather than to any service.

Tempo stores trace blocks on object storage and needs no separate index, which keeps it cheap:

		$ helm repo add grafana https://grafana.github.io/helm-charts
$ helm install tempo grafana/tempo \
  --namespace monitoring --create-namespace \
  --set storage.trace.backend=s3 \
  --set storage.trace.s3.bucket=my-tempo-bucket
	

Point it at a native bucket or , and set a block retention period. Tempo writes traces into blocks on that storage; leave the block sizing at its defaults to start, and revisit it only if trace volume is high enough to need larger blocks. Add it as a Grafana data source (http://tempo.monitoring.svc.cluster.local:3200) and query with TraceQL, which filters traces by duration, attributes, and span structure (for example, slow traces that touched the checkout service).

When each fits#

Tempo Jaeger
Storage Object storage only, no index database Its own backend (Cassandra, Elasticsearch, or Badger)
UI Inside Grafana, queried with TraceQL Its own Jaeger UI
Fits when You run Grafana and want traces beside metrics and logs, cheaply You want a dedicated tracing UI, or already run Jaeger

Secure the query path#

Traces contain request paths and sometimes payload attributes, so the query UI is not something to expose openly. Put Grafana (for Tempo) or the Jaeger UI behind authenticated ingress with OIDC, the same as . Do not put a Jaeger UI on a type: LoadBalancer Service with no auth.

With a backend running, link traces to the logs and metrics behind them: .