在 Flashduty On-call
- 进入 Flashduty 控制台,选择 集成中心 → 变更事件
- 选择 Nautobot,填写集成名称
- 如需把变更分派到指定协作空间,在集成的 路由 中按标签(例如
object_type、actor)配置规则 - 点击 保存,复制生成的 推送地址
在 Nautobot 中配置
1
创建 Webhook
进入 Extensibility → Webhooks,点击 Add:
- Name:任意名称,例如
flashduty - Content types:选择需要同步的对象类型。只选会影响线上环境的类型(例如
dcim | device、ipam | ip address),不要选变动频繁的类型 - Enabled:勾选
- Type create / Type update / Type delete:按需勾选,建议三项都选
- URL:填写 Flashduty 集成的完整推送地址
- HTTP method:
POST - HTTP content type:
application/json - Body template:留空。留空时 Nautobot 发送默认的 JSON 消息体,Flashduty 按这个格式解析
X-Hook-Signature 中附带签名,Flashduty 不校验该签名。2
验证
在 Nautobot 中修改一个已选类型的对象并保存,Flashduty 的变更列表中即可看到对应的变更。Nautobot 没有 Webhook 测试按钮;推送失败时,错误记录在 Nautobot 的 Celery worker 日志中。
一条变更是什么
变更标识(change_key)由三部分组成:
<model>:<对象 id>:<请求 id>,例如 location:a16ea2bb-…:db6c8eb8-…。
- Nautobot 的请求 id(
request_id)每个请求不同;同一个请求内对同一对象的多次修改合并为一次 Webhook - 同一对象在两次不同请求中的修改是两条变更
- 批量修改(一个请求改多个对象)中,每个对象各是一条变更,它们的
request_id标签相同,可以据此把同一批修改关联在一起
状态映射
事件不是以上三个值时(例如在 Body template 中自定义了内容),Flashduty 拒绝推送,见下方常见问题。
变更内容
标签可用于路由和在变更列表中筛选:
对象的字段内容和修改前后的快照(
snapshots)可能包含敏感信息,不会被记录。
常见问题
为什么没有收到变更?
为什么没有收到变更?
- 确认 Webhook 的 Enabled 已勾选,且 Content types 包含被修改的对象类型、Type create/update/delete 包含对应的操作
- 确认 Nautobot 的 Celery worker 正在运行;Webhook 是异步发送的
- 在 Celery worker 日志中查看推送的返回码
Flashduty 会拒绝哪些推送?
Flashduty 会拒绝哪些推送?
Flashduty 在以下情况拒绝推送(返回 400),仅在自定义了 Body template 时出现:
unsupported event:event缺失,或不是created、updated、deletedmodel is missing、request_id is missing、data.id is missing:消息体缺少对应字段invalid timestamp:timestamp不是2026-10-02 02:53:45+00:00或 ISO 8601 格式
Nautobot 重发或重试同一个 Webhook 会重复记录吗?
Nautobot 重发或重试同一个 Webhook 会重复记录吗?
不会。相同的变更、事件时间和状态会被识别为重复并丢弃。
为什么同一对象的修改变成了多条变更?
为什么同一对象的修改变成了多条变更?
每个请求是一条变更。通过界面保存和通过 API 保存是两个请求,所以是两条变更。同一个请求内对该对象的多次修改,Nautobot 只发送一次 Webhook。