CMDB科普:配置管理数据库——运维相关

一、什么是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工具对比

工具 类型 特点 适用场景 官方链接
ServiceNow 商业 ITIL支持全面,功能强大,但成本高、实施复杂 大型企业全栈ITSM https://www.servicenow.com/products/servicenow-platform/configuration-management-database.html
BMC Helix 商业 强AI能力,多云CMDB,ITIL 4合规 大型企业智能化运维 https://www.bmc.com/cmdb
NetBox 开源 API优先,网络IPAM/DCIM能力极强,社区活跃 网络设备管理、中小团队 https://github.com/netbox-community/netbox
iTop 开源 严格遵循ITIL,含服务台功能,界面友好 ITSM流程驱动的团队 https://www.itophub.io
蓝鲸CMDB 开源 腾讯开源,中文文档完善,与自动化平台深度集成 国内企业、混合云环境 https://github.com/TencentBlueKing/bk-cmdb
CMDBuild 开源 高度可定制,支持工作流和地理可视化 需要定制化资产管理的中小企业 https://www.cmdbuild.org

选型建议:中小团队优先考虑NetBox或iTop(轻量、社区活跃);需要与腾讯生态集成选蓝鲸CMDB;大型企业考虑ServiceNow或BMC Helix。

四、使用方式

4.1 核心使用模式

  1. 查询:通过Web界面或API按条件查询CI及其属性。

  2. 关系维护:为CI建立关系(如"应用A部署在主机B上"),形成拓扑图。

  3. 自动同步:配置发现任务,定期从网络、服务器、云平台同步实际状态到CMDB。

  4. 消费数据:监控系统、自动化平台、工单系统通过CMDB API读取设备信息。

4.2 CI关系示例

4.3 关键原则

"自动发现驱动、服务视角组织、持续保鲜" ------CMDB数据不应依赖人工录入,而应通过自动发现工具持续同步IT环境的实际状态;以"业务服务"为中心组织数据,让CMDB从"资产清单"升级为"服务蓝图"。

五、快速上手(以NetBox为例)

  1. 安装部署

一键部署脚本install-netbox.sh**:**

bash 复制代码
#!/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"

执行:

  1. 添加示例数据(具体可参考下面文档,此处不做演示)

参考文档:https://zhuanlan.zhihu.com/p/656805361、http://localhost:8000/static/docs/

添加过程:

  1. 创建region(地区)

  2. 创建site(站点,region>site)

  3. 创建location(比如在哪栋楼/哪层楼/哪个房间等)

  4. Manufacturers (设备厂家名字,比如ALE/思科/华为/华三等)

  5. Device Types (每个厂家等设备都有型号)

  6. Platforms (设备软件平台,比如思科的ios/nxos/ios-xe等)

  7. Device Roles (定义设备角色,比如access/core/aggregate/border等)

  8. Devices (添加设备)

  9. interfaces(在deviceadd component中添加接口)

  10. 添加IP 关联设备接口

  11. 演示效果

配置格式参考:

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 的核心价值

3.卸载命令

bash 复制代码
# 如果需要卸载可执行
cd ~/netbox-docker
docker compose down -v --remove-orphans
cd ~
rm -rf ~/netbox-docker

六、新人避坑指南

坑 正确做法
手工录入大量数据 从第一天就配好自动发现,手工录入的CMDB几个月内就会腐化
追求"大而全"的字段 只录入"不记下来会出问题"的字段,字段越少越好
以"记录设备信息"为目标 CMDB的价值在于"被消费"------监控、自动化、工单都要用它
一次性建设后不管 CMDB需要持续运营,建立数据质量稽核与待办修复机制

下一步建议:选择一个开源工具(推荐NetBox或iTop),部署体验环境,手动创建5个CI和3条关系,再配置一次自动发现,感受CMDB从"手工台账"到"动态数据源"的价值转变。

相关推荐
Highcharts.js44 分钟前
动态数据可视化架构:Highcharts + PHP + MySQL 从数据库到数据渲染
数据库·mysql·php·开发文档·实时数据·highcharts·图表开发
余槐i1 小时前
WAL 下写并发仍是 1:SQLite 单写者模型实测与绕开方案
数据库·python·性能优化·sqlite·wal
龙腾-虎跃2 小时前
Linux 趣味实战|纯 Bash Shell 脚本实现俄罗斯方块终端小游戏(完整源码资源)
linux·运维·bash
阳光九叶草LXGZXJ9 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
字节渡客10 小时前
Redis键明明过期了,业务还在读到旧数据
数据库·redis·spring
黄大刀10 小时前
DataPulse一款开箱即用的SCADA(四)-历史记录
运维·scada·动环
OnlineProxy12 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
归秋14213 小时前
2026 企业 AI 办公工具选型指南:从评估框架到产品适配
大数据·运维·人工智能
Android系统攻城狮13 小时前
Linux Gstreamer深度解析之gst_audio_encoder_set_frame_max调用流程与实战(六十一)
android·linux·运维·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶