后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载本文以 docs/db/built-in_model.md 为主体系统讲解蓝鲸配置平台BlueKing CMDB中业务集、主机、项目这三类内置模型在 MongoDB 中的底层集合结构。你将掌握cc_BizSetBase中bk_scope范围过滤规则的三层嵌套结构、cc_HostBase中 IP 与 Agent ID 的唯一性约束实现以及cc_ProjectBase的字段语义与索引设计同时结合src/common下的源码厘清内置模型表与用户自定义模型分表之间的存储关系为二次开发、数据巡检与运维排障提供直接依据。一、前置认知MongoDB 集合与表结构文档的关系蓝鲸 CMDB 底层使用 MongoDB 进行数据存储。MongoDB 是面向文档的数据库没有传统关系型数据库意义上的表而是以**集合Collection和文档Document**组织数据。因此 docs/db/README.md 中明确说明本目录下文档中涉及的表结构和字段解释仅供参考请以实际环境中的结构为准。内置模型是 CMDB 中最核心的一类模型包括业务、业务集、集群、模块、主机、进程、管控区域、项目等。这些模型的实例数据并不存放在通用的实例分表中而是存放在各自的内置集合中集合名在源码中通过常量统一定义BKTableNameBaseBizSet cc_BizSetBaseBKTableNameBaseHost cc_HostBaseBKTableNameBaseProject cc_ProjectBase参见 src/common/tablenames.go。同时src/common/definitions.go 定义了这些内置模型的对象 ID业务集为bk_biz_set_obj、主机为host、项目为bk_project配合GetInstTableName将对象 ID 映射到对应集合见 src/common/tablenames.go。一个关键设计是内置集合仅保存模型内置的预定义字段而用户在模型上扩展的自定义属性字段会动态叠加到同一文档中。下文每一节的注意都强调了这一点——表结构取决于用户在模型中定义的属性字段。二、cc_BizSetBase业务集信息集合2.1 作用cc_BizSetBaseBKTableNameBaseBizSet用于存放业务集信息。业务集是 CMDB 中对多个业务biz进行聚合管理的逻辑单元通过bk_scope描述其包含的业务范围。2.2 集合结构字段类型描述_idObjectId数据唯一IDbk_biz_set_idNumberLong业务集idbk_biz_set_nameString业务集名称bk_biz_set_descString业务集描述bk_biz_maintainerString维护者bk_scopeObject业务集范围defaultNumberLong是否是默认业务集1代表是0代表否bk_supplier_accountString开发商IDcreate_timeISODate创建时间last_timeISODate最后更新时间注意此处仅对业务集内置的模型字段做说明业务集表结构字段取决于用户在业务集模型中定义的属性字段。这一结构与源码中的BizSetInst结构体一一对应见 src/common/metadata/inst.go其中Scope BizSetScope对应bk_scopeDefault int64对应default字段。字段常量在 src/common/definitions.go 中定义BKBizSetIDField、BKBizSetNameField、BKBizSetScopeField bk_scope、BKBizSetMatchField match_all。2.3 bk_scope 字段结构业务集范围的过滤规则bk_scope是业务集的核心字段决定该业务集包含哪些业务。其结构分为三层第一层bk_scope字段类型描述match_allBoolean是否包含所有业务filterObject所包含业务的条件规则第二层bk_scope.filter字段类型描述conditionString规则操作符rulesArray过滤节点的范围规则第三层bk_scope.filter.rules过滤规则为三元组field、operator、value字段类型描述fieldstring字段名operatorstring操作符value-操作数不同的 operator 对应不同的 value 格式2.4 源码级校验bk_scope 的合法性约束bk_scope并非自由拼装而是经过严格校验后才允许入库。BizSetScope的校验逻辑定义在 src/common/metadata/toposerver.go要点如下match_all与filter互斥当match_all为true时filter必须为空当match_all为false时filter必须设置。二者同时存在或同时缺失都会报错。条件深度固定为 2 层scope.Filter.GetDeep()必须等于common.BizSetConditionMaxDeep即过滤条件最多嵌套两层。仅支持CombinedRule且组合条件必须为ANDfilter.condition取值只能是AND保证子条件之间是与的关系。叶子规则AtomRule仅支持equal与in两个操作符这意味着业务集范围规则只能用等于某个值或属于某集合来表达不允许使用大小比较、模糊匹配等操作符。从实现上看filter的类型是*querybuilder.QueryFilter其规则体系定义在 src/common/querybuilder/types.goAtomRule{Field, Operator, Value}为叶子规则CombinedRule{Condition, Rules}为组合规则condition支持AND/OR操作符枚举包括equal、not_equal、in、not_in、less、greater、contains、begins_with、is_empty、is_null、exist等。规则在落库前还会通过ToMgo()转换为 MongoDB 查询条件如equal→$eq、in→$in、contains→ 正则$regex见 src/common/querybuilder/types.go。创建业务集时CreateBizSetRequest还会强制要求bk_biz_set_name必填见 src/common/metadata/toposerver.go。2.5 集合索引cc_BizSetBase的索引注册在 src/common/index/collections/business_set.go包含bk_biz_set_id上的唯一索引CCLogicUniqueIdxNamePrefix biz_set_idbk_biz_set_name上的唯一索引业务集名称全局唯一bk_biz_set_id bk_biz_set_name bk_supplier_account上的普通组合索引。三、cc_HostBase主机信息集合3.1 作用cc_HostBaseBKTableNameBaseHost是 CMDB 中最重要、数据量最大的集合之一用于存放主机信息。主机是资产管理的核心对象其上承载了 IP、Agent、云厂商、CPU/内存/磁盘等大量属性。3.2 集合结构字段类型描述_idObjectId数据唯一IDbk_os_nameString操作系统名称bk_addressingString寻址方式import_fromString录入方式bk_slaStringSLA级别bk_cpu_moduleStringCPU型号bk_host_innerip_v6String Array内网IPv6bk_agent_idStringGSE Agent IDbk_cloud_host_identifierBoolean云主机标识bk_os_bitString操作系统位数bk_snString设备SNbk_host_outeripString Array外网IPbk_service_termNumberLong质保年限bk_state_nameString所在国家bk_macString内网MAC地址bk_cloud_inst_idString云主机实例IDbk_cpu_architectureStringCPU架构bk_os_versionString操作系统版本operatorString Array主要维护人bk_os_typeString操作系统类型bk_host_idNumberLong主机idbk_cloud_idNumberLong管控区域idbk_commentString备注bk_cloud_host_statusNumberLong云主机状态bk_bak_operatorString Array备份维护人bk_province_nameNumberLong所在省份bk_isp_nameString所属运营商bk_diskNumberLong磁盘容量(GB)bk_outer_macString外网MACbk_stateString当前状态bk_host_outerip_v6String Array外网IPv6bk_host_nameString主机名称bk_asset_idString固资编号bk_cloud_vendorString云厂商bk_host_inneripString Array内网IPbk_cpuNumberLongCPU逻辑核心数bk_memNumberLong内存容量(MB)bk_supplier_accountString开发商IDcreate_timeISODate创建时间last_timeISODate最后更新时间注意此处仅对主机内置的模型字段做说明主机表结构字段取决于用户在主机模型中定义的属性字段。3.3 关键字段语义补充bk_host_innerip/bk_host_outerip是数组类型String Array一台主机可能拥有多个内网 IP 或外网 IP因此字段以数组形式存储IPv6 地址单独存放在bk_host_innerip_v6/bk_host_outerip_v6中。相关字段常量定义于 src/common/definitions.go 与 src/common/definitions.go。bk_agent_idGSE Agent ID用于唯一标识一台已安装 GSE Agent 的主机是 CMDB 与 GSE 管控体系对接的桥梁。bk_addressing寻址方式取值定义在源码中static表示静态寻址、dynamic表示动态寻址见 src/common/definitions.go。该字段直接参与主机唯一性约束见下文索引说明。bk_cloud_id管控区域 id对应cc_PlatBase中的管控区域主机必须归属某个管控区域。import_from录入方式记录主机来源如手动录入、Excel 导入、API 导入、云资源同步等。3.4 集合索引IP 与 Agent ID 的唯一性约束主机集合的索引定义在 src/common/index/collections/hostbase.go是理解 CMDB 主机数据一致性的关键bk_host_innerip bk_cloud_id唯一索引保证同一管控区域内静态寻址主机的内网 IP 不重复。通过PartialFilterExpression部分过滤索引限定仅对bk_addressing static的主机生效——即只有静态寻址主机才要求内网 IP 管控区域唯一。bk_host_innerip_v6 bk_cloud_id唯一索引与上一条同理针对 IPv6 地址同样仅约束静态寻址主机。bk_agent_id唯一索引保证一个 Agent ID 只能对应一台主机部分过滤条件bk_agent_id 允许未安装 Agent的多台主机同时存在空 Agent ID。此外还注册了一批历史兼容索引bk_host_name_1、bk_host_innerip_1、idx_unique_hostID、bk_cloud_id_1等见 src/common/index/collections/hostbase.go初始化时通过registerIndexes统一注册src/common/index/collections/hostbase.go。四、cc_ProjectBase项目信息集合4.1 作用cc_ProjectBaseBKTableNameBaseProject用于存放项目信息。项目是 CMDB 面向容器/云资源管理场景引入的一级组织单元对象 ID 为bk_project用于将资源按项目维度进行隔离与管理。4.2 集合结构字段类型描述_idObjectId数据唯一IDidNumberLong自增IDbk_project_idString项目IDbk_project_codeString项目英文名bk_project_typeString项目类型bk_project_ownerString项目负责人bk_project_nameString项目名称bk_project_descString项目描述bk_project_sec_lvlString保密级别bk_statusString项目状态bk_supplier_accountString开发商IDcreate_timeISODate创建时间last_timeISODate最后更新时间注意此处仅对项目内置的模型字段做说明项目表结构字段取决于用户在项目模型中定义的属性字段。字段常量在 src/common/definitions.go 中定义包括bk_project_id、bk_project_name、bk_project_code、bk_project_desc、bk_project_type、bk_project_sec_lvl、bk_project_owner、bk_status等此外还存在bk_project_team项目团队与bk_project_icon项目图标字段定义。4.3 集合索引与写入限制索引设计cc_ProjectBase的索引注册在 src/common/index/collections/project.go包括id、bk_project_id、bk_project_name、bk_project_code上的四个唯一索引自增 ID、项目 ID、项目名称、项目英文名均全局唯一以及bk_status上的普通索引。批量写入限制创建项目接口CreateProjectOption与更新项目接口UpdateProjectOption均将单次写入/更新的条数上限限制为common.BKWriteOpLimit其值为 200定义于 src/common/definitions.go超出即返回参数个数超出限制错误见 src/common/metadata/toposerver.go。五、内置模型表与实例分表的关系理解了上述三张集合后还需要厘清它们在整个 CMDB 存储体系中的位置。CMDB 的模型实例数据分为两类存储路径见 src/common/tablenames.go内置模型实例业务、业务集、主机、模块、集群、进程、管控区域、项目等写入各自的固定集合即本篇文章介绍的cc_BizSetBase、cc_HostBase、cc_ProjectBase以及cc_ApplicationBase业务、cc_SetBase集群、cc_ModuleBase模块、cc_Process进程、cc_PlatBase管控区域等。映射关系由GetInstTableName统一完成。用户自定义模型实例写入按开发商与对象 ID 动态生成的分表命名格式为cc_ObjectBase_{supplierAccount}_pub_{objectID}如cc_ObjectBase_0_pub_switch对应GetObjectInstTableName的实现。因此业务集、主机、项目这三张表承载的只是内置预定义字段用户在这些模型上新增的扩展属性虽然也物理存储在同一个文档中但字段集合是动态、可变化的——这正是阅读本文各节注意提醒时需要牢记的核心规则。六、实践建议如何核对这三张集合需要查看实际结构时可以通过 MongoDB shell 连接 CMDB 的存储库执行db.cc_BizSetBase.findOne()、db.cc_HostBase.findOne()、db.cc_ProjectBase.findOne()观察真实文档字段参考 docs/db/README.md 中以实际环境中的结构为准的说明。排查主机重复录入问题时重点检查cc_HostBase上bk_host_innerip bk_cloud_id唯一索引与bk_agent_id唯一索引是否生效源码入口在 src/common/index/collections/hostbase.go。业务集bk_scope的过滤规则若校验失败可对照 src/common/metadata/toposerver.go 的BizSetScope.Validate()检查是否违反了match_all 与 filter 互斥、深度为 2、仅 AND 组合、仅 equal/in 操作符四条约束。上述所有字段、约束与索引均可从当前仓库src/common目录下的常量定义、数据结构与索引注册代码中逐一溯源验证。赞分享后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载相关推荐蓝鲸CMDB数据模型设计终极指南深入理解配置平台的核心数据结构蓝鲸CMDB数据模型设计终极指南深入理解配置平台的核心数据结构 蓝鲸CMDB配置管理数据库是蓝鲸智云体系中的核心组件为企业级IT环境提供强大的配置管理能后端企业应用运维蓝鲸 CMDB 更新模型分类接口实战update_classification 全解析蓝鲸 CMDB 更新模型分类接口实战update_classification 全解析 导读 模型分类Model Classification是蓝鲸配置平后端企业应用运维蓝鲸CMDB模型管理完全手册从内置模型到自定义扩展终极指南蓝鲸CMDB模型管理完全手册从内置模型到自定义扩展终极指南 蓝鲸CMDB配置管理平台作为企业级IT资产管理的中枢系统其强大的模型管理功能为各类IT资源提供了后端企业应用运维上一篇如何在macOS上无缝运行Windows程序Whisky现代Wine封装方案深度解析下一篇怎样在macOS上轻松运行Windows程序Whisky实用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考