19.2.9 CMDB与现有系统集成
CMDB与现有系统集成的目标是打通资产数据在运维体系中的流转链路,避免信息孤岛,确保“事实源”唯一。本节给出集成原理草图、接口示例、事件驱动同步、对账脚本、排错步骤与练习。
原理草图(主数据与事件同步):
集成方式与数据流设计(含示例):
- 主数据策略:确定CMDB为主数据或从数据,建立双向同步规则与冲突解决机制。
- 接口规范:统一API标准(REST/GraphQL)、鉴权机制、字段映射与版本控制。
- 事件驱动:通过消息总线实现资产变更事件发布与订阅,保障实时性与可追溯性。
- 批量对账:定期全量对比与差异修正,记录差异原因与修复闭环。
示例1:CMDB REST API 读取资产并回写发布结果(含命令解释)
# 1) 查询资产列表(按环境与标签)
curl -s -H "Authorization: Bearer $CMDB_TOKEN" \
"https://cmdb.example.com/api/v1/assets?env=prod&tag=web" | jq .
# 2) 发布完成后回写版本与状态
curl -s -X POST -H "Authorization: Bearer $CMDB_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"asset_id":"host-001",
"release_version":"v1.2.3",
"release_status":"success",
"release_time":"2024-07-01T12:00:00Z"
}' \
"https://cmdb.example.com/api/v1/release/result"
- 预期效果:资产记录出现最新版本字段与发布状态,支持审计追踪。
示例2:事件驱动同步(Kafka 主题与生产消息)
# 1) 创建主题(按资产变更)
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 \
--create --topic cmdb.asset.change --partitions 3 --replication-factor 1
# 2) 发送资产变更事件
/opt/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9092 \
--topic cmdb.asset.change <<'EOF'
{"event":"asset_update","asset_id":"host-001","fields":{"owner":"ops","env":"prod"},"ts":1720000000}
EOF
- 预期效果:监控、配置管理等系统订阅该主题后触发同步更新。
示例3:CMDB与监控系统关联(Prometheus + CMDB 标签联动)
# /etc/prometheus/prometheus.yml
scrape_configs:
- job_name: "node"
static_configs:
- targets: ["10.0.0.1:9100","10.0.0.2:9100"]
labels:
cmdb_asset_id: "host-001"
cmdb_owner: "ops"
- 预期效果:告警中可直接定位资产与负责人。
示例4:批量对账脚本(以MySQL为CMDB存储示例)
# /usr/local/bin/cmdb_reconcile.sh
#!/usr/bin/env bash
set -euo pipefail
CMDB_DSN="mysql -h127.0.0.1 -uroot -p123456 cmdb -N"
EXT_DSN="mysql -h127.0.0.1 -uroot -p123456 monitor -N"
# 从外部系统导出资产清单
$EXT_DSN -e "SELECT asset_id,owner,env FROM assets" > /tmp/ext_assets.tsv
# 从CMDB导出资产清单
$CMDB_DSN -e "SELECT asset_id,owner,env FROM assets" > /tmp/cmdb_assets.tsv
# 差异对比
comm -3 <(sort /tmp/cmdb_assets.tsv) <(sort /tmp/ext_assets.tsv) > /tmp/diff.tsv
echo "差异如下:"
cat /tmp/diff.tsv
- 预期效果:输出差异清单用于修复闭环。
典型系统集成要点(补充具体操作):
- 工单与ITSM:在工单表单中自动填充资产字段(资产ID、位置、负责人),变更审批时自动拉取影响范围。
- 配置管理:CM工具自动回写角色、标签、配置基线状态。
- 成本与计费:资产与成本中心映射字段必须强制约束(非空+可枚举)。
可选安装示例(Kafka/REST网关)
# 安装 Kafka(示例基于二进制)
tar -xf kafka_2.13-3.6.1.tgz -C /opt
/opt/kafka_2.13-3.6.1/bin/kafka-server-start.sh -daemon /opt/kafka_2.13-3.6.1/config/server.properties
# 健康检查
/opt/kafka_2.13-3.6.1/bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092
排错清单(常见问题定位):
1. API 403/401:检查Token过期、签名算法、时间偏移。
date; ntpstat
- 事件未消费:检查主题是否存在、消费组是否正确、消息格式是否符合schema。
/opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
- 字段映射异常:核对字段字典与版本号,确认是否启用兼容字段。
- 对账差异过大:确认数据采集时间窗、是否有删除/下线资产未标记。
练习:
1. 设计一份“主机资产”字段映射表(CMDB <-> 监控系统),至少包含10个字段并标注主从来源。
2. 使用curl与jq写一个脚本:按环境拉取资产并输出IP列表。
3. 使用Kafka模拟一次“资产下线”事件,并编写订阅端打印事件内容。