# Grafana Tempo configuration for xrpld telemetry stack. # # Runs in single-binary mode for local development. # Receives traces via OTLP/gRPC from the OTel Collector and stores # them locally. Queryable via Grafana Explore using the Tempo datasource. # # Search filters are configured on the Grafana datasource side # (grafana/provisioning/datasources/tempo.yaml). Tempo auto-indexes # all span attributes for search in single-binary mode. # # For production, replace local storage with S3/GCS backend and adjust # retention via the compactor settings. See: # https://grafana.com/docs/tempo/latest/configuration/ stream_over_http_enabled: true server: http_listen_port: 3200 # Raise the TraceQL metrics query range limit. The default # query_frontend.metrics.max_duration is 3h, so a dashboard set to a longer # window (e.g. 6h/12h) fails with "range exceeds 3h0m0s". 168h matches the # search max_duration and gives dashboards generous headroom. query_frontend: metrics: max_duration: 168h distributor: receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 ingester: max_block_duration: 5m compactor: compaction: block_retention: 1h # Enable metrics generator for service graph, span metrics, and the # local-blocks processor. Produces RED metrics (rate, errors, duration) per # service/span for the service map, and keeps recent trace blocks queryable so # TraceQL metrics queries (quantile_over_time, count_over_time, etc. via # /api/metrics/query_range) work. metrics_generator: registry: external_labels: source: tempo storage: path: /var/tempo/generator/wal # Uncomment and add a Prometheus service to docker-compose.yml # to enable remote_write for service graph metrics: # remote_write: # - url: http://prometheus:9090/api/v1/write # Separate WAL the local-blocks processor flushes traces to for metrics # queries. Required when flush_to_storage is true. traces_storage: path: /var/tempo/generator/traces processor: local_blocks: # xrpld consensus/transaction spans are SPAN_KIND_INTERNAL. By default # local-blocks keeps only server spans for TraceQL metrics, so attribute # aggregations over internal spans return nothing. Keep all spans. filter_server_spans: false # Flush recent blocks to traces_storage so query_range can read them. flush_to_storage: true overrides: defaults: metrics_generator: processors: - service-graphs - span-metrics - local-blocks storage: trace: backend: local wal: path: /var/tempo/wal local: path: /var/tempo/blocks