# Docker Compose setup for AgentDB Observability Stack # # Includes: # - OpenTelemetry Collector # - Prometheus (metrics storage) # - Jaeger (trace storage and UI) # - Grafana (visualization) version: '3.8' services: # OpenTelemetry Collector otel-collector: image: otel/opentelemetry-collector-contrib:latest command: ['--config=/etc/otel-collector-config.yaml'] volumes: - ./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 - '13133:13133' # Health check - '55679:55679' # ZPages environment: - ENVIRONMENT=development networks: - observability # Prometheus prometheus: image: prom/prometheus:latest command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/usr/share/prometheus/console_libraries' - '--web.console.templates=/usr/share/prometheus/consoles' - '--web.enable-lifecycle' volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus-data:/prometheus ports: - '9090:9090' networks: - observability depends_on: - otel-collector # Jaeger jaeger: image: jaegertracing/all-in-one:latest ports: - '16686:16686' # Jaeger UI - '14250:14250' # Jaeger gRPC - '14268:14268' # Jaeger HTTP environment: - COLLECTOR_OTLP_ENABLED=true - SPAN_STORAGE_TYPE=memory networks: - observability # Grafana grafana: image: grafana/grafana:latest ports: - '3000:3000' environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin - GF_USERS_ALLOW_SIGN_UP=false volumes: - grafana-data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning - ./grafana/dashboards:/var/lib/grafana/dashboards networks: - observability depends_on: - prometheus - jaeger volumes: prometheus-data: grafana-data: networks: observability: driver: bridge