Skip to main content
版本要求:此功能需要 On-call 标准版及以上订阅。了解更多
通过 NetBox 的事件规则(Event Rule)和 Webhook,将 NetBox 中对象(站点、机柜、设备、IP 前缀、VLAN 等)的新增、修改、删除同步到 Flashduty On-call。一次对某个对象的 Web 界面或 API 操作对应一条 Flashduty 变更,例如修改设备状态、分配 IP 前缀、删除一个站点。 NetBox 推送的是已经保存的变更,因此每条变更都直接记录为 Done。

在 Flashduty On-call


  1. 进入 Flashduty 控制台,选择 集成中心 → 变更事件
  2. 选择 NetBox,填写集成名称
  3. 如需把变更分派到指定协作空间,在集成的 路由 中按标签(例如 object_type、actor)配置规则
  4. 点击 保存,复制生成的 推送地址

在 NetBox 中配置


本文基于 NetBox 4.7 的默认 Webhook 请求体。
1

创建 Webhook

  1. 进入 Operations → Integrations → Webhooks,点击 Add
  2. Name:填写便于识别的名称,例如 Flashduty
  3. URL:粘贴 Flashduty 集成的完整推送地址
  4. HTTP method 选择 POST,HTTP content type 保持 application/json
  5. Body template 留空,使用 NetBox 默认请求体;Additional headers 无需填写
  6. Secret 无需填写,Flashduty 通过推送地址中的 integration_key 鉴权
2

创建事件规则

  1. 进入 Operations → Integrations → Event Rules,点击 Add
  2. Name:填写便于识别的名称,例如 Flashduty
  3. Object types:选择需要同步的对象类型,例如 DCIM > site、DCIM > device、IPAM > prefix
  4. Event types:勾选 Object created、Object updated、Object deleted
  5. 如只同步部分对象,在 Conditions 中添加 JSON 条件,例如 {"and": [{"attr": "status.value", "value": "active"}]}
  6. Action type 选择 Webhook,Webhook 选择上一步创建的 Webhook,保存
NetBox 没有测试推送按钮。保存后在已选对象类型下新增或修改一个对象,即可在 Flashduty 变更列表中看到记录。NetBox 通过后台任务(RQ worker)发送 Webhook,需要 rqworker 进程在运行。

一条变更是什么


批量操作(批量导入、批量编辑、批量删除)在一个请求里改动多个对象,每个对象各生成一条变更,它们的 request_id 标签相同,可据此在变更列表中找到同一次操作改动的全部对象。

状态映射


以下推送返回成功但不生成变更:
  • job_started、job_ended:后台任务(脚本、数据源同步等)的开始和结束,它们不是配置变更。脚本在运行中创建、修改、删除的对象仍会作为 created、updated、deleted 推送
NetBox 的 Webhook 只在变更保存后推送,没有”失败”或”取消”状态。

变更内容


标签可用于路由和在变更列表中筛选:

常见问题


  • 确认事件规则已启用,且 Object types 包含该对象类型、Event types 勾选了对应事件,没有被 Conditions 排除
  • 确认 NetBox 的 rqworker 进程在运行;在 NetBox 的 System → Background Tasks 中可以看到失败的 Webhook 任务,并可重新入队
  • 事件规则的 Webhook 必须使用默认请求体;填写了自定义 Body template 会改变推送格式,导致推送失败或字段缺失
不会。NetBox 重新入队的失败任务发送的内容与原推送完全相同(包括时间戳),Flashduty 识别为重复推送,只记录一次。
NetBox 的失败任务中会看到响应内容:
  • unknown event "<值>":event 不是 created、updated、deleted 或 job_*,请确认没有自定义请求体
  • data.id is missing、request.id is missing、object_type is missing:请求体缺少必要字段,请清空 Body template
  • invalid timestamp "<值>":timestamp 不是 ISO 8601 格式
NetBox 的 Webhook 推送中,对象地址只有相对路径(例如 /dcim/sites/1/),不包含 NetBox 的域名,Flashduty 无法拼出完整链接。可以通过标题中的对象类型和名称,或 object_id 标签在 NetBox 中定位对象。
是。删除已经在 NetBox 中生效,因此记录为 Done,event 标签为 deleted。