Skip to main content
通过 Dead Man’s Snitch 的 Webhooks 集成,把 Snitch 的状态通知同步到 Flashduty On-call。定时任务在一个周期内没有签到(check-in)时,Dead Man’s Snitch 发送缺失(snitch.missing)通知,Flashduty 触发一条告警;任务再次签到时发送恢复(snitch.reporting)通知,Flashduty 关闭这条告警。 根据 Dead Man’s Snitch 价格页,集成(Integrations)从 Private Eye 计划开始提供;任务出错通知(Error Notices,即 snitch.errored)只在 Surveillance Van 计划中提供。

在 Flashduty On-call


您可通过以下两种方式获取集成推送地址,任选其一即可。

使用专属集成

  1. 进入 Flashduty 控制台,选择 协作空间,打开一个协作空间
  2. 选择 配置 → 集成数据 → 专属集成,点击 新增一个集成
  3. 选择 Dead Man’s Snitch,点击 保存
  4. 打开生成的集成卡片,复制 推送地址

使用共享集成

  1. 进入 Flashduty 控制台,选择 集成中心 → 告警事件
  2. 选择 Dead Man’s Snitch,填写集成名称
  3. 配置默认路由并选择协作空间;创建后可在 路由 中增加更多规则
  4. 点击 保存,复制生成的 推送地址

在 Dead Man’s Snitch 中配置


1

添加 Webhook 集成

  1. 登录 Dead Man’s Snitch,在顶部导航栏点击 Integrations
  2. 在可用集成(Available Integrations)列表中,点击 Webhooks 右侧的 ADD
  3. 把 Flashduty 集成的完整推送地址(包含 integration_key)粘贴到 Hook URL 字段,点击 Save
  4. 点击 SEND TEST。Dead Man’s Snitch 推送一条示例 snitch.reporting 通知,Flashduty 返回成功且不生成告警,Dead Man’s Snitch 提示 Webhook is working correctly.
2

按标签过滤(可选)

集成默认接收当前 Case 中所有 Snitch 的通知。如果只想把部分 Snitch 推送到 Flashduty:
  1. 在 Integrations 页面点击该 Webhook 旁边的 Manage Tags 图标
  2. 添加一个或多个标签,点击 Save
之后只有带有其中任一标签的 Snitch 会推送到 Flashduty。删除全部标签即恢复为推送所有 Snitch。
3

验证

  1. 新建一个周期为 hourly 的 Snitch,在浏览器中打开它的签到 URL(形如 https://nosnch.in/<token>)完成首次签到
  2. 在下一个完整周期内不再签到。周期结束后(整点后约 1 分钟)Dead Man’s Snitch 发送缺失通知,Flashduty 中出现一条活动告警
  3. 再次打开签到 URL,Dead Man’s Snitch 发送恢复通知,Flashduty 中的原告警恢复
如果您的计划支持 Error Notices,也可以用 curl -d s=1 https://nosnch.in/<token> 上报一次非 0 退出码,触发出错通知,再用 curl -d s=0 https://nosnch.in/<token> 正常签到。

推送内容


Dead Man’s Snitch 以 JSON 格式推送以下字段: 告警标题为 Snitch 名称加状态说明,例如 Nightly Backup is missing;名称为空时使用 Snitch。每条告警还带有标签 source=dead-mans-snitch。

Alert Key


token 是 Snitch 的签到凭据,任何持有它的人都可以向 Snitch 签到。因此 Flashduty 不在告警中展示 token,而是用 token 的 MD5 值作为 Alert Key:
  • 同一 Snitch 的缺失、出错和恢复通知落在同一条告警上
  • 修改 Snitch 的名称、备注或标签不会改变 Alert Key
token 在 Snitch 的整个生命周期中不变。上一条告警恢复后,同一 Snitch 再次缺失会生成一条新告警,不会重新打开已恢复的告警。删除后重新创建 Snitch 会得到新的 token,与旧告警不再关联。

状态和告警等级


Dead Man’s Snitch 的 Webhook 不携带严重程度,Flashduty 按下表映射: type 不区分大小写。缺少 data.snitch.token、type 为空或为其他值的请求会被拒绝。

常见问题


Dead Man’s Snitch 的 FAQ 说明邮件告警会在每个缺失周期重复发送,直到 Snitch 被暂停或再次签到。Webhook 集成实测中,周期为 1 分钟的 Snitch 连续缺失多个周期只推送了一次缺失通知。即使收到重复的缺失通知,其 Alert Key 与原告警相同,会合并到同一条活动告警中,不会生成新告警。
不会。暂停是人工操作,Flashduty 收到 snitch.paused 时不生成告警,也不关闭已有告警。Snitch 在下次签到时自动取消暂停并发送 snitch.reporting,届时原告警恢复;如果不再签到,请在 Flashduty 中手动关闭告警。
新建的 Snitch 首次签到也会发送 snitch.reporting。此时没有对应的活动告警,这条恢复通知不会产生任何告警。

排查问题


  • Flashduty 返回参数错误:确认推送地址完整(包含 integration_key),请求体中有 type 和 data.snitch.token 字段
  • 收不到任何通知:确认账户计划包含集成功能;如果 Webhook 设置了标签过滤,确认 Snitch 带有其中一个标签
  • 收不到出错通知:Error Notices 只在 Surveillance Van 计划中提供,并且任务需要在签到时上报退出码(s=$?),或使用 Dead Man’s Snitch 的 Field Agent
  • 告警没有恢复:Dead Man’s Snitch 不保证通知的到达顺序;如果恢复通知早于缺失通知到达,告警不会自动关闭,请在 Flashduty 中手动关闭