四大核心使用场景:事件推送、模型管理、拓扑管理与主机管理实战解析)
后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载导读本文基于蓝鲸智云配置平台BlueKing CMDB下称 bk-cmdb官方文档 使用场景 展开深入解析平台最核心的四个能力面事件推送、模型管理、拓扑管理与主机管理。你将了解到如何通过订阅与 Watch 两种机制实时获取配置数据变更事件如何自定义企业架构与 IT 基础设施模型如何用主线关联描述业务拓扑以及如何通过集群/模块划分与云区域实现主机的精细管理和跨云管理。全文结合仓库源码事件服务、CoreService、TopoServer、HostServer 等模块给出实现层面的印证方便你在实际集成与二次开发中直接落地。一、事件推送把 CMDB 的每一次变更实时送达1.1 什么是事件推送当 CMDB 管理的资源主机、业务、集群、模块、进程、模型实例等发生变化时系统会产生相应的事件。这些事件可以由 CMDB 主动推送给订阅方使下游系统如监控、变更管理、自动化运维平台无需轮询数据库即可感知配置变化。从 事件服务模块说明 可以看到bk-cmdb 提供了两种事件获取方式基于回调模式的事件订阅与推送Subscribe / Push基于 Watch 模式的事件监听长轮询 / 游标回溯。两种方式对应的 API 文档分别位于 订阅事件 与 监听资源变化事件Watch。1.2 方式一回调式事件订阅Subscribe订阅模式的核心思想是业务方先在 CMDB 登记一个回调地址CMDB 在资源产生事件后主动向该地址推送。订阅接口的核心参数如下字段定义来源于 订阅事件 API字段类型必选描述subscription_namestring是订阅的名字system_namestring是订阅事件的系统的名字callback_urlstring是回调地址confirm_modestring是事件发送成功校验模式可选1-httpstatus、2-regularconfirm_patternstring是callback 的 httpstatus如 200或正则表达式subscription_formstring是订阅的事件类型多个以逗号分隔timeoutint是发送事件超时时间一个完整的订阅请求示例如下{ bk_app_code: esb_test, bk_app_secret: xxx, bk_username: xxx, bk_token: xxx, subscription_name: mysubscribe, system_name: SystemName, callback_url: http://127.0.0.1:8080/callback, confirm_mode: httpstatus, confirm_pattern: 200, subscription_form: hostcreate, timeout: 10 }订阅成功后返回subscription_id后续可通过 更新订阅事件、查询订阅信息 与 取消订阅事件 对订阅进行生命周期管理。参数说明confirm_mode决定了推送方如何判断回调是否成功——httpstatus模式按 HTTP 状态码判断如confirm_pattern填200regular模式则用正则匹配回调响应体内容。subscription_form支持的事件类型如hostcreate、hostupdate等以逗号分隔组合可同时订阅多种事件。1.3 方式二Watch 模式事件监听Watch 模式面向需要主动拉取、支持断点续传的集成场景v3.8 以上版本提供其设计特性见 resource_watch.md在有限时间内目前为 3 小时勿依赖该时长提供高可用的数据变更 watch 服务支持按游标cursor回溯事件适用于异常数据回溯或系统变更后的数据补录支持按时间点回溯、按游标回溯、从当前时间点开始监听三种起始方式支持按事件类型增/删/改过滤事件中携带全量数据支持主机与主机关系两类资源的事件 watch采用短长链设计游标 watch 时若无新事件则保持连接20 秒内有变更立即推回既避免频繁请求又保证时效支持批量事件 watch 与按需定制返回字段。Watch 接口的核心请求参数字段类型必选描述bk_event_typesarray string否关注的事件类型create/update/delete空为全部bk_fieldsarray string看情况返回的事件字段列表监听 host 资源时必填主机关系可置空bk_start_fromInt64否监听起始时间Unix 秒与 bk_cursor 二选一bk_cursorstring否游标代表开始或继续监听的事件地址bk_resourcestring是资源类型枚举host、host_relation、biz、set、module、process、object_instance、mainline_instance、biz_set、biz_set_relation、plat、project 等bk_supplier_accountstring是开发商账号bk_filterobject否过滤条件其中bk_sub_resource仅在资源为 object_instance / mainline_instance 时指定要监听的模型bk_obj_id监听主机资源的请求示例{ bk_app_code: esb_test, bk_app_secret: xxx, bk_username: xxx, bk_token: xxx, bk_event_types: [create, update, delete], bk_fields: [bk_host_innerip, bk_mac], bk_start_from: 12345678999, bk_cursor: MQ0yDTE1ODkyMDcyODENMQ01ZWI3ZWZjNTBiOTA5ZTYyMGFmYWQzZGY, bk_resource: host }返回结构示例{ result: true, code: 0, message: success, request_id: e43da4ef221746868dc4c837d36f3807, data: { bk_watched: true, bk_events: [ { bk_cursor: MQ0yDTE1ODkyMDcyODENMQ01ZWI3ZWZjNTBiOTA5ZTYyMGFmYWQzZGY, bk_resource: host, bk_event_type: update, bk_detail: { bk_cpu: 2 } } ] } }Watch 的使用流程官方 使用说明确定起始方式从某一时间开始 / 从当前时间开始 / 从指定游标开始然后发起请求处理返回若bk_watched为 truebk_events为事件详情列表取数组中最后一个事件的 cursor作为下一次请求的bk_cursor继续 watch若为 false则用bk_events中唯一事件的 cursor 继续下一次 watch。注意事件有 3 小时过期时间过期后事件释放、游标失效需改用时间点或当前时间重新开始监听。1.4 源码视角事件服务的实现链路从 事件服务模块说明 可以看清整体架构拉取数据源基于资源控制层 CoreService 的事件机制将底层数据库数据事件同步到全局缓存队列事件服务基于游标进行 watch 拉取写入事件队列事件服务整体为主从模式除主机身份事件处理逻辑外Master 节点的事件源 watcher 将事件同步到事件队列分发到订阅者事件队列事件处理协程按订阅者关系把事件分发到各订阅者队列再由 Pusher 协程发送到目标订阅者。服务入口在 watch.goWatchEvent从 URL 路径解析resource参数将请求体解码为watch.WatchEventOptions随后调用缓存服务CacheService的WatchEvent完成事件查询。事件参数的校验逻辑见 watch.go 的Validate方法关键约束包括bk_event_types中的事件类型必须合法监听host、biz、set、module资源时必须携带 bk_fieldsbk_start_from与bk_cursor不能同时使用只有object_instance、mainline_instance、inst_asst、kube_workload资源允许携带bk_sub_resource。事件类型常量定义在 types.gocreate新增、update更新、delete删除、unknown。资源类型CursorType的完整枚举定义在 cursor.go除上述文档列出的 host、biz 等之外还包括host_identifier、inst_asst、kube_cluster、kube_node、kube_namespace、kube_workload、kube_pod等容器相关资源——这意味着容器集群、节点、命名空间、工作负载、Pod 的变更同样纳入事件体系可作为容器场景集成的依据。二、模型管理自由定义企业的 IT 资源模型2.1 模型管理的定位通过模型管理可以对企业架构、业务拓扑以及 IT 基础设施中的各种元素和元素的各种属性进行自定义以满足生产管理需要。模型Model / Object是 bk-cmdb 一切数据组织的基石主机是模型、业务是模型、集群和模块也是模型甚至你可以自定义“交换机”“数据库实例”等任意新模型并为它们补充属性字段。2.2 模型体系中的几类核心操作从源码看模型管理覆盖的 API 分布在资源控制层CoreService与场景层TopoServer模型分类Classification管理将模型按大类组织。CoreService 的 model.go 提供了CreateManyModelClassification、CreateOneModelClassification、SetOneModelClassification、SetManyModelClassification、UpdateModelClassification等接口对应 创建分类、查询分类、删除分类 等 API模型Object管理定义模型本身即bk_obj_id、bk_obj_name、所属分类、图标等。TopoServer 的 object.go 中CreateObjectBatch支持批量创建模型并且在写操作前会通过AuthManager.AuthorizeByObjectIDs做权限校验随后在**事务AutoRunTxn**中完成属性与模型的创建保证批量导入模型的数据一致性模型属性Attribute管理为模型增删改属性字段对应 创建模型属性、查询模型属性、删除模型属性 等 API模型实例Instance管理定义好模型后即可创建实例数据见本文第三部分的实例与拓扑接口。从项目内置模型文档 built-in_model.md 可以看到bk-cmdb 预置了业务、集群、模块、主机、进程、云区域等基础模型在此基础上用户可以按需扩展自定义模型与属性从而把配置平台的抽象能力覆盖到企业内部任意资源对象上。三、拓扑管理用模型关系描绘业务拓扑3.1 拓扑管理的定位拓扑管理用于描述已定义的各种模型之间的关系。其中**主线关联Mainline**用于描述业务的拓扑结构——最典型的即“业务 → 集群Set→ 模块Module”这样的层级主线主机最终挂载在模块下形成完整的业务视图。3.2 主线模型与实例拓扑CoreService 的 mainline.go 提供了两个核心能力SearchMainlineModelTopo查询主线模型拓扑以with_detail参数控制是否返回模型详情对应 API 获取主线模型拓扑SearchMainlineInstanceTopo按bk_biz_id查询某业务下的主线实例拓扑即该业务下完整的层级实例树。场景层 TopoServer 的 association.go 则负责主线对象的维护CreateMainLineObject新增主线对象、DeleteMainLineObject删除主线对象、SearchMainLineObjectTopo查询主线拓扑同时提供业务拓扑查询接口SearchBusinessTopo、SearchBusinessTopoWithStatistics带主机数与服务实例数统计以及GetTopoNodeHostAndSerInstCount等。3.3 实例关联Association与实例操作除了主线层级模型之间还可以建立任意关联关系如“服务器 → 部署 → 应用”。实例层面的接口见 inst.go覆盖了完整 CRUD 链路创建/批量创建实例CreateInst、CreateManyInstance、CreateInstsByImport导入删除/更新实例DeleteInsts、DeleteInst、UpdateInsts、UpdateInst查询实例SearchInsts、SearchObjectInstances、SearchInstTopo查询实例拓扑、SearchInstChildTopo查询子拓扑节点、SearchInstByObject、SearchInstByAssociation等关联查询SearchInstAssociation、SearchInstAssociationUI、SearchInstAssociationWithOtherObject、SearchInstAndAssociationDetail。关联类型AssocKind本身也是可管理的元数据CreateAssociationType、UpdateAssociationType、DeleteAssociationType、SearchAssociationType见 association.go。对应 API 文档还包括 新增实例关联、查询实例关联、查询对象关联 等。小结主线关联解决“业务纵向分层”的问题实例关联解决“模型横向互连”的问题两者共同构成 bk-cmdb 拓扑管理的能力底座。四、主机管理从资源池到业务的精细运维4.1 主机管理的定位通过模型管理功能定义主机及其属性再结合拓扑管理功能对已定义的主机进行管理。典型做法是在某个业务下划分集群和模块将主机与对应模块关联以此明确该业务下主机的分布情况主机与云区域Cloud Area关联后还能方便地实现跨云管理。4.2 主机生命周期与模块流转HostServer 的 module.go 提供了主机在业务内外的完整流转能力关键接口包括TransferHostModule主机转入/转出指定模块MoveHost2IdleModule主机移至空闲机模块MoveHost2FaultModule主机移至故障机模块MoveHost2RecycleModule主机移至待回收模块MoveHostToResourcePool主机移回资源池AssignHostToApp主机分配至业务TransferHostAcrossBusiness主机跨业务转移GetHostModuleRelation、GetHostRelationsWithMainlineTopoInstance查询主机与模块、主线拓扑实例的关系。此外host.go 中的DeleteHostBatchFromResourcePool支持从资源池批量删除主机主机搜索能力见 findhost.go支持按拓扑、条件等多维度查询主机。4.3 云区域与跨云管理云区域Cloud Area即plat用于抽象不同网络/云环境。HostServer 的 cloudarea.go 提供FindManyCloudArea批量查询云区域CreatePlatBatch/CreatePlat批量或单个创建云区域UpdatePlat、DeletePlat更新与删除云区域UpdateHostCloudAreaField更新主机的云区域字段即调整主机所属云区域实现主机在云区域间迁移FindCloudAreaHostCount统计云区域下主机数量。对应 API 见 创建云区域、查询云区域、更新主机云区域字段、删除云区域 等。主机属性中的bk_cloud_id即主机所属云区域标识见 主机资源 watch 事件详情示例 中 host 的bk_cloud_id字段。通过将主机关联到不同云区域再结合业务下的集群/模块划分即可在同一配置平台内实现多数据中心、多云环境下的统一主机视图与跨云调度管理。4.4 主机与事件体系的联动主机管理的每一次变更新增、转移模块、改云区域等都会产生事件可通过第一部分介绍的事件推送机制实时获取。例如订阅hostcreate、hostupdate事件或使用bk_resourcehost、host_relation的 Watch 接口监听主机详情与主机-模块关系的变化host_relation事件的bk_detail包含bk_biz_id、bk_host_id、bk_module_id、bk_set_id、bk_supplier_account等关键关系字段。这一联动使“配置变更 → 事件通知 → 下游自动响应”成为可能正是 CMDB 作为运维数据中枢的核心价值。五、场景落地建议事件同步类系统监控、审计、自动化优先使用 Watch 模式借助游标实现断点续传与数据补录注意 3 小时事件有效期与单次返回 200 条上限勿依赖该数值对时效要求不高、希望 CMDB 主动送达的场景使用订阅模式并配置好confirm_mode与confirm_pattern以保障推送可靠性自定义资源建模先规划模型分类再定义模型与属性最后通过实例关联与主线拓扑组织数据善用批量创建与事务保障见 object.go 中的AutoRunTxn保证大规模建模的一致性与导入效率主机治理按“资源池 → 业务 → 集群 → 模块”的路径设计主机归属配合空闲机/故障机/待回收等默认模块规范主机状态流转借助云区域抽象多云环境最终通过事件订阅把主机变更同步给下游平台。以上四大使用场景彼此联动模型与拓扑定义数据的“形”主机管理维护数据的“实”事件推送则让数据的每一次变化“活”起来——这也是 bk-cmdb 支撑复杂运维体系的基础能力框架。赞分享后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载相关推荐蓝鲸配置平台 bk-cmdb 云主机管理 API 实战add_cloud_host_to_biz 批量导入与原理剖析蓝鲸配置平台 bk cmdb 云主机管理 API 实战add_cloud_host_to_biz 批量导入与原理剖析 本文以 bk cmdb 官方 API 文后端企业应用运维蓝鲸配置平台bk-cmdb推送主机身份接口详解push_host_identifier 使用与实现原理蓝鲸配置平台bk cmdb推送主机身份接口详解push_host_identifier 使用与实现原理 本文以蓝鲸智云配置平台bk cmdb官方 AP后端企业应用运维蓝鲸配置平台bk-cmdbOpenAPI「find_host_by_topo」详解按拓扑节点查询主机的用法与实现原理蓝鲸配置平台bk cmdbOpenAPI「find_host_by_topo」详解按拓扑节点查询主机的用法与实现原理 本文以 bk cmdb 配置中心C后端企业应用运维上一篇proc-macro-workshopRust 过程宏的终极学习指南下一篇A-Mem对比分析与传统记忆系统相比Agentic Memory的10大优势创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考