蓝鲸 CMDB 主机身份下发结果查询接口(find_host_identifier_push_result)详解

发布时间:2026/10/13 12:26:19
蓝鲸 CMDB 主机身份下发结果查询接口(find_host_identifier_push_result)详解 后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载导读find_host_identifier_push_result是蓝鲸智云配置平台bk-cmdb提供的主机身份Host Identifier下发任务结果查询接口。当通过push_host_identifier接口向 GSE 发起主机身份推送后本接口可依据返回的 GSE 任务 ID 查询任务中各台主机的执行结果将主机划分为“成功success_list”“失败failed_list”“处理中pending_list”三类。读完本文你将掌握该接口的完整调用方式、响应字段语义、权限要求以及其背后“CMDB 任务管理 Redis 缓存 GSE 异步回查”的实现原理。该接口对应事件服务event_server中的 REST 路由在 路由注册代码 中可以找到utility.AddHandler(rest.Action{Verb: http.MethodPost, Path: /push/host_identifier, Handler: s.PushHostIdentifier}) utility.AddHandler(rest.Action{Verb: http.MethodPost, Path: /find/host_identifier_push_result, Handler: s.GetHostIdentifierPushResult})一、接口功能与适用场景1.1 功能说明获取将主机身份信息推送到机器的执行结果。使用本接口有两个关键约束只能查询 30 分钟内推送的任务因为推送接口将任务信息写入 Redis 时设置了 30 分钟的过期时间TTL从源码看推送任务的缓存写入 使用s.cache.Set(..., time.Minute*30)过期后任务键将被 Redis 清理届时再调用本接口将无法取回任务进而无法返回结果。1.2 版本与权限要求项目要求接口版本v3.10.23业务内主机需要对应业务的访问权限business access permission资源池主机需要主机更新权限host update permission即资源池主机编辑权限权限校验在实现中由haveAuthority完成sync.go 中的鉴权逻辑通过GetHostModuleRelation查询主机所属业务再调用AuthorizeByBusinessID进行鉴权。权限不足时接口会返回权限错误response 中的permission字段会携带权限信息。二、请求参数2.1 公共参数与蓝鲸 CMDB 其他 OpenAPI 一致每次请求都需要携带公共参数bk_app_code、bk_app_secret、bk_username/bk_token即文档中的{{ common_args_desc }}。2.2 接口参数字段类型必填说明task_idstring是任务 ID来自push_host_identifier接口返回的 GSE 任务 ID接口参数的校验逻辑定义在 GetTaskResultOptiontask_id为空时直接返回参数非法错误CCErrCommParamsInvalid。2.3 请求示例{ bk_app_code: esb_test, bk_app_secret: xxx, bk_username: xxx, bk_token: xxx, task_id: GSETASK:F:202201251046313618521052:198 }注意示例中的task_id形如GSETASK:F:202201251046313618521052:198这正是 GSE 侧文件分发任务的 ID 格式。任务 ID 必须与 push_host_identifier 接口返回的data.task_id保持一致。三、响应说明3.1 响应示例{ result: true, code: 0, msg: success, permission: null, request_id: c11aasdadadadsadasdadasd1111ds, data: { success_list: [ 1, 2 ], pending_list: [ 3, 4 ], failed_list: [ 5, 6 ] } }3.2 response 字段说明字段类型说明resultbool请求是否成功。true成功false失败codeint错误码。0 表示成功0 表示失败错误messagestring失败时返回的错误信息permissionobject权限信息当无权限时返回否则为 nullrequest_idstring请求链 ID用于链路追踪dataobject请求返回的数据3.3 data 字段说明字段类型说明success_listarray执行成功的主机 ID 列表failed_listarray执行失败的主机 ID 列表pending_listarrayGSE 已调用主机身份接口、但尚未获取到结果的主机 ID 列表响应结构体定义见 HostIdentifierTaskResult对应 JSON 键分别为success_list、failed_list、pending_list。四、源码级实现原理结果从 GSE 到接口的三段链路4.1 第一步从 Redis 取回任务请求进入 GetHostIdentifierPushResult 后首先按hostIdentifierTaskKeyPrefix task_id从 Redis 读取任务。键前缀定义于 sync.goconst hostIdentifierTaskKeyPrefix common.BKCacheKeyV3Prefix host_identifier:task:取出的任务反序列化为 hostidentifier.Task 结构其中包含任务 ID、主机信息列表HostInfos和过期时间ExpiredTime。任务在推送时被写入 Redis过期时间设定为 50 分钟而对外查询接口的限制是 30 分钟留出的余量用于后台轮询任务状态的重试。4.2 第二步向 GSE 异步查询任务执行结果GetTaskExecutionResultMap会根据 GSE 客户端版本选择不同查询通道task.goV2API Gateway 版本调用gseApiGWClient.GetTransferFileResult携带TaskID与AgentIDListV1GSE TaskServer 直连版本调用gseTaskServerClient.GetPushFileRst。两个通道均内置最多10 次重试retryTimes 10见 hostIdentifier.go 常量定义失败时按失败次数递增休眠后重试仍失败则返回错误。4.3 第三步按主机归类成功/失败/处理中得到 GSE 返回的map[key]code结果映射后接口遍历任务中的每台主机sync.go按主机在任务中的标识键取结果结果键的构造规则为2.0 Agent 使用bk_agent_id1.0 Agent 使用云区域ID:内网IP对应hostidentifier.HostKey(cloudID, innerIP)若结果不存在或返回码为Handling115表示任务仍在执行中该主机归入pending_list若返回码为CCSuccess归入success_list其余一切非成功码归入failed_list。这三类状态与后台任务轮询逻辑中的判断完全一致compareTaskResult即Handling状态下任务会被重新放回任务队列等待下一次查询。五、与推送接口配合的完整使用流程本接口不是独立存在的它与 push_host_identifier 接口配对使用典型调用流程如下发起推送调用push_host_identifier传入bk_host_ids单次最多 200 台获取返回的data.task_id查询结果在 30 分钟内调用find_host_identifier_push_result传入task_id处理结果根据data中的三个列表做业务处理——success_list可直接视为下发完成failed_list需要排查 Agent 状态或网络原因pending_list表示结果尚未回执可以稍后再次调用本接口轮询。从后台实现看即使接口返回pending_list非空也无需担心任务“丢单”事件服务会持续轮询 Redis 任务队列GetTaskExecutionStatus直到任务过期对于确认失败的主机还会在 Agent 恢复在线后自动重新下发LaunchTaskForFailedHost。因此pending_list与failed_list反映的是查询时刻的快照状态任务在后台仍可能被推进。六、错误处理与注意事项功能未开启若事件服务未启用主机身份同步SyncData为空接口会直接返回错误码1103011CCErrEventSyncHostIdentifierDisabled相关错误码定义见 errInfo.go任务不存在或已过期超过 30 分钟后再查询Redis 中的任务键已过期接口无法反序列化任务将返回读取 Redis 失败或空任务的错误参数缺失task_id为空时返回参数校验错误权限不足任务内主机属于业务时需业务访问权限属于资源池时需主机更新权限否则返回权限错误并在permission字段中给出提示监控可观测事件服务为整个链路注册了 Prometheus 指标metrics 注册代码如cmdb_sync_data_get_result_total查询 GSE 任务结果次数、cmdb_sync_data_host_result_total主机结果分布、cmdb_sync_data_fail_host_list_length失败主机队列长度等可用于排查主机身份下发积压问题。七、小结find_host_identifier_push_result是主机身份下发能力闭环中的“查询端”。它本身只接收一个task_id但背后串联了 Redis 任务缓存、GSE 异步任务回查、业务/资源池权限校验以及成功/失败/处理中的三态归类。结合本文的源码路径读者可以沿着 sync.go → task.go → hostIdentifier.go 完整追溯该功能的实现细节并在实际运维中借助其返回的三类列表精准定位主机身份下发问题。赞分享后端企业应用运维【免费下载链接】bk-cmdb蓝鲸智云配置平台(BlueKing CMDB)项目地址https://gitcode.com/gh_mirrors/bk/bk-cmdb点击查看免费下载相关推荐蓝鲸配置平台 BK-CMDB 主机身份推送结果查询接口 find_host_identifier_push_result 实战指南蓝鲸配置平台 BK CMDB 主机身份推送结果查询接口 find_host_identifier_push_result 实战指南 导读 find_host_i后端企业应用运维bk-cmdb 获取主机身份推送任务结果接口 find_host_identifier_push_result 使用指南bk cmdb 获取主机身份推送任务结果接口 find_host_identifier_push_result 使用指南 导读 find_host_identi后端企业应用运维蓝鲸智云配置平台 bk-cmdb 主机身份查询接口 search_hostidentifier 实战指南蓝鲸智云配置平台 bk cmdb 主机身份查询接口 search_hostidentifier 实战指南 本指南以蓝鲸智云配置平台bk cmdb对外 API后端企业应用运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询