> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flashduty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Oh Dear 告警集成

> 通过团队 Webhook 将 Oh Dear 的可用性、性能、证书、DNS、定时任务等监控事件同步到 Flashduty On-call。

通过 Oh Dear 团队设置中的 Webhook，将网站可用性（Uptime）、性能、断链、混合内容、证书、DNS、域名、站点地图、Lighthouse、AI 检查、应用健康和定时任务事件同步到 Flashduty On-call。每个检查项对应一条 Flashduty 告警：检查失败时触发，Oh Dear 发出对应的恢复事件时恢复。

<div className="hide">
  ## 在 Flashduty On-call

  ***

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

  ### 使用专属集成

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

  ### 使用共享集成

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

## 在 Oh Dear 中配置

***

Oh Dear 的 Webhook 按团队配置，团队内所有监控的事件都会推送到同一个地址。

<Steps>
  <Step title="填写 Webhook 地址">
    1. 登录 Oh Dear，进入团队设置的 **Notifications**（通知）页面
    2. 在 **Global** 标签页点击 **Add configuration**，渠道选择 **Webhooks**
    3. 将 Flashduty 集成的完整推送地址粘贴到 **Url**，地址中需包含 `integration_key`。全局配置对团队内所有监控生效
    4. Oh Dear 会用团队的 Webhook signing secret（在同一对话框中显示）对每次请求签名（`OhDear-Signature` 请求头），Flashduty 通过地址中的 `integration_key` 认证，不校验签名
  </Step>

  <Step title="保存并验证">
    1. 点击 **Save**。在该配置的 **...** 菜单中选择 **Send test notification**：Oh Dear 会发送 `{"type":"test","uuid":"..."}`，Flashduty 返回 200 并创建一条独立的 Info 告警，标题为 “Oh Dear test notification”。该告警没有恢复推送，请手动关闭。**Show webhook log** 可查看每次投递及响应状态
    2. 在 Oh Dear 中暂停一个测试监控，或将其地址改为无法访问的地址，等待可用性检查失败，确认 Flashduty 收到 Critical 告警
    3. 恢复监控地址，确认原告警自动恢复

    Oh Dear 只把 HTTP 200 视为投递成功，其他状态码（包括 301、302 跳转）都会重发，最多共发送 3 次。Flashduty 对已识别和会被忽略的事件都返回 200。
  </Step>
</Steps>

## 事件和告警的对应关系

***

Oh Dear 会推送所有事件，无法在 Oh Dear 侧筛选事件类型。Flashduty 的处理方式如下：

| 检查项 | 触发事件 | 恢复事件 |
| :- | :- | :- |
| 可用性 | `httpUptimeCheckFailed`、`tcpUptimeCheckFailed`、`pingUptimeCheckFailed` | 对应的 `...UptimeCheckRecovered` |
| 性能阈值 | `performanceThresholdExceeded` | `performanceThresholdRecovered` |
| 断链 | `brokenLinksFound` | `brokenLinksFixed` |
| 混合内容 | `mixedContentFound` | `mixedContentFixed` |
| 证书健康 | `certificateUnhealthy` | `certificateFixed` |
| DNS | `dnsIssuesFound` | `dnsIssuesFixed` |
| 应用健康 | `applicationHealthProblemDetected` | `applicationHealthProblemFixed` |
| 站点地图 | `sitemapIssuesFound` | `sitemapIssuesFixed` |
| DNS 黑名单 | `dnsBlocklistIssuesFound` | `dnsBlocklistIssuesFixed` |
| 域名 | `domainIssuesFound` | `domainIssuesFixed` |
| Lighthouse | `lighthouseIssuesDetected` | `lighthouseIssuesFixed` |
| AI 检查 | `aiCheckFailed` | `aiCheckSucceeded` |

以下事件没有对应的恢复事件，每次推送都会创建独立的告警，请开启协作空间的[超时自动关闭](/zh/on-call/channel/create-edit)（建议设置为 24 小时），也可以处理后手动关闭：`certificateExpiresSoon`（证书即将过期）、`certificateHasChanged`（证书变更）、`dnsRecordsChanged`（DNS 记录变更）、`performanceDeltaExceeded`（性能变化超过设定比例）、`cronFailed`（定时任务上报失败）、`cronNotExecutedOnTime`（定时任务未按时上报）、`applicationHealthClientError`、`applicationHealthResultsTooOld`。

新增监控（`monitorAddedNotification`）和 Oh Dear 以后新增的事件类型不会创建告警，Flashduty 直接返回成功。

<Warning>
  应用健康检查的 `applicationHealthProblemFixed` 按单个健康项推送：应用同时有多个健康项异常时，其中一项恢复就会恢复整个应用健康告警。
</Warning>

## Alert Key

***

* 有恢复事件的检查项：Alert Key 由 `run.check_id`（Oh Dear 中该监控下某一类检查的 ID）计算，同一检查项的触发和恢复事件使用同一个 Alert Key，不同监控或同一监控的不同检查项互不合并
* 没有恢复事件的事件：Alert Key 由事件的 `uuid` 计算。Oh Dear 重试同一事件时 `uuid` 不变，因此重试不会产生重复告警，新事件则各自创建告警

监控名称、地址、时间、运行 ID 等字段变化不会改变 Alert Key。缺少 `run.check_id`（有恢复事件的检查项）或 `uuid`（无恢复事件的事件）的推送会被拒绝。

## 状态和告警等级

***

Oh Dear 事件不携带等级，Flashduty 按事件确定：

| 事件 | 状态 | Flashduty 等级 |
| :- | :- | :- |
| `...UptimeCheckFailed`（网站无法访问） | 触发 | Critical |
| 其他触发事件和无恢复事件的事件 | 触发 | Warning |
| 所有恢复事件 | 恢复 | - |

可用性的 `...UptimeCheckRecovered` 事件在 `run.result` 为 `warning` 时表示部分连通（主检查节点失败、备用节点成功，网站仍视为在线），Flashduty 同样按恢复处理。

## 标签

***

| 标签 | 来源 |
| :- | :- |
| `event` | 事件名（去掉 `Notification` 后缀和可用性事件的 `http`/`tcp`/`ping` 前缀） |
| `monitor_type` | 可用性监控的类型：`http`、`tcp` 或 `ping` |
| `monitor` / `monitor_id` | 监控的标签和 ID |
| `resource` | 监控的地址 |
| `check_id` | 触发事件的检查项 ID |
| `task` | 定时任务名称（仅定时任务上报失败事件） |
| `url` | Oh Dear 中对应报告的链接 |

## 排查问题

***

* **收不到告警**：确认地址中的 `integration_key` 正确，并在 Oh Dear 的 Webhook 日志中查看该请求的响应状态
* **告警没有恢复**：确认 Oh Dear 已发出对应的恢复事件；证书即将过期、DNS 记录变更、定时任务等事件没有恢复事件，需要手动关闭
* **测试**：Oh Dear 的 Send test notification 只投递测试请求，Flashduty 返回 200 并创建一条需手动关闭的独立 Info 告警；要验证告警链路，请按上文的步骤用真实的检查失败

更多字段含义请参阅 [Oh Dear Webhooks](https://ohdear.app/docs/integrations/webhooks)。
