找回密码
立即注册
搜索
发回帖 发新帖

6273

积分

0

好友

768

主题
发表于 2 小时前 | 查看: 5| 回复: 0

一、什么是 CMDB

一句话定义: CMDB(Configuration Management Database,配置管理数据库)是运维领域的“设备与配置信息中心”,用于存储 IT 架构中所有设备、软件及其相互关系的配置信息。

CMDB 是“运维数据的关系图谱”,不是“服务器清单”。它的核心价值在于关系——通过“谁依赖谁”,让监控知道告警该通知谁,让变更知道会影响谁,让自动化知道该操作哪台机器。

1.1 核心概念

概念 含义
CI(配置项) CMDB 管理的基本单元,如一台服务器、一个应用、一个数据库实例
CI 关系 CI 之间的依赖或连接关系,如“应用 RUNSON 服务器”“数据库 USEDBY 应用”
自动发现 通过 SNMP、SSH、API 等协议自动识别和同步 IT 资源,避免手工录入

CMDB配置平台架构图

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 关系示例

下面在 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"

执行脚本,启动容器并创建管理员:

NetBox Docker安装脚本执行过程

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

NetBox Community管理仪表板

5.2 添加示例数据

具体可参考文档: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 的核心价值

5.3 卸载命令

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

Docker Compose卸载NetBox终端输出

六、新人避坑指南

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

下一步建议:选择一个开源工具(推荐 NetBox 或 iTop),部署体验环境,手动创建 5 个 CI 和 3 条关系,再配置一次自动发现,感受 CMDB 从“手工台账”到“动态数据源”的价值转变。更多自动化运维实践,欢迎到 云栈社区 与同行交流。




上一篇:Pi Agent Harness 深度评测:一款比 OpenCode 更透明可控的极简 Coding Agent
下一篇:C++17 折叠表达式实战:告别变参模板递归终止函数,一行搞定多参数求和打印比较
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-10-10 05:15 , Processed in 0.086904 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表