volumes: tempo-data: mimir-data: loki-data: grafana-data: services: # OpenTelemetry Collector - receives and routes all telemetry otel-collector: image: otel/opentelemetry-collector-contrib container_name: otel-collector ports: - 4317:4317 # gprc - 4318:4318 # http volumes: - ./config/otel-collector.yaml:/etc/otelcol-contrib/config.yaml depends_on: - tempo - mimir - loki # Grafana Tempo - distributed tracing backend tempo: image: grafana/tempo:latest container_name: tempo volumes: - ./config/tempo.yaml:/etc/tempo/config.yaml - tempo-data:/var/tempo command: ["-config.file=/etc/tempo/config.yaml"] ports: - "3200:3200" # Tempo API # Grafana Mimir - long-term metrics storage mimir: image: grafana/mimir:latest container_name: mimir volumes: - ./config/mimir.yaml:/etc/mimir/config.yaml - mimir-data:/data command: ["-config.file=/etc/mimir/config.yaml"] ports: - "9009:9009" # Mimir API # Grafana Loki - log aggregation loki: image: grafana/loki:latest container_name: loki volumes: - ./config/loki.yaml:/etc/loki/config.yaml - loki-data:/loki command: ["-config.file=/etc/loki/config.yaml"] ports: - "3100:3100" # Loki API # Grafana - visualization and dashboards grafana: image: grafana/grafana:latest container_name: grafana environment: - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin - GF_AUTH_DISABLE_LOGIN_FORM=true volumes: - ./config/grafana-datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml - grafana-data:/var/lib/grafana ports: - "3000:3000" # Grafana UI depends_on: - tempo - mimir - loki