ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Falcon Plus HostGroup 主机批量更新 API 实战:PATCH 增量添加与移除(add/remove)

Falcon Plus HostGroup 主机批量更新 API 实战:PATCH 增量添加与移除(add/remove) 运维观测指标监控告警【免费下载链接】falcon-plusAn open-source and enterprise-level monitoring system.项目地址https://gitcode.com/gh_mirrors/fa/falcon-plus点击查看免费下载导读在 Open-FalconFalcon Plus监控系统中HostGroup主机组是组织主机、关联监控模板与策略的核心单元。本文讲解 HostGroup 提供的批量增量更新接口PATCH /api/v1/hostgroup/{hostgroup_id}/host通过一个action参数即可在保留组内既有主机的前提下批量添加或移除多台主机。读完本文你将掌握该接口的请求/响应格式、权限约束、参数语义、源码级实现原理以及它与全量覆盖式绑定接口的差异能够安全地在脚本与运维流程中调用它。接口概览项目值方法PATCH路径/api/v1/hostgroup/{hostgroup_id}/host认证需要有效 Session通过请求头Apitoken携带用途对指定主机组增量添加或移除一批主机不影响组内其他主机请求示例PATCH /api/v1/hostgroup/1/host该路由定义在 host_routes.gohostr.PATCH(/hostgroup/:host_group/host, PatchHostGroupHost)注意路径中的:host_group为 URL 路径参数主机组 ID与请求体 JSON 中可能出现的hostgroup_id字段无关——本接口通过路径传组 ID这一点与 POST 全量绑定接口通过请求体传hostgroup_id不同。权限要求文档明确列出两条前置条件均可在源码中得到印证Session 必须有效所有/api/v1下的路由都挂载了AuthSessionMidd鉴权中间件见 host_routes.go它从请求头Apitoken解析{name:...,sig:...}并校验会话有效性实现见 auth_middle.go 与 session.go。服务端之间调用还可使用config/api.json中的default_token直接放行若配置skip_auth: true则跳过鉴权。认证细节可参考 认证文档。非 Admin 只能操作自己创建的 HostGroup控制器在进入 add/remove 分支前执行权限校验见 hostgroup_controller.goif !user.IsAdmin() hostgroup.CreateUser ! user.Name { h.JSONR(c, expecstatus, You dont have permission.) return }IsAdmin()判定逻辑见 user.go当配置access_control: true时role为 1 或 2 视为管理员当access_control关闭时所有用户都被视为管理员。两个开关都在 config/api.json 中配置。请求与响应actionadd增量添加文档给出的添加请求体如下{ hosts: [ host01, host02 ], action: add }调用方式PATCH /api/v1/hostgroup/1/host其中1为示例主机组 ID请替换为真实 ID。成功响应HTTPStatus: 200{ message: [host01, host02] bind to hostgroup: test, [] have been exist }响应消息由三段组成其语义可从底层实现 bindHostToHostGroup 精确解读[host01, host02]本次真正完成绑定的主机列表新增的grp_host关联记录hostgroup: test目标主机组名注意是grp_name而非 ID[] have been exist本次请求中本来就已绑定在该组内的主机列表即去重跳过的部分。若本次没有重复主机该列表为空即文档示例中的[]。add 模式的源码行为for _, host : range hosts { ahost : f.Host{Hostname: host} var id int64 var ok bool if id, ok ahost.Existing(); !ok { // 主机在 host 表中不存在则自动创建仅写入 hostname if dt : tx.Save(ahost); dt.Error ! nil { ... tx.Rollback(); return } id ahost.ID } tGrpHost : f.GrpHost{GrpID: hostgroup.ID, HostID: id} if ok tGrpHost.Existing(); ok { existHosts append(existHosts, host) // 已存在则跳过 } else { bindHosts append(bindHosts, host) // 否则创建绑定 if dt : tx.Debug().Create(tGrpHost); dt.Error ! nil { ... tx.Rollback(); return } } } tx.Commit()关键点整个处理过程包裹在数据库事务tx : db.Falcon.Begin()中中途出错会Rollback保证不会出现绑了一半的脏数据。Host.Existing()按hostname查询host表见 host.go若主机尚不存在接口会自动在host表中创建该主机记录仅写入 hostnameip 等字段为空再完成绑定。GrpHost.Existing()按(grp_id, host_id)联合条件查询grp_host表见 grp_host.go已绑定的主机不会重复插入。请求与响应actionremove增量移除文档给出的移除请求体如下{ hosts: [ host01, host02 ], action: remove }成功响应HTTPStatus: 200{ message: [host01, host02] unbind to hostgroup: test }remove 模式的源码行为for _, host : range hosts { dhost : f.Host{Hostname: host} var id int64 var ok bool if id, ok dhost.Existing(); ok { unbindHosts append(unbindHosts, host) } else { log.Debugf(Host %s does not exists!, host) continue // 主机不存在直接跳过 } if dt : db.Falcon.Where(grp_id ? AND host_id ?, hostgroup.ID, id).Delete(f.GrpHost{}); dt.Error ! nil { ... } } tx.Commit()实现位于 unbindHostToHostGroup。关键点移除操作是删除grp_host关联记录并不删除host表中的主机本身也不影响其他主机组若请求中的主机在host表中不存在该主机被静默跳过仅输出 debug 日志不报错、不影响其他主机的移除响应message中的列表只包含实际找到并解绑的主机。参数说明与校验规则请求体由结构体APIPatchHostGroupHost定义见 hostgroup_controller.go参数类型必填取值说明actionstring是add/remove增量操作类型其他取值直接返回 400action must be add or removehostsstring 数组是主机名列表参与操作的主机名与host.hostname字段匹配注意不是 IPaction的取值校验在 PatchHostGroupHost 中action : inputs.Action if action ! add action ! remove { h.JSONR(c, badstatus, action must be add or remove) return }随后switch action分派到bindHostToHostGroupadd或unbindHostToHostGroupremove。与全量覆盖式绑定的对比Falcon Plus 还提供了另一条绑定接口POST /api/v1/hostgroup/host请求体携带hostgroup_id与hosts其行为是先删除该组全部grp_host记录再写入本次 hosts 列表见 BindHostToHostGroup即全量覆盖。而本文的PATCH接口只对本次传入的 hosts 做增量增删组内其他主机保持不变。对应关系场景推荐接口用一批主机整体重置主机组成员POST /api/v1/hostgroup/host全量覆盖在现有组成员基础上追加/剔除少量主机PATCH /api/v1/hostgroup/{id}/host增量本文底层数据表结构本接口操作两张核心表建表语句见 2_portal-db-schema.sqlhost主机表id自增主键hostname为唯一键其余字段ip、agent_version、plugin_version、maintain_begin、maintain_end等由 Agent 上报或 HBS 维护。grp_host主机组与主机的关联表仅含grp_id与host_id两列并分别对两列建了索引idx_grp_host_grp_id、idx_grp_host_host_id对应 Go 模型 GrpHost。完整调用示例curl以下为假设 API 地址http://127.0.0.1:8080、主机组 ID 为1时的可复制调用# 增量添加 host01、host02 到组 1 curl -X PATCH \ http://127.0.0.1:8080/api/v1/hostgroup/1/host \ -H Content-Type: application/json \ -H Apitoken: {name:root,sig:登录后获得的sig} \ -d {hosts:[host01,host02],action:add} # 从组 1 增量移除 host01 curl -X PATCH \ http://127.0.0.1:8080/api/v1/hostgroup/1/host \ -H Content-Type: application/json \ -H Apitoken: {name:root,sig:登录后获得的sig} \ -d {hosts:[host01],action:remove}Apitoken的获取方式见 认证文档若 API 配置了default_token见 config/api.json服务端场景可直接用该 token 作为sig。常见错误与排障action must be add or removeHTTP 400action拼写错误或传了其他值检查取值严格为add/remove。You dont have permission.HTTP 417当前用户既非 Admin也不是该主机组的创建者grp.create_user。可通过 Admin 角色或让创建者本人操作解决也可在 config/api.json 中评估关闭access_control所有用户视为管理员。主机组不存在HTTP 417路径中的host_group参数无法在grp表中查到检查组 ID 是否正确。hosts/action缺失HTTP 400结构体字段带binding:required缺失或类型不符会绑定失败。响应中[] have been exist这不是错误只是提示这些主机此前已绑定在该组本次跳过。总结PATCH /api/v1/hostgroup/{hostgroup_id}/host是 Falcon Plus 管理主机组成员的高效增量接口actionadd自动建机并去重绑定actionremove精准解绑且容忍不存在的名字全程事务保证一致性。结合 hostgroup_controller.go 的源码可清晰看到其校验、权限与事务实现配合官方接口文档 hostgroup.html 即可放心在自动化运维脚本中集成使用。赞分享运维观测指标监控告警【免费下载链接】falcon-plusAn open-source and enterprise-level monitoring system.项目地址https://gitcode.com/gh_mirrors/fa/falcon-plus点击查看免费下载相关推荐Open-Falcon falcon-plus HostGroup 添加主机 API 全解析POST /api/v1/hostgroup/host 使用指南与源码原理Open Falcon falcon plus HostGroup 添加主机 API 全解析 POST /api/v1/hostgroup/host 使用指南运维观测指标监控告警Open-Falcon falcon-plus API 实战向 Team 批量添加用户POST /api/v1/team/userOpen Falcon falcon plus API 实战向 Team 批量添加用户POST /api/v1/team/user 本文是 falcon运维观测指标监控告警Open-Falcon falcon-plus 实战通过 PUT /api/v1/hostgroup/host 将主机从主机组解绑Open Falcon falcon plus 实战通过 PUT /api/v1/hostgroup/host 将主机从主机组解绑 本篇技术指南聚焦 falc运维观测指标监控告警上一篇终极指南用Python MarkItDown实现多格式文档智能转换的完整方案下一篇Qucs-S元件库详解如何扩展和使用自定义元件库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表