跳转到主要内容
通过 Tailscale 的 Webhooks 功能,把需要管理员处理的 tailnet 事件同步到 Flashduty On-call:节点密钥即将过期或已过期、设备或用户等待审批、Tailnet Lock 下设备等待签名,以及子网路由或出口节点未开启 IP 转发。设备被批准、签名或删除时,Flashduty 关闭对应告警。 根据 Tailscale 文档,所有套餐(包括免费的 Personal 套餐)都可以使用 Webhooks。

在 Flashduty On-call

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

使用专属集成

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

使用共享集成

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

在 Tailscale 中配置

1

在 Tailscale 中添加 Webhook 端点

操作路径:Tailscale 管理控制台 › Settings › Webhooks › Add endpoint需要 tailnet 的 Owner、Admin、Network admin 或 IT admin 角色。
2

选择事件并保存

操作路径:Tailscale 管理控制台 › Settings › Webhooks › Add endpoint选择下列事件。两个 IP 转发事件组成 Device misconfiguration 分类,可以直接勾选该分类;其余事件在 Tailnet management 分类中:在 Tailscale 中拒绝一台待审批设备就是删除它,此时不会有 nodeApproved。订阅 nodeDeleted 后,这类审批告警会随设备删除而关闭。临时节点(ephemeral node)每次自动删除也会发送 nodeDeleted;没有对应告警时,Flashduty 忽略这些关闭事件。也可以勾选 Tailnet management 整个分类。分类中的其他事件(如 nodeCreated、policyUpdate、userRoleUpdated)是信息类事件,Flashduty 返回成功但不生成告警。再次点击 Add endpoint。Tailscale 弹出 Webhook secret,Flashduty 不使用它,可直接关闭。
3

开启超时自动关闭

操作路径:Flashduty 控制台 › 协作空间 › 配置 › 设置 › 高级配置节点密钥过期和 IP 转发配置错误没有恢复事件:续期密钥或开启 IP 转发后,Tailscale 不会再通知。故障关闭时,关联的告警一并关闭。详见 超时自动关闭。
4

发送测试事件并验证

操作路径:Tailscale 管理控制台 › Settings › Webhooks在 Webhooks 列表中找到该端点,点击右侧菜单,选择 Test endpoint → Send test event。Tailscale 发送 type 为 test 的事件。Flashduty 返回成功,不生成告警,所以测试按钮只能证明推送地址可以连通。要看到告警,需要一个真实事件:例如在 tailnet 启用设备审批后加入一台新设备,Tailscale 推送 nodeNeedsApproval,Flashduty 出现 Warning 告警;批准设备后(nodeApproved)告警恢复。几秒后回到 Flashduty,集成显示 最新事件时间,说明配置成功。

推送内容

Tailscale 每次推送一个 JSON 数组,一个数组可包含多个事件。Flashduty 对每个会生成告警的事件分别处理: 每条告警还带有标签 source=tailscale 和 check(取值 key_expiry、approval、signature、user_approval、exit_node_ip_forwarding、subnet_ip_forwarding)。message 为空时,标题为 Tailscale <事件类型>: <设备名或用户>。

Alert Key

Flashduty 用对象(设备的 nodeID 或用户的 user)和检查项(check)一起生成 Alert Key:
  • 同一台设备的 nodeNeedsApproval 和 nodeApproved 落在同一条告警上,批准后告警关闭
  • 同一台设备的 nodeKeyExpiringInOneDay 和 nodeKeyExpired 使用同一个 Alert Key。密钥过期时 Flashduty 会新建一条 Critical 告警,原 Warning 告警保持触发;nodeDeleted 会同时关闭这两条告警
  • 同一台设备的不同检查项(例如密钥过期和等待审批)各生成一条告警
  • Tailscale 投递失败后每小时重试一次,最多 24 小时;重试的事件合并到原告警,不会生成重复告警
修改设备名或 tailnet 名称不会改变 Alert Key。

状态和告警等级

会生成告警的设备事件缺少 data.nodeID,或用户事件缺少 data.user 时,整个请求会被拒绝。

常见问题

Tailscale 没有“密钥已续期”事件。请开启协作空间的超时自动关闭,或在 Flashduty 中手动关闭该告警。也可以在 Tailscale 中为不需要过期的服务器 关闭密钥过期。
不需要。Flashduty 通过推送地址中的 integration_key 识别集成,不校验 Tailscale-Webhook-Signature 签名。请像保管密钥一样保管推送地址。

排查问题

  • Flashduty 返回参数错误:确认 Destination 为 None,推送地址完整(包含 integration_key)
  • 测试事件成功但没有告警:test 事件不生成告警;请确认端点订阅了上表中的事件
  • 设备批准后告警没有关闭:确认端点订阅了 nodeApproved