CMDB和资产管理平台,这两个词放在一起,每年都要被翻出来讨论一轮。我这两年陆续调研、试用、并在生产环境里落地过几套开源方案,发现很多团队在选型阶段就把方向搞偏了——要么把CMDB理解成"高级Excel",要么指望一套开源的资产管理软件能顺带解决监控、工单、变更全部问题。这篇报告不打算罗列一堆项目的官网介绍,而是从实际使用者的角度,把这几个主流开源项目的真实差异、部署成本、二次开发难度,以及最容易踩的坑一次说清楚。
1. 先搞清楚一个前提:CMDB、资产管理、资源台账并不是一回事
很多选型报告翻车,根源在于概念混淆。CMDB(配置管理数据库)和资产管理平台,听起来都能管"服务器、IP、负责人",但底层逻辑完全不同。
1.1 CMDB的本质是"关系图谱",而不仅仅是资产列表
CMDB的核心价值,在于记录配置项(CI)之间的关系。一台服务器属于哪个业务系统、它依赖哪个数据库实例、上层跑了哪些应用实例、这个应用又归属于哪个负责人——这些关系才是CMDB的灵魂。传统资产管理只需要回答"我们有多少台机器",CMDB要回答的是"这台机器挂了会影响什么"。
我在实际运维中见过太多团队,部署了一套看起来功能齐全的CMDB,结果用成了资产登记表,配置项之间没有任何关联。说白了,直接建个Excel表更省事。选型之前想清楚这个问题,后面90%的弯路都不会走。
1.2 资产管理平台更贴近"财务视角"
资产管理平台(如Snipe-IT、GLPI的资产模块)关注的是资产全生命周期:采购日期、保修期、折旧状态、领用人、存放地点、报废审批。它的服务对象不仅是运维,还有财务和行政。这里的关键词是"实物"和"状态",而不是"逻辑关系"。
举个例子:一台物理服务器,资产管理平台关心它的序列号、购买年份、是否在保,CMDB则关心它承载了什么业务、网络连到哪个交换机、上面跑了哪些中间件。两套工具服务的目标不同,数据模型自然天差地别。
1.3 如果没有ITIL流程铺垫,CMDB很容易沦为摆设
说句不好听的,CMDB在大部分公司落地失败,不是因为软件不行,而是流程和责任制没跟上。CMDB需要持续有人维护、有变更触发更新、有系统自动发现做辅助,如果这三个环节都是空白,那这套系统三个月后就是一堆僵尸数据。
所以在对比开源项目之前,建议先梳理一下自己团队的实际情况:有没有发布变更流程?有没有配置管理员角色?现有基础设施能否支撑自动化采集?如果答案都是否,那再强大、再完美的开源CMDB也救不了你,不如先用轻量资产台账把信息管起来,等流程成熟了再平移过去。这一点放在选型第一步考虑,比什么都重要。
2. 主流开源方案全景:社区里真正有人实际用的选择
GitHub上搜"CMDB"能搜出几百个项目,但大多数是个人项目或者已经停止维护的Demo。我筛选的标准很简单:近一年有活跃提交、有真实社区讨论、能在生产环境扛住一定规模。符合这些条件的,其实就那么几个。
2.1 老牌玩家:iTop、GLPI、Snipe-IT的定位与适用边界
iTop(Combodo出品)是很多老运维的初恋。它出生就带着ITIL基因,数据模型里的CI类、关系类型、联系人都按ITIL标准建好了。优势是开箱即用,配置项类型丰富,自带可视化影响分析(就是从一个CI点开能看到它上下游关系的那个功能),非常直观。缺点是架构偏老,PHP+MySQL的组合在数据量大时性能衰减明显,而且界面交互逻辑以流程为主,部分操作路径较长,需要配置和培训才能用好。
GLPI更准确地说是"带CMDB能力的ITSM平台"。它从资产和工单管理起家,资产模块极其成熟,后续加入了配置管理功能。在GLPI 10.x版本中,CI可以建立关联,也支持导入/导出。它的优势是资产管理和Helpdesk工单流程能打通,适合既要管资产生命周期、又要跑服务流程的小团队。缺点是构造化关系比iTop弱一些,数据模型不够严谨,做复杂拓扑时比较吃力。
Snipe-IT则是纯粹的资产管理平台,界面干净、API设计友好,支持序列号、许可证、配件、消耗品管理。它老老实实做资产管理,不做CMDB的关系图谱。轻量、颜值高、上手快,适合以IT资产盘点为主要诉求的团队。但如果你想在上面做应用依赖分析、变更影响评估,它不具备这个能力。
2.2 国产运维生态:蓝鲸配置平台、夜莺的CMDB组件
腾讯蓝鲸的**配置平台(蓝鲸CMDB)**可能是国内开源CMDB里架构最完整的一个。它的数据模型分成"业务-集群-模块-主机"四个层级,这是国内互联网公司通用的组织方式。zk链路自动发现、事件推送、跨云采集这些能力都内置了,而且有很不错的权限收敛模型。不过蓝鲸CMDB的部署复杂度是这几套方案里最高的,依赖整个蓝鲸PaaS体系,就算只装配置平台一个模块,也要吃掉不少运维精力。
**夜莺(Nightingale)**是滴滴开源的可观测性平台,本身不是CMDB,但它自带"主机资产"和"对象列表"功能,而且与监控指标深度联动。如果你的核心诉求是想要一套"轻量CMDB+监控"的一体化方案,夜莺值得看——但不要期待它能在配置项关系上做得很深。我见过不少团队把夜莺当成资产台账用,挺好使的,但再往后一步它就给不了你了。
2.3 数据中心向:NetBox、RackTables这类DCIM工具的取舍
NetBox是DigitalOcean工程师开源的工具,严格来说是DCIM(数据中心基础设施管理)和IPAM(IP地址管理)。它的数据模型覆盖站点、机柜、设备、设备面板/端口、电缆连接、IP前缀、VLAN、VRF等,非常适合网络设备、物理服务器机房的精细化管理。界面是现代Web风格,API和插件机制都很优秀。不过NetBox的主语是"物理设施"和"网络逻辑",对应用层CI(比如业务系统、中间件实例)的支持要弱很多——如果你把它当资产管理平台,会发现缺少采购/财务字段;把它当CMDB,又发现应用关系不好建。
RackTables是更老的PHP开源项目,同样专注网络机柜和IP管理,现在社区活跃度明显下滑,除非你已经用它多年,否则不太建议新项目引入。
2.4 一张表看明白定位差异
| 项目 | 项目本质 | 核心模块 | 技术栈 | 适合规模 | 维护活跃度 |
|---|---|---|---|---|---|
| iTop | ITSM/CMDB | 配置管理、服务台 | PHP+MySQL | 中型 | 稳定 |
| GLPI | ITSM/资产 | 资产、工单、CMDB | PHP+MariaDB | 中小型 | 活跃 |
| Snipe-IT | 资产管理 | 资产全生命周期 | PHP+Laravel | 轻型 | 活跃 |
| 蓝鲸CMDB | 平台型CMDB | 业务拓扑、自动发现 | Go+Vue+MongoDB | 大型 | 活跃 |
| NetBox | DCIM/IPAM | 基础设施管理 | Python+Django+PostgreSQL | 中大型 | 非常活跃 |
| 夜莺 | 可观测性平台 | 资产标签+监控 | Go+Prometheus | 中型 | 非常活跃 |
3. 选型最该盯死的五个维度,别只看官网截图
官网上的功能列表长得都差不多,真正决定选型成败的是几个在Demo阶段很难看出来的细节点。我根据实际项目经验,把这几个维度拆开讲。
3.1 数据模型能不能灵活扩展,决定了半年后要不要推倒重来
CMDB落地过程中一定会遇到一个问题:内置的CI类型和属性不够用。比如你要让研发填"代码仓库地址"、让DBA填"主从关系"、让网络组填"机柜U位",这些需求很少能开箱满足。
iTop在扩展性上做得最完善,它允许在后台自定义CI类、增加属性、创建新的关系类型,而且这类扩展不会破坏核心升级。GLPI虽然也支持自定义字段,但改数据模型的灵活度不如iTop。NetBox的扩展性更多体现在插件体系,官方提供DeviceType、Site等规范化模型,你要自己加字段可以直接在模型上扩展,或者用自定义字段功能,但关系类型的自定义相对受限。Snipe-IT基本是固定的资产模型,不太适合拿去做强CMDB场景。
这里有个很实用的判断技巧:**PoC测试时,试着在系统里创建一个"数据库实例"类型,并让它与"服务器"建立多对多关系。**如果这一步做起来顺畅,那数据模型基本合格;如果要做一堆硬编码甚至改表结构才能实现,建议直接换方案,后期会非常痛苦。
3.2 自动发现能力:是"真发现"还是"伪同步"
资产自动发现是CMDB的加分项,但不同项目实现方式差异很大。iTop需要通过扩展模块(如iTop Discovery或Combodo的整合方案)结合Agent或SNMP做探测;GLPI有内置的Inventory插件,配合Agent可以收集服务器软硬件信息;蓝鲸CMDB通过Agent和ZK协议做自动发现,能力最强,能联动云资源;NetBox默认没有自动发现能力,它更倾向于做"记录与规划",而不是"采集与探测"。
需要特别注意的是,发现机制和CMDB数据之间往往存在同步冲突。我见过不止一个团队部署了自动采集,结果Agent上报的IP地址和人工录入的地址不一致,产生大量脏数据,最后还要花两周时间写清洗脚本。"自动发现"这个东西,有价值但别全信,建议把自动发现当成"辅助录入手段",而不是"数据唯一来源"。
3.3 API与集成生态:被集成而不是被替代
CMDB通常不会是独立存在的,它需要跟监控系统、工单系统、发布平台、云管平台对接。这时候,API的完整性和易用性就成了硬指标。
NetBox在API上做得极好,RESTful API + GraphQL + Webhook,而且有详细的Swagger文档,几乎能满足所有自动化场景。Snipe-IT的API也很成熟,支持资产创建、更新、查询、签入签出,很多企业拿它做资产自动同步的枢纽。iTop提供了REST/JSON API,能用,但文档和社区示例相对老旧,遇到问题需要自己翻源码。蓝鲸CMDB有一套完整的API网关,但需要熟悉蓝鲸体系,学习曲线陡峭。
我的建议是:**在项目启动PoC时,至少调用一次"创建配置项""查询配置项关系""批量更新属性"三个接口,感受一下数据结构设计与返回逻辑是否顺手。**很多项目看着API文档不少,真调起来字段命名混乱、关联查询缺失、鉴权方式怪异,对接成本会远超预期。
3.4 权限模型与审计:这一点最容易在PoC阶段被忽视
CMDB里存放的IP、拓扑、责任人信息,内部安全管理要求高的团队,会要求不同部门只能看到自己的数据。很多开源项目在权限模型上有天然短板。GLPI有profile+entity的双层权限体系,可以做到按实体隔离;iTop有Profile机制,也能区分管理员/操作员/只读等;NetBox用的是Django权限框架,能做到表单级的权限控制,但要自己设计组和角色;Snipe-IT的权限相对简单,适合小团队用;蓝鲸CMDB的权限模型在开源版里已经做得很复杂了,支持细粒度的业务权限。
审计日志也同样关键——谁能创建、修改、删除CI,谁在什么时间改了什么字段,出了问题能不能追溯。这一点上NetBox做得很扎实,Snipe-IT和GLPI也有基本审计记录。千万别小看这个能力,等真正发生一次误删配置的事故,你就能体会到审计日志的价值了。
3.5 UI与使用体验:没人愿意用的系统必然烂尾
这点说起来有点虚,但实际影响极大。一个数据需要人工维护的系统,如果操作路径反人类,录入一个服务器信息要点五次鼠标,那运维和研发同事一定消极怠工,数据质量必然崩。
Snipe-IT和NetBox之所以给人的"好用感"强,在于UI设计遵循了现代Web审美,列表筛选、批量操作、键盘快捷键这些细节都考虑到了。iTop和GLPI相对传统,GLPI 10.x已经做了全面UI升级,但整体风格还是偏表单密集型。蓝鲸CMDB的前端框架还行,但信息密度很高,新用户需要适应期。
这里分享一个不成熟的个人经验:选型时找5-6个未来的系统使用者,让他们分别用两三个候选项目执行同一个任务(比如添加一台新上架服务器并关联到业务),观察谁先找到入口、谁不需要帮助就能完成。这个"土测试"比任何参数对比都可靠。
4. 从文档到生产环境:部署和二次开发的真实成本
所有开源项目的文档都会写着"快速启动"几个大字,但真正跑起来你会发现,从"能跑"到"能稳定生产使用"之间还有相当大的距离。
4.1 PHP系老项目:iTop和GLPI的部署陷阱
iTop和GLPI都是PHP应用,部署形式上很传统,需要LNMP(Nginx/MySQL/PHP)环境。GLPI在PHP版本兼容性上更友好,但安装后要记得把php.ini里的upload_max_filesize和post_max_size调大,否则后续上传文档、导包络文件时会莫名其妙失败。iTop的安装向导虽然交互式体验不错,但它对PHP扩展的检查非常严格,缺一个ldap扩展都装不上,需要提前确认。
生产环境建议从这两个软件官网下载官方Docker镜像或部署包,不要自己从源码Git clone然后composer install——老项目升级依赖时很容易爆出PHP版本不兼容问题,自己折腾得不偿失。
4.2 蓝鲸CMDB的"全家桶"依赖:想只装配置平台?没那么简单
蓝鲸CMDB的能力确实强,但它不是独立运行的,通常需要依赖蓝鲸的鉴权中心(login/bkiam)、GSE(Agent管理)、MongoDB、Redis等一整套基础设施。官方文档提供的部署方式是all-in-one的中控机部署,会拉起一个庞大的容器集群。如果你只想用配置平台这一个模块,这种部署方式会显得相当重。
从性价比角度看,如果你的团队只有一两台服务器,想快速管起来,直接上蓝鲸CMDB是杀鸡用牛刀;如果是在几百台甚至上千台规模的k8s或虚拟化环境里,你确实需要它提供的自动发现、跨云同步能力,那值得投入人力把整套环境搭起来,并且安排专人负责日常维护。
4.3 Python系项目的坑:NetBox安装踩过的典型问题
NetBox 3.x推荐用源码方式部署,官方提供了很详细的安装文档(Installation Guide),但新手还是很容易踩坑。核心问题集中在这几个地方:
- Python版本要求严格:NetBox对Python版本有要求,环境里Python版本对不上,Django的依赖解析就会失败。建议直接用虚拟环境安装,不要污染系统级Python。
- 配置文件的坑:NetBox会生成一个
configuration.py文件,里面SECRET_KEY、ALLOWED_HOSTS、数据库连接信息必须填对。它默认不提供默认配置文件,需要从configuration.example.py拷贝后修改,很多新手在这里卡住。 - 数据库迁移:首次使用前要执行
python3 manage.py migrate,然后创建超级用户createsuperuser。这条路径很短,但跑完后还有一步——需要手动修改extra.py配置缓存和队列,否则异步任务(比如后期的自动化导入)可能不工作。 - 反向代理与静态文件:NetBox的生产部署通常要用Gunicorn + Nginx,域名和
SITE_URL如果设置不匹配,登录后跳转会出现循环或404。
我个人在实际操作中还有一个体会:NetBox官方对升级路径非常保守,版本升级时要严格按照官方发布的升级说明走,跳过版本更新会直接报错。生产环境部署前,定好一个长期维护的版本,而不是每次都追最新。
4.4 二次开发的合理姿势:优先走API和插件,别直接改内核
无论是iTop、GLPI、Snipe-IT还是NetBox,我都强烈建议不要直接修改核心代码来满足定制需求。更新版本时你的改动会被覆盖不说,核心模块的升级往往包含安全修复,不升级就明摆着留漏洞。
合理的二次开发路径是:优先使用官方API实现自动化操作;其次利用官方插件机制(NetBox的plugin机制、GLPI的plugin机制都做得很完善)做功能扩展;最后才考虑给社区提PR或者写外围脚本。这样既能保持核心稳定,也方便后续升级。
5. 按团队规模对号入座:实际选型决策建议
聊完项目细节,落到具体选型。选型这件事没有"最好",只有"最合适"。根据我接触的团队规模和场景,给出如下参考建议。
5.1 少于50台机器、以行政性质盘点为主的小团队
这个规模下直接上Snipe-IT。不需要搞CMDB那一套复杂概念,只需要管好资产序列号、存放位置、领用人就够了。Snipe-IT的界面友好,还有手机端适配,现场盘点扫码登记很方便。足够你应付公司的资产审计和年度盘点需求。
如果你的团队同时需要处理IT服务请求(比如报修、申请软件),可以平替到GLPI,它把资产和Helpdesk打通了,小团队一套搞定。
5.2 几百台到上千台机器、有一定自动化基础的中型团队
这个阶段可以考虑iTop或NetBox作为核心CMDB。iTop适合走ITIL流程规范化路线的团队,它有天然的流程基因,可以与事件、问题、变更管理打通;NetBox更适合以IDC物理资产和网络管理为重点的团队,尤其是机房有多机房、多机柜、IP规划比较复杂的情况,NetBox的IPAM能力能帮大忙。
如果团队已经有一套自定义的工单和发布系统,只是需要一个底层的配置关系库,NetBox的API友好度和数据维护体验会更好一些。我在这个规模上见过很多成功的案例,他们都把NetBox作为"配置事实来源"(source of truth),再通过API对外提供数据。
5.3 大型平台化团队:蓝鲸CMDB排第一梯队
上千台服务器、多环境、多业务线、需要自动发现和云资源同步的团队,直接考虑蓝鲸CMDB。它的"业务-集群-模块-主机"模型和国内互联网运维习惯非常匹配,权限模型完善,适合大型组织治理。如果还要配合监控、日志、CI/CD流水线,那更是蓝鲸生态的主场。
当然,投入也最大。部署一套蓝鲸CMDB需要专门的中控机和基础组件,需要有运维开发能力的人做日常维护。如果你连专职运维开发都没有,建议慎重考虑,否则项目容易烂尾。
5.4 特殊场景:以可观测性为主的团队,夜莺也是备选
如果你的团队主要诉求是"想把资产标签、监控指标、告警关联起来",夜莺值得纳入对比范围。它通过标签的方式组织资产,监控告警天然与资产绑定,对SRE团队来说很顺手。但注意这不是传统意义上的CMDB,它缺少严格的关系管理能力,适合"轻资产建模"场景。
6. 落地实施的真实坑点与过关经验
选型只是第一步,真正难的是上线和持续维护。这个环节的坑,几乎与具体项目无关,而是CMDB建设本身的通病。
6.1 数据清洗:导入CMDB之前先做"减脂"
很多人把历史Excel里的资产数据一股脑导入CMDB,结果导入后发现大量重复、错误、格式不统一的脏数据。一个足够健康的做法是:先清洗后导入。
清洗的优先级从高到低:确认IP和主机名对应关系;明确负责人的有效邮箱;统一机房/区域命名规范(比如"华北1-机房A"不能同时出现"华北一-A"两种写法);清理已经报废停机的僵尸资产。这些数据清洗工作不要期望CMDB软件帮你解决,要自己用脚本处理。我实际操作时,会用Python pandas做一遍数据去重和字段标准化,再通过API分批导入,导入过程加日志,便于回滚。
6.2 CI属性设计的"三七法则"
设计配置项模型时,我摸索出的一个原则是:核心属性占三成,扩展属性占七成。核心属性指那些高频查询、跨系统使用的关键字段,如IP、主机名、环境、负责人、业务归属;扩展属性则是各团队自己的个性化字段。
这样做有三个好处:一是核心属性尽量与官方模型一致,减少定制成本;二是当后续对接外部系统时,关键字段的标准化程度高,对接成本低;三是不会因为某个团队的特殊需求而破坏整体模型的一致性。我见过最失败的设计,是把所有历史需求全量塞进一个超大CI模型,每个CI有四十多个字段,录入一个主机要来回问七八个人。这种"大而全"在落地时基本上必然崩溃。
6.3 关系数据的维护:自动化采集 + 人工校准双轨制
CMDB中最难维护的不是属性,而是关系。拓扑关系如果靠人工维护,大概率会随着业务变动而失真。建议的做法是:
- 对网络和虚拟机关系,定期通过采集脚本自动更新(比如从云厂商API同步实例与VPC的关系);
- 对应用依赖关系,通过APM或调用链数据自动推导,无法自动化的部分,以半年或一年为周期做人工"对账";
- 在CMDB中给每条关系记录加"来源"和"最后更新时间"两个字段,既能追溯到数据来源,又能识别陈旧关系。
这个双轨制比纯自动或纯人工都可靠。关系数据在刚建设期不追求完美,先保证"大部分正确",再用自动化机制持续补全。
6.4 千万别一开始就追求"全量自动发现"
很多人对CMDB的期待是"装了之后全自动变出一张完整拓扑"。现实是,在混合云、多环境、安全隔离的网络条件下,自动发现永远只能覆盖一部分资产。如果在建设初期就把自动发现的覆盖率当成核心KPI,团队会被不停排查Agent安装情况、排查网络连通性搞得筋疲力尽,而真正的业务数据录入反而被忽略了。
建议分三步走:第一阶段人工梳理核心业务链路,保证重要系统的CI关系是准确的;第二阶段用自动发现覆盖主机、网络设备等可采集对象,与人工数据做比对;第三阶段再考虑应用层的自动探测。这样每走一步都有实实在在的成果,不会让项目陷入"建了半年还在建"的状态。
6.5 定期审计:给CMDB数据上一份"健康检查体检"
CMDB上线后,建议每季度或者每半年做一次数据健康度审计。可以开发一个简单的脚本,检测以下几项:空值字段比例;重复主机名或IP记录;超过90天未更新的CI;没有归属人和没有关系的孤儿CI;负责人离职后未转移的数据。把审计结果做成一个简单报表,推动相关负责人去修正,才能真正建立起数据质量的正向循环。
这比购买任何商业插件都管用。数据质量差的根源通常不是软件功能问题,而是组织流程问题——定期审计报表会倒逼各团队把维护CMDB当成日常工作的一部分,而不是年底才想起一次。
7. 我在实际项目中的最终建议
如果非要从这些开源项目里抽出几条"万能建议",我个人的体会大概是:
- 资产台账优先,CMDB后置:先把资产数据管清楚,哪怕用一张干净的Excel先跑半年,也比一开始就上一个重系统要好。
- 别把"找系统"当目标,把"看清家底"当目标:用最少的功能满足最大的管理诉求,等模式跑通再平移数据到更强的平台。
- 数据比系统值钱:一套有半年真实数据沉淀的Snipe-IT,比一套全新没人录入信息的蓝鲸CMDB有价值得多。
- 凡是需要人工维护的系统,都要考虑使用体验:没人爱用的工具,无论技术上多牛,最终都会变成另一座信息孤岛。
选型报告写到这,我不打算给一个"标准答案",因为没有哪个开源项目能适配所有团队。但如果你把这篇提到的概念区分、维度对比、规模匹配和落地经验都过一遍,再结合自己的实际场景做一次小范围PoC,大概率能避开我踩过的那些坑。
最后再分享一个小技巧:选型前先在你的实际网络环境里,同时部署两个最中意的候选项目,手动录入一套真实业务的数据(比如一个应用的三台服务器和一主两从数据库),然后请同事试用一周,看谁更快被大家接受、谁更省心。这个"试婚期"的性价比,远高于反复翻文档和对比清单。