version: '1.0' services: prometheus: image: prom/prometheus:latest container_name: prometheus ports: - "9090:9090" volumes: - ./metrics/prometheus.yaml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' grafana: image: grafana/grafana:latest container_name: grafana ports: - "3000:3000" volumes: - ./metrics/grafana/datasources:/etc/grafana/provisioning/datasources - ./metrics/grafana/dashboards/config:/etc/grafana/provisioning/dashboards - ./metrics/grafana/dashboards/json:/var/lib/grafana/dashboards environment: - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer - GF_AUTH_BASIC_ENABLED=false - GF_USERS_ALLOW_SIGN_UP=false - GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH=/var/lib/grafana/dashboards/fastdeploy-dashboard.json depends_on: - prometheus jaeger: image: jaegertracing/all-in-one container_name: jaeger ports: - "16686:16686" environment: - COLLECTOR_OTLP_ENABLED=true restart: unless-stopped otel-collector: image: docker.io/otel/opentelemetry-collector volumes: - ./tracing/opentelemetry.yaml:/etc/otelcol/config.yaml - /tmp:/tmp ports: - "4317:4317" # OTLP gRPC - "4318:4318" # OTLP HTTP depends_on: - jaeger - prometheus restart: unless-stopped