services: mongodb: image: ${MONGODB_IMAGE:-mongo:8.0} restart: unless-stopped command: ["mongod", "--bind_ip_all"] volumes: - mongodb-data:/data/db healthcheck: test: ["CMD", "mongosh", "--quiet", "--eval", "db.adminCommand('ping').ok"] interval: 5s timeout: 3s retries: 20 ingestor: build: context: . restart: unless-stopped depends_on: mongodb: condition: service_healthy environment: TCP_ADDR: 0.0.0.0:7000 METRICS_ADDR: 0.0.0.0:9898 MONGODB_URI: mongodb://mongodb:27017 MONGODB_DATABASE: tcp_ingestor MONGODB_COLLECTION: traffic QUEUE_CAPACITY: 10000 BATCH_SIZE: 500 BATCH_FLUSH_MS: 500 READ_BUFFER_BYTES: 8192 RUST_LOG: info ports: - "7000:7000" - "9898:9898" prometheus: image: prom/prometheus:v3.5.0 restart: unless-stopped depends_on: - ingestor command: - --config.file=/etc/prometheus/prometheus.yml - --storage.tsdb.retention.time=15d volumes: - ./observability/prometheus.yml:/etc/prometheus/prometheus.yml:ro - prometheus-data:/prometheus ports: - "9090:9090" grafana: image: grafana/grafana:12.1.0 restart: unless-stopped depends_on: - prometheus environment: GF_SECURITY_ADMIN_USER: admin GF_SECURITY_ADMIN_PASSWORD: admin GF_USERS_ALLOW_SIGN_UP: "false" volumes: - ./observability/grafana/provisioning:/etc/grafana/provisioning:ro - ./observability/grafana/dashboards:/var/lib/grafana/dashboards:ro - grafana-data:/var/lib/grafana ports: - "3000:3000" volumes: mongodb-data: prometheus-data: grafana-data: