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

# Red Hat OpenShift 告警集成

> 通过 OpenShift 监控内置 Alertmanager 的 Webhook 接收器，使用 Flashduty 的 Prometheus 集成接收 OpenShift 集群告警，恢复时自动关闭告警。

OpenShift Container Platform 的监控栈自带 Alertmanager（`openshift-monitoring` 项目中的 `alertmanager-main`）。官方文档列出的接收器类型包括 PagerDuty、Webhook、Email、Slack 和 Microsoft Teams，并说明上游 Alertmanager 支持的配置项在 OpenShift 中同样支持。Webhook 接收器向你填写的地址发送 Alertmanager 格式的 JSON（`version` 为 `4`，每条告警带 `status`、`labels`、`annotations`、`startsAt`、`endsAt`、`generatorURL`、`fingerprint`）。Flashduty 的 [Prometheus 集成](/zh/on-call/integration/alert-integration/alert-sources/prometheus) 与该格式兼容，因此不需要单独的 OpenShift 集成：在 Flashduty 创建 Prometheus 集成，把它的推送地址配置为 OpenShift Alertmanager 的 Webhook 接收器。

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

  ***

  您可通过以下两种方式获取集成推送地址，任选其一即可。**集成类型都选择 Prometheus**，不是 Chronosphere。

  ### 使用专属集成

  1. 进入 Flashduty 控制台，选择 **协作空间**，打开一个协作空间
  2. 选择 **配置** → **集成数据** → **专属集成**，点击 **新增一个集成**
  3. 选择 **Prometheus**，点击 **保存**
  4. 打开生成的集成卡片，复制 **推送地址**，形如 `https://api.flashcat.cloud/event/push/alert/prometheus?integration_key=<集成密钥>`

  ### 使用共享集成

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

## 在 OpenShift 中配置

***

OpenShift 官方文档提供两种方式配置接收器，任选其一。操作需要 `cluster-admin` 权限。

<Steps>
  <Step title="方式一：在 Web 控制台配置">
    1. 在 **Administrator** 视角进入 **Administration** → **Cluster Settings** → **Configuration** → **Alertmanager**
    2. 在 **Receivers** 区域点击 **Create Receiver**
    3. 填写 **Receiver name**（例如 `flashduty`），**Receiver type** 选择 **Webhook**
    4. 在 Webhook 的地址栏填入上一步复制的完整推送地址（包含 `?integration_key=...`）
    5. 点击 **Show advanced configuration** 可以查看发送恢复告警（resolved）的选项，默认发送，保持不变
    6. 在 **Routing labels** 区域通过 **Add label** 添加路由标签和值，决定哪些告警发送到该接收器；按官方文档，触发告警的标签与所有选择器匹配时才会发送到该接收器；需要精确匹配标签值时在此添加
    7. 点击 **Create**
  </Step>

  <Step title="方式二：编辑 alertmanager-main Secret">
    1. 导出当前配置：

       ```bash theme={null}
       oc -n openshift-monitoring get secret alertmanager-main --template='{{ index .data "alertmanager.yaml" }}' | base64 --decode > alertmanager.yaml
       ```

    2. 在 `alertmanager.yaml` 中加入接收器和路由。下面的示例在默认配置的基础上增加 `flashduty` 接收器，并把 `severity` 为 `critical` 或 `warning` 的告警路由到它；`send_resolved` 在 Alertmanager 的 Webhook 配置中默认为 `true`，写出来是为了保证恢复通知不被关闭：

    ```yaml theme={null}
    receivers:
    - name: default
    - name: watchdog
    - name: flashduty
      webhook_configs:
      - url: https://api.flashcat.cloud/event/push/alert/prometheus?integration_key=<集成密钥>
        send_resolved: true
    route:
      routes:
      - matchers:
        - "alertname=Watchdog"
        repeat_interval: 2m
        receiver: watchdog
      - matchers:
        - "severity=~critical|warning"
        receiver: flashduty
    ```

    把 `<集成密钥>` 换成你的 Flashduty 集成密钥。新增路由放在 `Watchdog` 路由之后：Watchdog 是持续触发的心跳告警，OpenShift 文档说明它用于检查通知链路，不应作为故障告警进入 Flashduty。

    3. 用修改后的文件替换 Secret：

       ```bash theme={null}
       oc -n openshift-monitoring create secret generic alertmanager-main --from-file=alertmanager.yaml --dry-run=client -o=yaml | oc -n openshift-monitoring replace secret --filename=-
       ```
  </Step>

  <Step title="验证">
    触发一条集群告警（OpenShift 文档提到可参考 Red Hat 客户门户的 “Send test alerts to Alertmanager in OpenShift 4”），确认 Flashduty 收到活动告警；告警恢复后，确认 Flashduty 中的原告警关闭。
  </Step>
</Steps>

## 字段映射

***

| OpenShift Alertmanager 字段 | Flashduty |
| :- | :- |
| `alerts[].fingerprint` | Alert Key，同一个 `fingerprint` 的通知归为同一条告警 |
| `alerts[].status` | `firing` 按严重程度生成或更新告警；`resolved` 关闭告警 |
| `alerts[].labels.severity` | `critical` → Critical；`warn` 或 `warning` → Warning；`info` → Info；未带或无法识别 → Warning |
| `alerts[].labels.alertname` | 检查项 `check`，并用于标题 |
| `alerts[].labels.instance` | 标签 `resource` |
| 其余 `labels`、`annotations`、`groupLabels`、`commonLabels` | 每个键展开为一个标签，`annotations.description` 作为告警描述 |
| `startsAt`、`endsAt` | 标签 `starts_at`、`ends_at` |

一次通知可以包含多条告警，Flashduty 逐条处理（单次最多 100 条）。

## 恢复与去重

***

* Alertmanager 的 Webhook 接收器 `send_resolved` 默认为 `true`。恢复时发送 `status` 为 `resolved` 的通知，Flashduty 按相同的 `fingerprint` 关闭对应告警。
* 如果在 **Show advanced configuration** 中关闭了恢复通知（或在 YAML 中设置 `send_resolved: false`），Flashduty 不会收到恢复请求，请在协作空间中开启 [超时自动关闭](/zh/on-call/channel/create-edit)。
* Alertmanager 会按 `repeat_interval` 重复发送仍在触发的告警，Flashduty 按 `fingerprint` 去重，不会产生重复告警。

## 排查问题

***

* **Flashduty 返回 `Invalid parameters`**：推送地址不完整，缺少 `integration_key`，或集成类型不是 Prometheus
* **告警没有恢复**：确认接收器没有关闭 `send_resolved`
* **收不到任何告警**：确认路由的 `matchers` 或 **Routing labels** 与告警标签匹配，集群能访问 `api.flashcat.cloud`（集群使用 HTTP 代理时，参考 OpenShift 文档中 `proxy_from_environment` 的说明），可用 `oc exec alertmanager-main-0 -n openshift-monitoring -- amtool config routes show --alertmanager.url http://localhost:9093` 查看生效的路由
