services: mongo: extends: file: compose.mongo.yml service: mongo hostname: mongo volumes: - ./data/mongo-container:/data/db - ../scripts/mongodb_init_rs_profiling.js:/docker-entrypoint-initdb.d/init-rs.js:ro # This forces "mongo" to resolve to localhost ONLY inside this container. # This allows rs.initiate to succeed using the hostname "mongo". extra_hosts: - "mongo:127.0.0.1" app: extends: file: compose.store.yml service: app depends_on: - mongo - app-exporter # Wait for the exporter to be ready first command: - /bin/bash - -c - | agl store --host 0.0.0.0 --port 4747 \ --tracker console prometheus --backend mongo \ --mongo-uri mongodb://mongo:27017/?replicaSet=rs0 \ --n-workers ${AGL_STORE_N_WORKERS:-32} environment: - PROMETHEUS_MULTIPROC_DIR=/tmp/prometheus_multiproc volumes: - prometheus_multiproc:/tmp/prometheus_multiproc app-exporter: build: context: ../ dockerfile: docker/Dockerfile.dev command: agl prometheus --host 0.0.0.0 --port 4748 ports: - "4748:4748" environment: - PROMETHEUS_MULTIPROC_DIR=/tmp/prometheus_multiproc volumes: - prometheus_multiproc:/tmp/prometheus_multiproc mongodb-exporter: image: percona/mongodb_exporter:0.47.1 command: - "--mongodb.uri=mongodb://mongo:27017/" - "--collect-all" - "--mongodb.collstats-colls=agentlightning.rollouts,agentlightning.attempts,agentlightning.spans,agentlightning.resources,agentlightning.workers,agentlightning.rollout_queue,agentlightning.span_sequence_ids" depends_on: - mongo ports: - "9216:9216" node-exporter: image: prom/node-exporter:latest # In CI you might not have full /proc, but this is OK for container-level stats pid: "host" command: - "--path.rootfs=/host" volumes: - "/:/host:ro,rslave" prometheus: image: prom/prometheus:latest command: - "--config.file=/etc/prometheus/prometheus.yml" - "--storage.tsdb.path=/prometheus" - "--storage.tsdb.retention.time=1h" volumes: - ./prometheus/prometheus.mongo.yml:/etc/prometheus/prometheus.yml:ro - ./data/prometheus:/prometheus depends_on: - app - app-exporter - mongodb-exporter - node-exporter ports: - "9090:9090" grafana: image: grafana/grafana:latest ports: - "9091:3000" depends_on: - prometheus volumes: - ./data/grafana:/var/lib/grafana # 1. Mount the Datasource Config - ./grafana/datasource.yml:/etc/grafana/provisioning/datasources/datasource.yml # 2. Mount the Dashboard Provider Config - ./grafana/dashboard-provider.yml:/etc/grafana/provisioning/dashboards/provider.yml # 3. Mount the folder containing the actual JSON files - ./grafana/dashboards:/var/lib/grafana/dashboards environment: - GF_INSTALL_PLUGINS=grafana-piechart-panel - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin - GF_AUTH_DISABLE_LOGIN_FORM=true - GF_DASHBOARDS_DEFAULT_HOME_DASHBOARD_PATH=/var/lib/grafana/dashboards/agentlightning.json volumes: prometheus_multiproc: driver: local driver_opts: type: tmpfs device: tmpfs