19.11.2 CMDB与自动化运维联动案例

CMDB与自动化运维联动案例#

背景与目标#

企业在多环境、多集群的运维场景中,资产分散、配置漂移、变更不可追溯导致自动化任务执行成功率低。本案例以“CMDB作为单一可信源(SSOT)+ 自动化平台编排”为核心,目标是实现资产全量可见、配置一致可控、变更可追溯、任务自动闭环。

业务范围与平台边界#

  • 覆盖对象:物理机、虚拟机、容器、K8s资源、数据库实例、负载均衡、缓存、中间件集群、网络设备。
  • 覆盖动作:初始化部署、配置变更、扩缩容、故障处置、补丁更新、巡检与合规检查。
  • 系统边界:CMDB为资产与关系源,自动化平台为任务执行与编排引擎,监控与日志平台提供触发与验证。

原理草图与联动流程#

文章图片

CMDB模型设计#

  • 资源模型:主机、应用、服务、实例、集群、网络、存储、账号、证书等。
  • 关系模型:依赖关系、运行关系、部署关系、访问关系、归属关系。
  • 关键字段:环境、区域、责任人、生命周期、配置版本、标签、状态。
  • 扩展字段:中间件参数、组件版本、端口、健康检查策略、变更窗口。

数据采集与一致性保障(示例)#

1)自动发现与入库(示例 API 与命令)

# 发现K8s节点并入库(示例)
kubectl get nodes -o json > /tmp/nodes.json

# 将发现数据推送到CMDB API
curl -X POST http://cmdb.example.com/api/v1/assets \
  -H "Content-Type: application/json" \
  -d @/tmp/nodes.json

2)字段强校验(示例 Schema 片段)

# /opt/cmdb/schema/host.yaml
required:
  - hostname
  - ip
  - env
  - owner
properties:
  env:
    enum: [dev, test, staging, prod]
  status:
    enum: [online, offline, retired]

3)漂移检测(示例对比脚本)

# /opt/ops/bin/drift_check.sh
#!/usr/bin/env bash
cmdb_conf=/opt/cmdb/export/host.conf
real_conf=/etc/host.conf

diff -u "$cmdb_conf" "$real_conf" > /tmp/drift.diff
if [ $? -ne 0 ]; then
  echo "DRIFT_DETECTED"
  exit 2
else
  echo "NO_DRIFT"
fi

联动机制设计#

  • 触发模式
    1. 变更触发:CMDB变更事件触发自动化任务
    2. 告警触发:监控告警触发自愈脚本
    3. 定时触发:周期巡检与合规检查
  • 参数对接:自动化任务从CMDB读取资产清单、配置参数、依赖关系。
  • 执行反馈:自动化结果回写CMDB与日志平台,实现闭环。

典型联动场景(含命令与回写)#

场景1:应用扩容

# 1) 在CMDB新增实例记录
curl -X POST http://cmdb.example.com/api/v1/instances \
  -H "Content-Type: application/json" \
  -d '{"app":"shop","env":"prod","image":"shop:v2","node":"node-3","status":"pending"}'

# 2) 自动化拉取镜像与发布
ssh ops@node-3 "docker pull shop:v2 && docker run -d --name shop-3 -p 8083:8080 shop:v2"

# 3) 回写执行状态
curl -X PATCH http://cmdb.example.com/api/v1/instances/shop-3 \
  -H "Content-Type: application/json" \
  -d '{"status":"online","deployed_at":"2025-01-01T10:00:00Z"}'

场景2:配置标准化(基线校验与修复)

# 基线配置
cat > /opt/baseline/nginx.conf <<'EOF'
worker_processes auto;
events { worker_connections 1024; }
http { keepalive_timeout 65; }
EOF

# 扫描并修复
scp /opt/baseline/nginx.conf ops@web-1:/etc/nginx/nginx.conf
ssh ops@web-1 "nginx -t && systemctl reload nginx"

场景3:数据库变更(灰度与回写)

# 灰度变更:先在从库执行
ssh db-slave "mysql -e 'ALTER TABLE orders ADD COLUMN remark VARCHAR(64);'"

# 验证通过后,切换主库执行
ssh db-master "mysql -e 'ALTER TABLE orders ADD COLUMN remark VARCHAR(64);'"

# 变更记录回写
curl -X POST http://cmdb.example.com/api/v1/change-log \
  -H "Content-Type: application/json" \
  -d '{"object":"db.orders","change":"add column remark","status":"done"}'

场景4:故障自愈(告警触发)

# 从CMDB获取主备关系
curl http://cmdb.example.com/api/v1/relations?service=redis \
  | jq -r '.primary, .standby'

# 触发切换脚本
/opt/ops/bin/redis_failover.sh --primary 10.0.0.1 --standby 10.0.0.2

接口与任务编排示例#

1)任务编排(示例 YAML)

# /opt/ops/flow/scale_out.yaml
name: scale_out_shop
steps:
  - name: query_cmdb
    action: http_get
    url: http://cmdb.example.com/api/v1/instances?app=shop&status=pending
  - name: deploy
    action: ssh_exec
    hosts_from: query_cmdb
    cmd: "docker pull {{image}} && docker run -d --name {{name}} -p {{port}}:8080 {{image}}"
  - name: writeback
    action: http_patch
    url: "http://cmdb.example.com/api/v1/instances/{{name}}"
    body: {"status":"online"}

2)执行命令

# 假设自动化平台提供 cli
opsflow run /opt/ops/flow/scale_out.yaml

权限与审计#

  • 权限模型:CMDB与自动化平台统一RBAC,资源级权限隔离。
  • 审计链路:变更发起人、审批人、执行日志、回滚记录全链路审计。
  • 安全控制:敏感字段脱敏、凭证统一管理、操作双人复核。

安装与对接示例(简化)#

1)安装Agent(示例)

# 在目标主机安装执行Agent
curl -o /tmp/ops-agent.rpm http://repo.example.com/ops-agent.rpm
rpm -ivh /tmp/ops-agent.rpm
systemctl enable --now ops-agent

2)注册到CMDB

curl -X POST http://cmdb.example.com/api/v1/agents/register \
  -H "Content-Type: application/json" \
  -d '{"hostname":"web-1","ip":"10.0.0.11","env":"prod","owner":"ops"}'

常见排错与验证#

1)CMDB无数据回写

# 检查API连通性
curl -I http://cmdb.example.com/health

# 检查回写失败日志
grep -i "writeback failed" /var/log/ops/opsflow.log

排错要点:鉴权token过期、字段校验失败、网络访问控制。
预期效果:CMDB状态从 pending → online。

2)自动化任务执行失败

# 查看Agent状态
systemctl status ops-agent

# 远程连通性验证
ssh ops@web-1 "echo ok"

排错要点:权限不足、目标端口不通、镜像拉取失败。
预期效果:任务返回码为 0,日志包含“deploy success”。

关键指标与效果#

  • 任务成功率提升
  • 变更效率提升
  • 配置漂移率降低
  • 故障处理时间缩短
  • 资产准确率达到可控阈值

风险与治理策略#

  • 数据不准:引入强校验与漂移检测
  • 任务误触发:增加审批与多条件触发
  • 流程阻塞:弱耦合设计与降级执行
  • 跨团队协作:设定资产责任人与SLA

练习#

  1. 设计一份主机资源模型,包含必填字段与枚举字段,并写出 YAML Schema。
  2. 编写一个漂移检测脚本,对比 CMDB 基线与真实配置,输出差异文件。
  3. 实现一个扩容编排流程:读取 CMDB -> 发布 -> 回写。
  4. 模拟告警触发自愈:用脚本读取主备关系并执行切换。

总结#

通过“CMDB驱动自动化”实现运维平台化的核心闭环:资产可信、流程可控、执行可追溯。该案例验证了以CMDB为中心的数据治理与自动化联动是平台化落地的关键路径,可快速复用到中间件、容器、数据库与基础设施场景中。