server: http_listen_port: 3200 distributor: receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 ingester: max_block_duration: 5m compactor: compaction: block_retention: 336h storage: trace: backend: local wal: path: /var/tempo/wal local: path: /var/tempo/blocks metrics_generator: registry: external_labels: source: tempo storage: path: /var/tempo/generator/wal remote_write: - url: http://prometheus:9090/api/v1/write send_exemplars: true # Not in the Ansible template, which is broken without it: the # local-blocks processor needs a traces WAL, and when it can't initialise, # Tempo 2.8 starts *no* processors for the tenant ("local blocks processor # requires traces wal"), so service-graphs and span-metrics never emit. traces_storage: path: /var/tempo/generator/traces overrides: defaults: metrics_generator: processors: [service-graphs, span-metrics, local-blocks] # Not in the Ansible template. Without it the generator labels exemplars # traceID (the code default; the docs wrongly say trace_id), which the # Prometheus datasource's exemplarTraceIdDestinations (trace_id) never # matches, so exemplars render but don't link to Tempo. trace_id_label_name: trace_id