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
练习#
- 设计一份主机资源模型,包含必填字段与枚举字段,并写出 YAML Schema。
- 编写一个漂移检测脚本,对比 CMDB 基线与真实配置,输出差异文件。
- 实现一个扩容编排流程:读取 CMDB -> 发布 -> 回写。
- 模拟告警触发自愈:用脚本读取主备关系并执行切换。
总结#
通过“CMDB驱动自动化”实现运维平台化的核心闭环:资产可信、流程可控、执行可追溯。该案例验证了以CMDB为中心的数据治理与自动化联动是平台化落地的关键路径,可快速复用到中间件、容器、数据库与基础设施场景中。