services: prometheus: image: prom/prometheus:v3.7.1 profiles: ["observability"] command: - --config.file=/etc/prometheus/prometheus.yml - --storage.tsdb.retention.time=30d - --web.enable-lifecycle volumes: - ./deploy/observability/prometheus.yml:/etc/prometheus/prometheus.yml:ro - ./deploy/observability/alerts.yml:/etc/prometheus/alerts.yml:ro - mobilityops-prometheus:/prometheus ports: - "127.0.0.1:19090:9090" restart: unless-stopped networks: [mobilityops] grafana: image: grafana/grafana:12.2.0 profiles: ["observability"] environment: GF_SECURITY_ADMIN_USER: ${GRAFANA_ADMIN_USER:-admin} GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD:-change-me-before-start} GF_USERS_ALLOW_SIGN_UP: "false" GF_AUTH_ANONYMOUS_ENABLED: "false" volumes: - ./deploy/observability/grafana/provisioning:/etc/grafana/provisioning:ro - ./deploy/observability/grafana/dashboards:/var/lib/grafana/dashboards:ro - mobilityops-grafana:/var/lib/grafana ports: - "127.0.0.1:13000:3000" depends_on: [prometheus] restart: unless-stopped networks: [mobilityops] volumes: mobilityops-prometheus: mobilityops-grafana: