一、什么是 CMDB
一句话定义: CMDB(Configuration Management Database,配置管理数据库)是运维领域的“设备与配置信息中心”,用于存储 IT 架构中所有设备、软件及其相互关系的配置信息。
CMDB 是“运维数据的关系图谱”,不是“服务器清单”。它的核心价值在于关系——通过“谁依赖谁”,让监控知道告警该通知谁,让变更知道会影响谁,让自动化知道该操作哪台机器。
1.1 核心概念
| 概念 |
含义 |
| CI(配置项) |
CMDB 管理的基本单元,如一台服务器、一个应用、一个数据库实例 |
| CI 关系 |
CI 之间的依赖或连接关系,如“应用 RUNSON 服务器”“数据库 USEDBY 应用” |
| 自动发现 |
通过 SNMP、SSH、API 等协议自动识别和同步 IT 资源,避免手工录入 |

1.2 核心价值
CMDB 是所有 自动化运维 系统的“设备事实单一数据源”——监控、自动化脚本、工单系统都从这里获取“某台设备在哪里、什么配置、谁负责”。
二、应用场景
| 场景 |
说明 |
| 故障排查与定位 |
服务告警时,通过 CMDB 的拓扑关系快速定位受影响范围(如:数据库慢→影响哪些服务→影响哪些用户) |
| 变更影响分析 |
变更前查询依赖关系,评估影响面,避免“改一台影响一片” |
| 自动化运维 |
Ansible / SaltStack 等工具从 CMDB 动态获取设备清单,替代人工维护 Excel |
| 资产管理与审计 |
统一管理 IT 资产台账,支持合规审计与生命周期管控 |
| AIOps 数据底座 |
为 AI 根因分析提供资产拓扑、变更记录、依赖关系等上下文数据 |
三、主流 CMDB 工具对比
选型建议:中小团队优先考虑 NetBox 或 iTop(轻量、社区活跃);需要与腾讯生态集成选蓝鲸 CMDB;大型企业考虑 ServiceNow 或 BMC Helix。
四、使用方式
4.1 核心使用模式
- 查询:通过 Web 界面或 API 按条件查询 CI 及其属性。
- 关系维护:为 CI 建立关系(如“应用 A 部署在主机 B 上”),形成拓扑图。
- 自动同步:配置发现任务,定期从网络、服务器、云平台同步实际状态到 CMDB。
- 消费数据:监控系统、自动化平台、工单系统通过 CMDB API 读取设备信息。
4.2 CI 关系示例
下面在 NetBox 实操部分会展示一个较完整的 CI 关系配置示例。
4.3 关键原则
“自动发现驱动、服务视角组织、持续保鲜”——CMDB 数据不应依赖人工录入,而应通过自动发现工具持续同步 IT 环境的实际状态;以“业务服务”为中心组织数据,让 CMDB 从“资产清单”升级为“服务蓝图”。
五、快速上手(以 NetBox 为例)
5.1 安装部署
一键部署脚本 install-netbox.sh:
#!/bin/bash
set -e
NETBOX_DIR="$HOME/netbox-docker"
NETBOX_URL="http://localhost:8000"
ADMIN_USER="admin"
ADMIN_PASS="admin123456"
ADMIN_EMAIL="admin@demo.local"
# ---------- 1. 克隆仓库 ----------
if [ ! -d "$NETBOX_DIR" ]; then
echo "==> 克隆 netbox-docker..."
git clone -b release https://github.com/netbox-community/netbox-docker.git "$NETBOX_DIR"
fi
cd "$NETBOX_DIR"
[ -f docker-compose.override.yml ] || cp docker-compose.override.yml.example docker-compose.override.yml
# ---------- 2. 启动服务 ----------
echo "==> 启动容器..."
docker compose up -d
echo "==> 等待 NetBox 就绪..."
until curl -s -o /dev/null -w "%{http_code}" "${NETBOX_URL}/login/" | grep -q "200"; do
sleep 3
done
# ---------- 3. 创建管理员(幂等) ----------
echo "==> 创建管理员..."
docker compose exec -T netbox /opt/netbox/netbox/manage.py shell 2>/dev/null <<EOF
from django.contrib.auth import get_user_model
User = get_user_model()
if not User.objects.filter(username="$ADMIN_USER").exists():
User.objects.create_superuser("$ADMIN_USER", "$ADMIN_EMAIL", "$ADMIN_PASS")
print("已创建管理员")
else:
print("管理员已存在,跳过")
EOF
# ---------- 4. 完成 ----------
echo
echo "===================================================="
echo "✅ NetBox 已就绪"
echo " Web 界面: $NETBOX_URL"
echo " 用户名 : $ADMIN_USER"
echo " 密码 : $ADMIN_PASS"
echo "===================================================="
echo
echo "下一步:访问 http://localhost:8000"
执行脚本,启动容器并创建管理员:

部署成功后访问 http://localhost:8000 进入 Web 界面:

5.2 添加示例数据
具体可参考文档:https://zhuanlan.zhihu.com/p/656805361、http://localhost:8000/static/docs/
添加过程:
- 创建 region(地区)
- 创建 site(站点,region > site)
- 创建 location(比如在哪栋楼 / 哪层楼 / 哪个房间等)
- Manufacturers(设备厂家名字,比如 ALE / 思科 / 华为 / 华三等)
- Device Types(每个厂家的设备型号)
- Platforms(设备软件平台,比如思科的 ios / nxos / ios-xe 等)
- Device Roles(定义设备角色,比如 access / core / aggregate / border 等)
- Devices(添加设备)
- interfaces(在 device → add component 中添加接口)
- 添加 IP 关联设备接口
- 演示效果
配置格式参考:
| CI 名称 |
类型 |
关键属性 |
关系(本 CI → 目标 CI) |
| 交易业务线 |
业务线 |
负责人:李四;成本中心:CC-01 |
— |
| 订单服务 |
业务服务 |
负责人:张三;SLA:99.99% |
RUNS_ON→订单应用;BELONGS_TO→交易业务线;OWNED_BY→张三 |
| 订单应用 |
应用 |
版本:v2.3;语言:Java |
DEPLOYED_ON→web-server-01;DEPENDS_ON→MySQL主库;DEPENDS_ON→Redis缓存 |
| web-server-01 |
物理服务器 |
Dell R750;32核/128G;IP:10.0.1.10;机房A-机架3-U12 |
CONNECTED_TO→switch-core-01;LOCATED_IN→机房A-机架3-U12 |
| db-server-01 |
物理服务器 |
Dell R750;32核/128G;IP:10.0.1.20;机房A-机架3-U14 |
CONNECTED_TO→switch-core-01;LOCATED_IN→机房A-机架3-U14 |
| MySQL主库 |
数据库实例 |
版本:8.0;端口:3306;数据量:500G |
RUNS_ON→db-server-01 |
| Redis缓存 |
缓存实例 |
版本:6.2;端口:6379;内存:16G |
— |
| switch-core-01 |
交换机 |
华为S5720;管理IP:10.0.0.1;48口 |
BELONGS_TO→vlan-100 |
| vlan-100 |
VLAN |
ID:100;网段:10.0.1.0/24 |
— |
| 张三 |
负责人 |
工号:1001;部门:交易研发 |
— |
CI 属性:回答“这是什么”——型号、IP、版本、负责人
CI 关系:回答“它和谁有关”——依赖、部署、归属、连接
属性 + 关系:才能回答“出问题影响谁、变更要通知谁”——这才是 CMDB 的核心价值
5.3 卸载命令
# 如果需要卸载可执行
cd ~/netbox-docker
docker compose down -v --remove-orphans
cd ~
rm -rf ~/netbox-docker

六、新人避坑指南
| 坑 |
正确做法 |
| 手工录入大量数据 |
从第一天就配好自动发现,手工录入的 CMDB 几个月内就会腐化 |
| 追求“大而全”的字段 |
只录入“不记下来会出问题”的字段,字段越少越好 |
| 以“记录设备信息”为目标 |
CMDB 的价值在于“被消费”——监控、自动化、工单都要用它 |
| 一次性建设后不管 |
CMDB 需要持续运营,建立数据质量稽核与待办修复机制 |
下一步建议:选择一个开源工具(推荐 NetBox 或 iTop),部署体验环境,手动创建 5 个 CI 和 3 条关系,再配置一次自动发现,感受 CMDB 从“手工台账”到“动态数据源”的价值转变。更多自动化运维实践,欢迎到 云栈社区 与同行交流。
|