Let's have a clean minimal tempo setup for 2.10

Hi, I’m trying to setup a local grafana oss observation stack - minio, mimit, tempo, alloy, grafana.
I’m struggeling with tempo here - I can not get it to run stable.
docker-compose, target=all mode / single binary

For me it looks as if the current examples are not updated to the current software.

I get a lot of errors that I was not able to fix - mainly because most suggestions where related to older versions of the software.

So my question is: What is the minimal docker-compose / tempo.yaml configuration to run stable for

  • alloy ingest
  • grafana drilldown traces
  • metrics generator export

I was able to get it running with a kafka node and the following tempo.yaml

partition_ring_live_store: true
stream_over_http_enabled: true

server:
  http_listen_port: 3200
  log_level: info

usage_report:
  reporting_enabled: false

distributor:
  ingester_write_path_enabled: false
  kafka_write_path_enabled: true
  receivers:
    otlp:
      protocols:
        grpc:
          endpoint: "0.0.0.0:4317"
        http:
          endpoint: "0.0.0.0:4318"

backend_scheduler:
  provider:
    compaction:
      compaction:
        block_retention: 1h

backend_worker:
  backend_scheduler_addr: localhost:3200
  compaction:
    block_retention: 1h
  ring:
    kvstore:
      store: memberlist

memberlist:
  abort_if_cluster_join_fails: false
  bind_port: 7946
  join_members:
    - tempo:7946

metrics_generator:
  registry:
    external_labels:
      source: tempo
      cluster: docker-compose
  storage:
    path: /var/tempo/generator/wal
    remote_write:
      - url: "http://mimir:9009/api/v1/push"
        send_exemplars: true
  traces_storage:
    path: /var/tempo/generator/traces

query_frontend:
  rf1_after: "1999-01-01T00:00:00Z"

storage:
  trace:
    backend: s3
    block:
      version: vParquet5
    s3:
      endpoint: minio:9000
      access_key: minio
      secret_key: supersecret
      bucket: tempo-data
      insecure: true
    wal:
      path: /var/tempo/wal

ingest:
  enabled: true
  kafka:
    address: redpanda:9092
    topic: tempo-ingest

block_builder:
  consume_cycle_duration: 30s

overrides:
  defaults:
    metrics_generator:
      processors: [service-graphs, span-metrics, local-blocks]
      generate_native_histograms: both

This is the relevant part of my docker-compose.yaml

name: observability

services:
  minio:
    image: minio/minio:latest
    entrypoint: [""]
    command: ["/bin/sh", "-c", "mkdir -p /data/tempo-data && mkdir -p /data/mimir-data && mkdir -p /data/mimir-alertmanager && mkdir -p /data/mimir-ruler && mkdir -p /data/loki-data && mkdir -p /data/loki-ruler && minio server /data --console-address ':9001'"]
    restart: always
    environment:
      - "MINIO_ROOT_USER=minio"
      - "MINIO_ROOT_PASSWORD=supersecret"
    ports:
      - "9001:9001"
    volumes:
      - minio-data:/data
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:9000/minio/health/live" ]
      interval: 15s
      timeout: 20s
      retries: 5

  redpanda:
    image: redpandadata/redpanda:latest
    restart: always
    command: >
      redpanda start
      --mode=dev-container
      --overprovisioned
      --kafka-addr=PLAINTEXT://0.0.0.0:9092
      --advertise-kafka-addr=PLAINTEXT://redpanda:9092
    ports:
      - "9092:9092"

  tempo:
    image: grafana/tempo:latest
    command: "-target=all -config.file=/etc/tempo.yaml"
    restart: always
    volumes:
      - ./config/tempo/tempo.yaml:/etc/tempo.yaml:ro
    ports:
      - "3200:3200" # tempo
      - "4317" # otlp grpc (internal only - alloy owns host port)
      - "4318" # otlp http (internal only - alloy owns host port)
      - "7946"
    depends_on:
      - minio
      - redpanda