基于 Docker Compose
基础要求
- 部署服务器需预留 CPU、内存资源在 4C、8G 以上,磁盘可用空间不小于 100G。
- 为减少部署复杂度,建议基于 HAP 现有服务器进行部署运维平台。
- 使用外部组件时,则需通过环境变量将相关组件的连接信息传递给
agent服务。
关于镜像形态(1.4.0 起):运维平台已合并为单一镜像
ops-allinone,所有组件(gateway / prometheus / grafana / loki / tempo / alloy / agent / nodeagent / 告警库 mongo)共用这一个镜像,运行时由各服务的ROLE环境变量决定其角色。因此只需拉取一个镜像,离线交付也只是一个文件。
开始部署
拉取镜像(离线包下载)
docker pull nocoly/ops-allinone:1.4.0
创建配置文件
cat > /data/hap/script/ops.yaml <<\EOF
# 所有服务共用同一镜像,仅靠 ROLE 区分角色
x-ops-image: &ops_image nocoly/ops-allinone:1.4.0
# 各服务共享的环境变量(不含 ROLE,ROLE 由各服务单独指定)
x-common-env: &common_env
TZ: "Asia/Shanghai"
ENV_OPS_TOKEN: "your-ops-access-token-change-me" # 首次部署务必调整,此值为运维平台访问认证密钥
# ===================== 子路径(可选)=====================
# 通过反向代理挂载子路径时填写,如 /mdis;直接端口访问时删除此行
# ENV_OPS_SUB_PATH: /mdis
# ===================== 主机监控(可选)=====================
# Node Exporter 主机列表,格式:别名/IP:端口,多个用逗号分隔
ENV_PROMETHEUS_HOST: "hap_1/192.168.1.12:59100" # 调整为部署服务器实际内网 IP,端口固定 59100
# ===================== 中间件监控(可选)=====================
ENV_PROMETHEUS_KAFKA: "kafka_1/agent:9308"
ENV_PROMETHEUS_ELASTICSEARCH: "elasticsearch_1/agent:9114"
ENV_PROMETHEUS_REDIS: "redis_1/agent:9121"
ENV_PROMETHEUS_MONGODB: "mongodb_1/agent:9216"
ENV_PROMETHEUS_MYSQL: "mysql_1/agent:9104"
# ===================== 中间件连接信息(可选)=====================
ENV_MYSQL_HOST: "sc"
ENV_MYSQL_PORT: "3306"
ENV_MYSQL_USERNAME: "root"
ENV_MYSQL_PASSWORD: "123456"
ENV_MONGODB_URI: "mongodb://sc:27017" # 被监控目标 MongoDB(慢查询/索引诊断,只读观测)
ENV_MONGODB_OPTIONS: ""
ENV_REDIS_HOST: "sc"
ENV_REDIS_PORT: "6379"
ENV_REDIS_PASSWORD: "123456"
ENV_KAFKA_ENDPOINTS: "sc:9092"
ENV_ELASTICSEARCH_ENDPOINTS: "sc:9200"
ENV_ELASTICSEARCH_PASSWORD: "elastic:your-es-password"
ENV_PROMETHEUS_SERVER: "http://ops-prometheus:9090" # Prometheus 内部地址
ENV_FLINK_URL: "http://flink:8081" # 未部署 Flink 则注释此行
# ===================== 告警子系统(1.4.0)=====================
ENV_OPS_MONGODB_URI: "mongodb://ops-mongo:27017" # 告警平台自有存储(规则/状态/历史/渠道/数据源)
ENV_MONGODB_COLLECTION_PREFIX: "mdis_" # 自有集合统一前缀
ENV_ALERT_CRYPTO_KEY: "change-me-to-32-byte-secret" # 凭据加密密钥,首次部署务必改成随机串
services:
gateway:
image: *ops_image
ports:
- "48881:48881"
environment:
<<: *common_env
ROLE: gateway
depends_on:
- ops-prometheus
- ops-grafana
- ops-loki
- ops-tempo
- ops-alloy
- ops-mongo
ops-prometheus:
image: *ops_image
volumes:
- ./volume/data/prometheus/server/:/data/prometheus/server/
environment:
<<: *common_env
ROLE: prometheus
ops-grafana:
image: *ops_image
volumes:
- ./volume/data/prometheus/grafana/:/var/lib/grafana/
environment:
<<: *common_env
ROLE: grafana
GF_SECURITY_ALLOW_EMBEDDING: "true"
GF_AUTH_ANONYMOUS_ENABLED: "true"
GF_AUTH_ANONYMOUS_ORG_ROLE: Editor
GF_SECURITY_COOKIE_SAMESITE: lax
GF_USERS_DEFAULT_THEME: light
ops-loki:
image: *ops_image
volumes:
- ./volume/data/loki/:/loki/
environment:
ROLE: loki
ENV_LOKI_RETENTION: "720h" # 日志保留时长,默认 30 天
# ===================== S3/MinIO 存储(可选)=====================
# 不填则使用本地文件系统存储
# ENV_S3_ENDPOINT: "http://minio:9000"
# ENV_S3_BUCKET: "loki"
# ENV_S3_ACCESS_KEY: "mdstorage"
# ENV_S3_SECRET_KEY: "your-secret-key"
ops-tempo:
image: *ops_image
volumes:
- ./volume/data/tempo/:/var/tempo/
environment:
ROLE: tempo
ENV_TEMPO_RETENTION: "720h" # 链路数据保留时长,默认 30 天
ops-alloy:
image: *ops_image
ports:
- "4317:4317" # OTLP gRPC,供应用上报链路数据
- "4318:4318" # OTLP HTTP,供应用上报链路数据
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./volume/data/alloy/:/var/lib/alloy/data/
environment:
ROLE: alloy
ENV_TEMPO_GRPC_URL: "http://ops-tempo:4317"
ENV_PROMETHEUS_REMOTE_WRITE_URL: "http://ops-prometheus:9090/prometheus/server/api/v1/write"
ENV_LOKI_PUSH_URL: "http://ops-loki:3100/loki/api/v1/push"
# 告警子系统自有 MongoDB(1.4.0 新增,存规则/状态/历史/渠道/数据源,与被监控目标解耦)
ops-mongo:
image: *ops_image
environment:
ROLE: mongo
volumes:
- ./volume/data/mongo/:/data/db
restart: always
agent:
image: *ops_image
environment:
<<: *common_env
ROLE: agent
nodeagent:
image: *ops_image
volumes:
- /:/host:ro,rslave
network_mode: host
pid: host
environment:
<<: *common_env
ROLE: nodeagent
networks:
script_default:
external: true
EOF
启动服务
docker compose -f /data/hap/script/ops.yaml up -d
停止服务可使用以下命令:
docker compose -f /data/hap/script/ops.yaml down
访问运维平台
访问地址为:
http://部署服务器IP:48881
- 登录 Token 为
ops.yaml中的ENV_OPS_TOKEN环境变量值