单机部署(Docker Compose)
适用于 HAP 单机模式。整套运维平台共用单一镜像 ops-allinone,各服务靠 ROLE 区分角色,只需拉取一个镜像,离线交付也是一个文件。
前置条件
运维平台是旁路观测系统,它不自带被监控对象,装之前请确认:
| 前置项 | 说明 |
|---|---|
| 一套已部署并跑起来的 HAP | 单机或集群均可。运维平台观测的是这套 HAP 及其依赖的中间件 |
| 被监控的中间件已就绪 | MongoDB / MySQL / Redis / Kafka / Elasticsearch,按实际部署的填,没有的可以不填 |
| 中间件账号权限 | 见部署总览。MongoDB 基础采集需 clusterMonitor;若要用慢查询诊断,还需目标库的 dbAdmin(平台会为其开启 profiling),完整示例见数据源 |
| 资源 | 4C / 8G / 100G+ 磁盘 |
观测范围:主机资源、上述中间件的运行指标、HAP 各微服务日志、MongoDB 慢查询诊断、以及基于这些数据的告警。不观测 HAP 内部的业务数据(工作表内容、用户数据等)。
调用链路(APM)需要 HAP 集群侧的上报能力,单机部署没有链路数据,「链路追踪」页会是空的,这是预期行为、不是故障。需要链路追踪请用集群部署。
HDP、Flink 是可选项:部署了就填对应地址接进来,没部署留空即可,不影响其余功能。
第 1 步:确定安装位置
HAP 私有部署安装器会独占并重写 /data/hap/script/ 目录。把运维平台的 ops.yaml 和数据卷也放进去,遇到 HAP 重装 / 覆盖安装时会互相破坏(7.3.x 安装器在该目录已存在时还会把模板嵌套进 script/.script/,安装报错且现场信息误导性很强,7.4.0 已修)。
请把运维平台放在独立目录,例如 /data/hap/mdis/,再通过下面的 networks 段接入 HAP 所在的 Docker 网络——这样既能用服务名访问 HAP 的中间件,又与安装器互不干扰。
运维平台的数据卷统一收在 volume/data/mdis/ 一层之下(指标 / 日志 / 链路 / 告警库各一个子目录)。这样做的好处:清理、备份、单独挂数据盘都只需操作一个目录;也不会和 HAP 的目录混在一起——HAP 的业务库是 volume/data/mongodb,与本平台的 volume/data/mdis/mongo 只差两个字母,放在同级极易误删。
先确认 HAP 所在的网络名(通常是 script_default):
docker network ls
第 2 步:拉取镜像(离线包下载)
docker pull nocoly/ops-allinone:1.5.7
第 3 步:创建配置文件
mkdir -p /data/hap/mdis && cat > /data/hap/mdis/ops.yaml <<\EOF
x-ops-image: &ops_image nocoly/ops-allinone:1.5.7 # 所有服务共用,靠 ROLE 区分角色
x-common-env: &common_env
TZ: "Asia/Shanghai"
ENV_OPS_TOKEN: "your-ops-access-token-change-me" # 访问令牌,首次部署务必修改
# ENV_OPS_SUB_PATH: /mdis # 反代挂子路径时填,直接端口访问则删
# ⚠️ 被监控对象(MySQL / MongoDB / Redis / Kafka / Elasticsearch / 主机 /
# Flink)不在本文件配置。装完打开「数据源」页添加,
# 或下载 YAML 模板批量导入(导入时会逐条测连接)。详见下方「采集配置从哪里读」。
ENV_PROMETHEUS_SERVER: "http://ops-prometheus:9090"
# 告警子系统(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
restart: always
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
restart: always
volumes:
- ./volume/data/mdis/prometheus/:/data/mdis/prometheus/
environment:
<<: *common_env
ROLE: prometheus
ops-grafana:
image: *ops_image
restart: always
volumes:
- ./volume/data/mdis/grafana/:/data/mdis/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
restart: always
ports:
- "3100:3100" # 供 HAP 侧推送服务日志;HAP 与本平台同机时可删掉这行
volumes:
- ./volume/data/mdis/loki/:/data/mdis/loki/
environment:
ROLE: loki
ENV_LOKI_RETENTION: "720h" # 日志保留时长,默认 30 天
# 日志落对象存储(可选,不填用容器本地文件系统)。endpoint 必须是「本容器网络里能解析到」
# 的地址:自建 MinIO 若不在同一个网络(例如另起的 stack 或装在宿主机上),要填宿主机 IP +
# 宿主机映射端口,不能写对方的容器名,否则报 no such host。
# MinIO / US3 用 path style(true);腾讯云 COS 只支持 virtual-hosted,必须填 false。
# ENV_S3_ENDPOINT: "http://192.168.1.12:9000"
# ENV_S3_BUCKET: "mdis-loki"
# ENV_S3_ACCESS_KEY: "your-access-key"
# ENV_S3_SECRET_KEY: "your-secret-key"
# ENV_S3_FORCE_PATH_STYLE: "true"
ops-tempo:
image: *ops_image
restart: always
volumes:
- ./volume/data/mdis/tempo/:/data/mdis/tempo/
environment:
ROLE: tempo
ENV_TEMPO_RETENTION: "720h" # 链路数据保留时长,默认 30 天
# 注:单机部署不具备链路追踪能力,此处不配置对象存储;链路 + 对象存储属于集群场景,见 K8s 文档。
ops-alloy:
image: *ops_image
restart: always
ports:
# Alloy 的 OTLP 接收端口。单机部署不产生链路数据(见本页前置条件),
# 这两个端口保留但通常用不上,与 HAP 端口冲突时可直接删掉。
- "4317:4317" # OTLP gRPC
- "4318:4318" # OTLP HTTP
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./volume/data/mdis/alloy/:/data/mdis/alloy/
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
restart: always
environment:
ROLE: mongo
volumes:
- ./volume/data/mdis/mongo/:/data/mdis/mongo
agent:
image: *ops_image
restart: always
environment:
<<: *common_env
ROLE: agent
nodeagent:
image: *ops_image
restart: always
volumes:
- /:/host:ro,rslave
network_mode: host
pid: host
environment:
<<: *common_env
ROLE: nodeagent
# 直接复用 HAP 所在的网络,这样可以用服务名(如 sc)访问被监控的中间件。
# name 填 docker network ls 里 HAP 那个网络的实际名字。
networks:
default:
external: true
name: script_default
EOF
第 4 步:启动与访问
docker compose -f /data/hap/mdis/ops.yaml up -d # 启动
docker compose -f /data/hap/mdis/ops.yaml down # 停止
浏览器访问 http://部署服务器IP:48881,登录 Token 为 ops.yaml 里的 ENV_OPS_TOKEN。
第 5 步:验证
装完建议跑一遍随包提供的端到端回归脚本,确认全链路正常:
pip install playwright && playwright install chromium
python3 mdis_regression.py --base http://<主机IP>:48881 --token <ENV_OPS_TOKEN>
退出码 0 为全部通过。遇到问题先看 UI「数据源」页的采集状态列,再查阅常见问题。