后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载本文围绕 bk-cmdb 配置平台BlueKing CMDB的count_biz_host_cpu接口展开讲解该成本管理专用接口的请求参数、分页规则、响应结构与鉴权要求并结合仓库源码说明其“按业务分页取主机 → 分批统计 CPU 核数”的底层实现帮助你在成本核算、容量盘点类场景下正确调用并理解这一接口的行为边界。接口定位与版本前提count_biz_host_cpu是一个成本管理专用的特殊接口用于统计每个业务business下所有主机的 CPU 核数汇总情况。根据接口文档说明该接口自v3.8.17 / v3.10.18版本起提供调用方需要具备全局设置权限Global Settings Permission。在蓝鲸 API 网关的资源定义中该接口被显式标记为隐藏资源is_hidden: true即不出现在常规 API 文档列表中仅面向成本管理这类特定集成场景开放可在 API 网关资源映射配置 中确认其 ESB 路径与后端转发路径属性值ESB 路径v2/v2/cc/count_biz_host_cpu/建议方法POST后端转发路径/api/v3/host/count/cpu是否隐藏是is_hidden: true源码侧该路由注册在 host-server 服务中处理器为Service.CountHostCPU见 service_initfunc.goutility.AddHandler(rest.Action{Verb: http.MethodPost, Path: /host/count/cpu, Handler: s.CountHostCPU})请求参数公共参数所有 CC 开放接口均需携带蓝鲸公共参数common_args_desc模板展开后即为一组认证字段与请求示例中的字段一致参数说明bk_app_code调用方应用 Codebk_app_secret调用方应用 Secretbk_username操作人账号bk_token用户身份凭证如 SSO Token接口参数字段类型是否必填描述bk_biz_idint否业务 IDpageobject否分页信息注意bk_biz_id和page两个参数必须提供其一且只能传其中一个。对应地请求体由 hostserver.go 中的CountHostCPUReq结构体定义// CountHostCPUReq count host cpu num request type CountHostCPUReq struct { BizID int64 json:bk_biz_id,omitempty Page *BasePage json:page,omitempty }其Validate()方法与文档中的“二选一”约束完全对应并额外规定了分页上限bk_biz_id为 0缺省且page为nil时返回bk_biz_id or page参数缺失错误两者同时存在时返回bk_biz_id and page参数非法错误bk_biz_id为负数时返回参数非法错误走分页模式时page.limit必须指定且最大不能超过 10超过则返回分页超限错误。Page 字段说明字段类型是否必填描述startint是记录起始位置limitint是每页记录数最大 10分页模式下的start/limit分页的是业务列表而不是主机列表——即按业务 ID 排序取一页业务再逐个统计这些业务的 CPU 数据。请求示例以分页模式为例文档给出的请求体如下{ bk_app_code: code, bk_app_secret: secret, bk_username: xxx, bk_token: xxxx, page: { start: 10, limit: 10 } }若只需要统计单个业务则改为传bk_biz_id而不传page例如{ bk_app_code: code, bk_app_secret: secret, bk_username: xxx, bk_token: xxxx, bk_biz_id: 5 }响应示例与参数说明响应示例{ result: true, code: 0, message: success, permission: null, request_id: e43da4ef221746868dc4c837d36f3807, data: [ { bk_biz_id: 5, host_count: 100, cpu_count: 192, no_cpu_host_count: 5 }, { bk_biz_id: 7, host_count: 40, cpu_count: 58, no_cpu_host_count: 11 } ] }response 公共字段字段类型描述resultbool请求是否成功。true成功false失败codeint错误码。0 表示成功0 表示失败错误messagestring请求失败时返回的错误信息permissionobject权限信息request_idstring请求链路 IDdataobject请求返回的数据data 业务字段字段类型描述bk_biz_idint业务 IDhost_countint主机数量cpu_countintCPU 总核数no_cpu_host_countint未设置 CPU 核数字段的主机数量data的每个元素对应 Go 结构体BizHostCpuCount见 hostserver.go// BizHostCpuCount host cpu count in biz type BizHostCpuCount struct { BizID int64 json:bk_biz_id HostCount int64 json:host_count CpuCount int64 json:cpu_count NoCpuHostCount int64 json:no_cpu_host_count }两个统计口径值得注意host_count与no_cpu_host_count之和等于该业务参与统计的主机总数cpu_count只累加核数有效的主机。也就是说一台主机只要bk_cpu字段缺失、为null或为0都会计入no_cpu_host_count且不贡献核数——这为成本管理侧提供了“数据完整性缺口”的直接度量。源码解析统计逻辑的实现细节核心处理函数CountHostCPU位于 host.go其执行流程可分为单业务与分页业务两条路径。单业务路径传 bk_biz_id 时当请求携带bk_biz_id时直接调用countBizHostCPU统计该业务并将结果包装为单元素数组返回与分页模式返回类型保持一致均为[]meta.BizHostCpuCount// get specified biz host cpu count if req.BizID ! 0 { cnt, err : s.countBizHostCPU(ctx.Kit, req.BizID) if err ! nil { ctx.RespAutoError(err) return } ctx.RespEntity([]meta.BizHostCpuCount{cnt}) return }分页业务路径传 page 时未指定业务时接口先在 core-service 中按业务 IDbk_biz_id排序、过滤掉已归档业务bk_data_status ! disabled取出该页业务 ID 列表然后逐个业务调用countBizHostCPU汇总最后按页内顺序填充data数组bizReq : meta.QueryCondition{ Condition: mapstr.MapStr{common.BKDataStatusField: mapstr.MapStr{common.BKDBNE: common.DataStatusDisabled}}, Page: meta.BasePage{Start: req.Page.Start, Limit: req.Page.Limit, Sort: common.BKAppIDField}, Fields: []string{common.BKAppIDField}, }这解释了文档中limit上限仅为 10 的设计原因由于是分页取业务后串行逐个统计每个业务的主机若单页业务过多整体耗时会线性放大因此接口将单页业务数限制在 10 以内。countBizHostCPU分批取主机并累加核数countBizHostCPU单业务统计的实现采用了游标式分批拉取 去重的策略关键逻辑如下分批获取业务内主机以每批 500 条主机-模块关系GetHostModuleRelation按bk_host_id排序为步长逐页拉取避免一次性加载大业务的全部主机主机去重由于同一台主机可挂载在多个模块中关系列表里会出现重复的bk_host_id。代码利用“关系按 host id 排序”的特性用上一批/上一行的prevHostID做相邻去重保证每台主机只统计一次按 ID 批量查 CPU对去重后的 host ID 列表通过GetHosts只查询bk_cpu一个字段DisableCounter: true关闭计数开销逐台累加for _, host : range hostRes.Info { cnt.HostCount cpuCnt, exists : host[bk_cpu] if !exists || cpuCnt nil { cnt.NoCpuHostCount // 字段缺失或为 null continue } cpuCount, err : util.GetInt64ByInterface(cpuCnt) if err ! nil { // bk_cpu 值不是整数返回 bk_cpu 参数非法错误 ... } if cpuCnt 0 { cnt.NoCpuHostCount // 核数为 0 也视为“无 CPU 核数” continue } cnt.CpuCount cpuCount }从源码结构看还有两点值得调用方注意若某台主机的bk_cpu值无法解析为整数整个请求会以“参数非法bk_cpu”错误返回而不是跳过该主机——成本盘点前建议先清洗脏数据分批循环以“该批关系为空”作为终止条件因此对空业务无主机会返回全零计数而非报错。权限与网关配置全局设置权限的落地方式文档标注的“Global Settings Permission”在访问控制解析器中有明确映射。host.go 中对POST /api/v3/host/count/cpu命中该 pattern 时会声明ConfigAdmin资源上的Update动作if ps.hitPattern(countHostCPUPattern, http.MethodPost) { ps.Attribute.Resources []meta.ResourceAttribute{ { Basic: meta.Basic{ Type: meta.ConfigAdmin, Action: meta.Update, }, }, } return ps }也就是说调用该接口实际校验的是配置管理员ConfigAdmin资源上的权限这与“全局设置权限”的语义一致它不受单个业务的资源权限约束因为该接口可以跨业务返回统计数据。API 网关侧配置在 API 网关资源定义 中/api/v3/host/count/cpu资源配置了bk-rate-limit插件限流策略为每 1 秒 100 个令牌period: 1, tokens: 100且isPublic: false、allowApplyPermission: true可申请权限后调用。做成本定时任务集成时应控制调用频率并留意该限流上限。调用建议与边界二选一原则bk_biz_id与page必须且只能传一个否则请求在参数校验阶段即被拒绝错误码对应“参数需设置/参数非法”。分页上限 10分页模式下page.limit最大为 10且分页对象是业务而非主机跨页拉取全量业务时应递增start直至data返回空数组。统计口径cpu_count不含bk_cpu为 0、null或缺失的主机这类主机全部计入no_cpu_host_count可用于监控各业务的主机数据完整度。适用版本v3.8.17 / v3.10.18 及以上版本提供该接口更低版本调用会因路径不存在而失败。权限准备调用账号需具备全局设置ConfigAdmin权限否则将收到权限不足错误响应体permission字段会携带权限申请相关信息。该接口以“按业务维度输出主机数、CPU 总核数、无核数主机数”的三元指标为成本分摊与容量规划提供了可直接消费的数据源理解其分页语义与统计口径是正确接入成本管理场景的前提。赞分享后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载相关推荐bk-cmdb 成本管理专用接口统计业务主机 CPU 数量count_biz_host_cpu实战指南bk cmdb 成本管理专用接口统计业务主机 CPU 数量count_biz_host_cpu实战指南 本指南围绕蓝鲸智云配置平台bk cmdb开放后端企业应用运维蓝鲸 CMDB 统计业务主机 CPU 数量接口实战指南count_biz_host_cpu蓝鲸 CMDB 统计业务主机 CPU 数量接口实战指南count_biz_host_cpu 导读 count_biz_host_cpu 是蓝鲸配置平台bk后端企业应用运维bk-cmdb 主机服务模板 ID 查询接口list_host_service_template_id详解bk cmdb 主机服务模板 ID 查询接口list_host_service_template_id详解 导读 list_host_service_tem后端企业应用运维上一篇kOps 集成 Kube-router 完全指南CNI 网络、IPVS 服务代理与网络策略配置下一篇financial-services 项目 model-update 技能详解以财报与指引驱动估值模型更新的六步工作流创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考