# chat-deploy 可观测性组件部署配置 # 用于向 itom-platform 可观测中心推送日志和指标 # # 使用方法: # 1. 复制 config.env.example 为 config.env 并修改配置 # 2. 启动服务:docker compose --env-file config.env -f docker-compose-observability.yaml up -d # 3. 如需启用指标采集:docker compose --env-file config.env -f docker-compose-observability.yaml --profile metrics up -d services: # ============================== # 日志采集(Promtail) # 采集 Docker 容器日志并推送到 itom-platform 的 Loki # ============================== promtail: image: "${PROMTAIL_IMAGE:-grafana/promtail:3.0.0}" container_name: chat-deploy-promtail restart: always user: "0" command: ["-config.file=/etc/promtail/config.yml", "-config.expand-env=true"] # 禁用 promtail 自身的日志输出到 Docker,避免日志循环 logging: driver: "none" environment: - LOKI_URL=${LOKI_URL} - OBS_AUTH_TOKEN=${OBS_AUTH_TOKEN} - OBS_PROJECT=${OBS_PROJECT} - OBS_SERVICE=${OBS_SERVICE} - DOCKER_API_VERSION=${DOCKER_API_VERSION:-1.44} volumes: - /var/lib/docker/containers:/var/lib/docker/containers:ro - /var/run/docker.sock:/var/run/docker.sock:ro - ./config/promtail.yaml:/etc/promtail/config.yml:ro networks: - chat-deploy-obs # ============================== # 指标采集(Prometheus Agent Remote Write) # 可选,需要 --profile metrics 启用 # ============================== prometheus-agent: profiles: ["metrics"] image: prom/prometheus:latest container_name: chat-deploy-prometheus-agent restart: always user: "0" command: - "--config.file=/prometheus/prometheus.yml" - "--storage.tsdb.path=/prometheus" environment: - METRICS_REMOTE_WRITE_URL=${METRICS_REMOTE_WRITE_URL} - METRICS_TARGETS=${METRICS_TARGETS} - OBS_AUTH_ENABLE=${OBS_AUTH_ENABLE:-false} - OBS_AUTH_TOKEN=${OBS_AUTH_TOKEN} - OBS_PROJECT=${OBS_PROJECT} - OBS_SERVICE=${OBS_SERVICE} - OBS_SERVICE_NAME=${OBS_SERVICE_NAME} - OBS_ENV=${OBS_ENV:-prod} - REDIS_EXPORTER_TARGETS=${REDIS_EXPORTER_TARGETS} - MONGODB_EXPORTER_TARGETS=${MONGODB_EXPORTER_TARGETS} - NODE_EXPORTER_TARGETS=${NODE_EXPORTER_TARGETS} - REDIS_EXPORTER_SERVICE=${REDIS_EXPORTER_SERVICE} - MONGODB_EXPORTER_SERVICE=${MONGODB_EXPORTER_SERVICE} - NODE_EXPORTER_SERVICE=${NODE_EXPORTER_SERVICE} volumes: - prometheus_agent_data:/prometheus - ./config/prometheus-agent-entrypoint.sh:/etc/prometheus/entrypoint.sh:ro entrypoint: ["/bin/sh", "/etc/prometheus/entrypoint.sh"] networks: - chat-deploy-obs depends_on: - mongodb-exporter # ============================== # MongoDB Exporter # 采集 MongoDB 指标,需要 --profile metrics 启用 # ============================== mongodb-exporter: profiles: ["metrics"] image: percona/mongodb_exporter:0.40.0 container_name: chat-deploy-mongodb-exporter restart: always command: - "--mongodb.uri=${MONGODB_URI}" - "--compatible-mode" - "--collect-all" environment: - MONGODB_URI=${MONGODB_URI} ports: - "9216:9216" networks: - chat-deploy-obs # ============================== # Redis Exporter(可选) # 采集 Redis 指标,需要 --profile metrics 启用 # ============================== redis-exporter: profiles: ["metrics"] image: oliver006/redis_exporter:latest container_name: chat-deploy-redis-exporter restart: always environment: - REDIS_ADDR=${REDIS_ADDR} - REDIS_PASSWORD=${REDIS_PASSWORD} ports: - "9121:9121" networks: - chat-deploy-obs # ============================== # Node Exporter(可选) # 采集系统级指标(CPU/Memory/Disk/Network) # 需要 --profile metrics 启用 # ============================== node-exporter: profiles: ["metrics"] image: prom/node-exporter:latest container_name: chat-deploy-node-exporter restart: always command: - "--path.rootfs=/host" - "--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)" volumes: - /:/host:ro,rslave ports: - "9100:9100" networks: - chat-deploy-obs networks: chat-deploy-obs: driver: bridge volumes: prometheus_agent_data: {}