跳到主要内容

基于 Docker Compose

基础要求

  1. 部署服务器需预留 CPU、内存资源在 4C、8G 以上,磁盘可用空间不小于 100G。
  2. 为减少部署复杂度,建议基于 HAP 现有服务器进行部署运维平台。
  3. 使用外部组件时,则需通过环境变量将相关组件的连接信息传递给 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 环境变量值