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

# Centreon 告警集成

> 通过 Centreon 的 PagerDuty Events 流连接器把主机和服务告警推送到 Flashduty 的 PagerDuty 集成，恢复状态自动关闭告警。

Centreon 自带 PagerDuty Events 流连接器（`pagerduty-events-apiv2.lua`），它把主机和服务的状态变化以 PagerDuty Events API v2 格式的 JSON 发送到 `http_server_url` 参数指定的地址，默认是 `https://events.pagerduty.com/v2/enqueue`。Flashduty 的 [PagerDuty 集成](/zh/on-call/integration/alert-integration/alert-sources/pagerduty) 与该格式兼容，因此不需要单独的 Centreon 集成：在 Flashduty 创建 PagerDuty 集成，把它的推送地址填进连接器的 `http_server_url` 即可。

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

  ***

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

  ### 使用专属集成

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

  ### 使用共享集成

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

## 在 Centreon 中配置

***

### 步骤 1：安装流连接器

在要发送数据的服务器（中央服务器、远程服务器或轮询器）上，以 root 执行：

```bash theme={null}
# Alma / RHEL / Oracle Linux 8 和 9
dnf install centreon-stream-connector-pagerduty

# Debian 12
apt install centreon-stream-connector-pagerduty
```

### 步骤 2：配置 Broker 输出

1. 在中央服务器上进入 **Configuration** → **Pollers** → **Broker configuration**，点击 `central-broker-master`（如果由远程服务器或轮询器发送，选择对应的 Broker 配置）
2. 在 **Output** 标签页选择 **Generic - Stream connector**，点击 **Add**，新增一个输出
3. 按下表填写：

| 字段 | 值 |
| :- | :- |
| Name | `Flashduty` |
| Path | `/usr/share/centreon-broker/lua/pagerduty-events-apiv2.lua` |
| Filter category | `Neb` |

4. 点击 **Filter category** 表格下方的 **+Add a new entry** 添加以下参数：

| 类型 | 名称 | 值 |
| :- | :- | :- |
| string | `pdy_routing_key` | 上一步推送地址中的 `integration_key` 值（必填参数） |
| string | `http_server_url` | 完整的推送地址（包含 `integration_key`） |
| string | `pdy_centreon_url` | 你的 Centreon 服务器地址（可选，用于告警中的链接） |

5. 部署配置，并在所有轮询器上重启 `centengine`：

```bash theme={null}
systemctl restart centengine
```

Flashduty 的 PagerDuty 集成既接受推送地址中的 `integration_key` 参数，也接受请求体里的 `routing_key`；上面两个参数都填，连接器发出的请求就可以通过验证。保持 `max_buffer_size` 为默认值，连接器每次请求只发送一个事件。

### 步骤 3：验证

按 Centreon 文档，可以在连接器所在服务器上用 curl 发送一条测试事件，`routing_key` 使用集成密钥，请求地址换成 Flashduty 推送地址：

```bash theme={null}
curl -X POST -H 'content-type: application/json' '<推送地址>' -d '{"dedup_key":"test_H","payload":{"component":"test","group":"hg_1","summary":"test: DOWN","class":"host","severity":"warning","source":"test"},"event_action":"trigger","client":"Centreon Stream Connector","routing_key":"<集成密钥>"}'
```

Flashduty 应返回 HTTP 202，并出现一条告警；把 `event_action` 改为 `resolve` 再发一次，告警恢复。

## 字段映射

***

Centreon 连接器发出的字段（见连接器源码）与 Flashduty 的对应关系：

| Centreon 连接器字段 | Flashduty |
| :- | :- |
| `dedup_key` | Alert Key：服务为 `<主机 ID>_<服务 ID>`，主机为 `<主机 ID>_H` |
| `event_action` | 状态为 OK 或 UP 时发送 `resolve`，关闭告警；其他状态发送 `trigger` |
| `payload.summary` | 告警标题：服务为 `<主机名>/<服务名>: <状态>`，主机为 `<主机名>: <状态>` |
| `payload.severity` | `critical`、`error` → Critical；`warning` → Warning；`info` → Info |
| `payload.source`、`component`、`group`、`class` | 标签 `source` 和 `resource`、`component`、`group`、`class`（`group` 是主机组，`class` 为 `host` 或 `service`） |
| `payload.custom_details` | 每个键展开为一个标签，包含 `Output`（检查输出）、`Hostgroups`、`Servicegroups` 等 |
| `links`、`client`、`client_url` | 标签 `Link to Centreon host summary`、`client`、`client_url` |

连接器按 Centreon 状态设置的等级：

| Centreon 状态 | 连接器 `severity` | Flashduty |
| :- | :- | :- |
| 服务 OK、主机 UP | `info`，同时发送 `resolve` | 恢复 |
| 服务 WARNING、主机 DOWN | `warning` | Warning |
| 服务 CRITICAL、主机 UNREACHABLE | `critical` | Critical |
| 服务 UNKNOWN | `error` | Critical |

## 恢复与去重

***

* 同一个主机或服务始终使用同一个 Alert Key，状态从 WARNING 变为 CRITICAL 时更新同一条告警，回到 OK 或 UP 时恢复
* 连接器库的默认参数只发送 HARD 状态，并且不发送已确认（acknowledged）或处于停机维护（downtime）的对象；如需改变，在连接器参数中调整 `hard_only`、`acknowledged`、`in_downtime`
* 只推送部分对象时，使用连接器的过滤参数，例如 `accepted_hostgroups`、`accepted_servicegroups`、`accepted_pollers`

## 排查问题

***

* **Flashduty 没有收到告警**：检查 `/var/log/centreon-broker/pagerduty-events.log`（默认日志文件，`log_level` 最高为 3）；确认 `http_server_url` 是完整的推送地址，`pdy_routing_key` 已填写
* **连接器日志显示 POST 失败**：连接器只把 HTTP 202 视为成功，Flashduty 对 PagerDuty Events API v2 请求返回 202；其他状态码请检查 `integration_key` 是否正确
* **告警没有恢复**：确认恢复状态（服务 OK、主机 UP）没有被过滤参数（例如 `service_status`、`host_status`）排除
* **收不到已确认对象的告警**：默认 `acknowledged` 为 0，已确认的问题不再推送

更多说明请参阅 Centreon 文档 [PagerDuty Events](https://docs.centreon.com/docs/integrations/event-management/sc-pagerduty-events/) 和连接器源码 [pagerduty-events-apiv2.lua](https://github.com/centreon/centreon-stream-connector-scripts/blob/master/centreon-certified/pagerduty/pagerduty-events-apiv2.lua)。
