services: # Tempo runs as user 10001, and docker compose creates the volume as root. # As such, we need to chown the volume in order for Tempo to start correctly. init: image: &tempoImage grafana/tempo:latest user: root entrypoint: - "chown" - "10001:10001" - "/var/tempo" volumes: - ./tempo-data:/var/tempo tempo: image: *tempoImage command: [ "-multitenancy.enabled=true", "-config.file=/etc/tempo.yaml" ] volumes: - ../shared/tempo.yaml:/etc/tempo.yaml - ./tempo-data:/var/tempo ports: - "3200" # tempo - "4317" # otlp grpc depends_on: - init # Generate fake traces... k6-tracing: image: ghcr.io/grafana/xk6-client-tracing:v0.0.7 environment: - ENDPOINT=otel-collector:4317 restart: always depends_on: - otel-collector # And put them in an OTEL collector pipeline... otel-collector: image: otel/opentelemetry-collector:0.61.0 command: [ "--config=/etc/otel-collector.yaml" ] volumes: - ./otel-collector.multitenant.yaml:/etc/otel-collector.yaml prometheus: image: prom/prometheus:latest command: - --config.file=/etc/prometheus.yaml - --web.enable-remote-write-receiver - --enable-feature=exemplar-storage - --enable-feature=native-histograms volumes: - ../shared/prometheus.yaml:/etc/prometheus.yaml ports: - "9090:9090" grafana: image: grafana/grafana:11.5.2 volumes: - ./grafana-datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml environment: - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin - GF_AUTH_DISABLE_LOGIN_FORM=true - GF_FEATURE_TOGGLES_ENABLE=traceqlEditor metricsSummary ports: - "3000:3000"