> ## 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.

# Atlassian Statuspage 告警集成

> 通过 Webhook 订阅任意 Atlassian Statuspage 状态页，把组件故障和事件（Incident）同步到 Flashduty On-call。

通过 Atlassian Statuspage 的订阅者 Webhook，把上游服务状态页的变化同步到 Flashduty On-call。GitHub、Atlassian 等大量服务的公开状态页都托管在 Statuspage 上：订阅后，组件（Component）进入故障状态或状态页发布事件（Incident）时触发一条 Flashduty 告警，组件恢复为 `operational` 或事件变为 `resolved` 时这条告警自动恢复。

订阅者不需要 Statuspage 账号，也不需要付费。只有状态页的所有者开启了 Webhook 订阅，页面的订阅入口中才会出现 Webhook 选项。

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

  ***

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

  ### 使用专属集成

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

  ### 使用共享集成

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

## 在 Statuspage 状态页上订阅

***

<Steps>
  <Step title="打开订阅入口">
    打开要订阅的状态页（例如 `https://www.githubstatus.com`），点击页面上的 **Subscribe to updates**（订阅更新），在弹出的订阅方式中选择 Webhook 图标。

    如果没有 Webhook 选项，说明状态页所有者没有开启 Webhook 订阅，无法通过本集成接入这个状态页。
  </Step>

  <Step title="填写推送地址">
    1. **Webhook URL**：粘贴 Flashduty 集成的完整推送地址（包含 `integration_key`）
    2. **Email address**：填写一个团队邮箱。推送地址返回错误时，Statuspage 会发邮件到这个地址
    3. 点击 **Subscribe** 完成订阅。如果收到确认邮件，按邮件提示完成确认

    同一个集成可以订阅多个状态页。不同状态页的告警由页面 ID 区分，不会互相合并或关闭。也可以为每个上游服务单独建一个集成，方便按集成设置路由。
  </Step>

  <Step title="（可选）订阅自己团队的状态页">
    如果状态页由您的团队用 Statuspage 维护，需要先在 Statuspage 管理后台进入 **Subscribers → Options → Settings**，在 **Delivery types** 中勾选 **Webhook** 并保存，状态页的订阅入口中才会出现 Webhook 选项。Free 套餐也可以开启。之后按上一步订阅即可；还没有激活（Activate）的状态页，团队成员登录后同样可以订阅，适合先用来验证。
  </Step>

  <Step title="验证">
    Statuspage 没有发送测试通知的按钮，订阅后要等状态页出现下一次组件状态变化或事件更新，Flashduty 中才会出现告警。

    如果您的团队维护着一个 Statuspage 状态页，可以用它验证：把一个组件的状态改为 **Major outage**，Flashduty 中出现一条 Critical 告警；再改回 **Operational**，这条告警恢复。在 Statuspage 中创建事件时，至少要勾选一个受影响的组件，Statuspage 才会发送通知。
  </Step>
</Steps>

## 推送内容

***

Statuspage 在组件状态变化和事件每次更新时推送一次 JSON，分为两类：

**组件状态变化**

| 字段 | 说明 | 在 Flashduty 中的用途 |
| :- | :- | :- |
| `page.id` | 状态页 ID | Alert Key，标签 `page_id` |
| `page.status_description` | 状态页整体状态，例如 `Partial System Outage` | 告警描述，标签 `page_status` |
| `component.id`（或 `component_update.component_id`） | 组件 ID | Alert Key，标签 `component_id` |
| `component.name` | 组件名称 | 告警标题，标签 `component` |
| `component_update.new_status` | 组件的新状态 | 告警等级和状态，标签 `component_status` |
| `component_update.old_status` | 组件的原状态 | 告警描述，标签 `component_old_status` |

告警标题形如 `API Requests: major outage`。

**事件更新**

| 字段 | 说明 | 在 Flashduty 中的用途 |
| :- | :- | :- |
| `page.id` | 状态页 ID | Alert Key，标签 `page_id` |
| `incident.id` | 事件 ID | Alert Key，标签 `incident_id` |
| `incident.name` | 事件名称 | 告警标题 |
| `incident.status` | 事件状态 | 告警状态，标签 `incident_status` |
| `incident.impact` | 事件影响程度 | 告警等级，标签 `impact` |
| `incident.shortlink` | 事件详情短链接 | 标签 `incident_url` |
| `incident.incident_updates` | 事件的全部更新记录 | 最新一条更新的正文作为告警描述，超过 8 KB 时截断 |

每条告警还带有标签 `source=statuspage`。推送中的退订链接（`meta.unsubscribe`）含有订阅凭据，Flashduty 不会把它写入告警。

## Alert Key

***

Flashduty 按推送类型分别生成 Alert Key：

* 组件：状态页 ID + 组件 ID。同一组件从故障到恢复的每次状态变化落在同一条告警上
* 事件：状态页 ID + 事件 ID。同一事件从 `investigating` 到 `resolved` 的每次更新落在同一条告警上

组件和事件的告警互不影响：一次上游故障通常会同时产生事件告警和组件告警，可以用协作空间的[告警聚合](/zh/on-call/channel/noise-reduction)把它们合并到同一个故障。

修改组件名称、事件名称或影响程度不会改变 Alert Key。等级升高时（例如事件的影响程度从 `none` 改为 `critical`），Flashduty 会新建一条更高等级的告警，原告警保持触发；恢复推送会同时关闭这两条告警。上一条告警恢复后，同一组件再次故障会生成一条新告警。

## 状态和告警等级

***

**组件状态**

| Statuspage `new_status` | Flashduty 状态或等级 |
| :- | :- |
| `major_outage` | Critical |
| `partial_outage` | Warning |
| `degraded_performance` | Info |
| `operational` | 恢复 |
| `under_maintenance` | 忽略，不生成告警 |
| 空值或其他值 | Warning |

**事件**

事件的告警等级取自影响程度（`impact`），告警状态取自事件状态（`status`）：

| Statuspage `impact` | Flashduty 告警等级 |
| :- | :- |
| `critical` | Critical |
| `major` | Warning |
| `minor`、`none` | Info |
| 空值或其他值 | Warning |

| Statuspage `status` | Flashduty 状态 |
| :- | :- |
| `investigating`、`identified`、`monitoring` | 触发或更新告警 |
| `resolved`、`postmortem` | 恢复 |

计划维护（状态为 `scheduled`、`in_progress`、`verifying`、`completed`，或影响程度为 `maintenance`）属于计划内变更，Flashduty 返回成功但不生成告警。

## 常见问题

***

<AccordionGroup>
  <Accordion title="事件处于 monitoring 状态时告警会恢复吗？">
    不会。`monitoring` 表示修复已上线、仍在观察，告警保持触发，直到状态页把事件标为 `resolved`。
  </Accordion>

  <Accordion title="组件从故障直接进入维护，告警为什么没有恢复？">
    `under_maintenance` 会被忽略，不作为恢复信号。组件维护结束、恢复为 `operational` 时，告警才会恢复；也可以在 Flashduty 中手动关闭。
  </Accordion>

  <Accordion title="如何停止接收某个状态页的推送？">
    Statuspage 的退订链接只出现在推送内容中，Flashduty 不保存它。您可以删除对应的 Flashduty 集成，或联系状态页的维护方移除订阅；推送失败时 Statuspage 会发邮件到订阅时填写的邮箱。
  </Accordion>
</AccordionGroup>

## 排查问题

***

* **状态页上没有 Webhook 订阅选项**：状态页所有者没有开启 Webhook 订阅，无法通过本集成订阅
* **Flashduty 返回参数错误**：确认推送地址完整（包含 `integration_key`）；推送内容缺少 `page.id`、组件 ID 或事件 ID 时会被拒绝
* **Statuspage 发邮件提示推送失败**：Statuspage 要求 30 秒内返回 2xx 状态码，请确认集成没有被删除、推送地址没有被修改
* **同一组件的告警没有恢复**：确认组件已恢复为 `operational`；维护状态不会关闭告警
