version: "3.9"

services:
  otel-collector:
    image: otel/opentelemetry-collector-contrib:latest
    command: ["--config", "/etc/otelcol/config.yml"]
    volumes:
      - ./otel-collector-config.yml:/etc/otelcol/config.yml:ro
    ports:
      - "4317:4317"   # gRPC
      - "4318:4318"   # HTTP (Smithers sends here)
      - "8889:8889"   # Prometheus exporter scrape endpoint
    depends_on:
      - tempo

  prometheus:
    image: prom/prometheus:v3.2.0
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
    ports:
      - "9090:9090"
    depends_on:
      - otel-collector

  tempo:
    image: grafana/tempo:2.7.0
    command: ["-config.file=/etc/tempo/tempo.yml"]
    volumes:
      - ./tempo/tempo.yml:/etc/tempo/tempo.yml:ro
    ports:
      - "3200:3200"   # Tempo query API
      - "4317"        # OTLP gRPC (internal)

  grafana:
    image: grafana/grafana:11.5.0
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
    volumes:
      - ./grafana/provisioning:/etc/grafana/provisioning:ro
      - ./grafana/dashboards:/var/lib/grafana/dashboards:ro
    ports:
      - "3001:3000"
    depends_on:
      - prometheus
      - tempo
