# Docker Compose for OpenTelemetry Testing # This sets up a complete observability stack for local development version: '3.8' services: # OpenTelemetry Collector # Receives telemetry data and exports to backends otel-collector: image: otel/opentelemetry-collector-contrib:latest container_name: charybdis-otel-collector command: ["--config=/etc/otel-collector-config.yaml"] volumes: - ./docker/otel-collector-config.yaml:/etc/otel-collector-config.yaml ports: - "4317:4317" # OTLP gRPC receiver - "4318:4318" # OTLP HTTP receiver - "8888:8888" # Prometheus metrics exposed by the collector - "8889:8889" # Prometheus exporter metrics - "13133:13133" # health_check extension networks: - charybdis-telemetry # Jaeger - Distributed Tracing UI jaeger: image: jaegertracing/all-in-one:latest container_name: charybdis-jaeger environment: - COLLECTOR_OTLP_ENABLED=true ports: - "16686:16686" # Jaeger UI - "14250:14250" # Jaeger gRPC networks: - charybdis-telemetry # Prometheus - Metrics Storage prometheus: image: prom/prometheus:latest container_name: charybdis-prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--web.enable-lifecycle' volumes: - ./docker/prometheus.yml:/etc/prometheus/prometheus.yml - prometheus-data:/prometheus ports: - "9090:9090" networks: - charybdis-telemetry # Grafana - Visualization grafana: image: grafana/grafana:latest container_name: charybdis-grafana environment: - GF_SECURITY_ADMIN_PASSWORD=admin - GF_SECURITY_ADMIN_USER=admin volumes: - ./docker/grafana/provisioning:/etc/grafana/provisioning - grafana-data:/var/lib/grafana ports: - "3000:3000" networks: - charybdis-telemetry depends_on: - prometheus - jaeger networks: charybdis-telemetry: driver: bridge volumes: prometheus-data: grafana-data: