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

# PagerDuty集成

Flashduty 实现了 PagerDuty Events API，输入和响应完全兼容。因此您可以通过 PagerDuty 协议推送告警事件到 Flashduty On-call，实现告警事件自动化降噪处理。

同样的，对于已经支持推送事件到 PagerDuty 的告警系统（如 ElastAlert），你仅需要修改目的推送地址，即可利用 PagerDuty 协议推送事件到 Flashduty 。

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

  ***

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

  ### 使用专属集成

  当您不需要将告警事件路由到不同的协作空间，优先选择此方式，更简单。

  <AccordionGroup>
    <Accordion title="展开">
      1. 进入 Flashduty 控制台，选择 **协作空间**，进入某个空间的详情页面
      2. 选择 **集成数据** tab，点击 **添加一个集成**，进入添加集成页面
      3. 选择 **PagerDuty** 集成，点击 **保存**，生成卡片。
      4. 点击生成的卡片，可以查看到 **推送地址**，复制备用，完成。
    </Accordion>
  </AccordionGroup>

  ### 使用共享集成

  当您需要根据告警事件的 Payload 信息，将告警路由到不同的协作空间，优先选择此方式。

  <AccordionGroup>
    <Accordion title="展开">
      1. 进入 Flashduty 控制台，选择 **集成中心=>告警事件**，进入集成选择页面。
      2. 选择 **PagerDuty** 集成：
         * **集成名称**：为当前集成定义一个名称。
      3. 配置默认路由，并选择对应的协作空间（集成创建后可以前往 `路由` 进行更多路由规则的配置）。
      4. 点击 **保存** 后，复制当前页面的新生成的 **推送地址** 备用。
      5. 完成。
    </Accordion>
  </AccordionGroup>
</div>

## 在 PagerDuty

***

### 请求地址

```
{api_host}/event/push/alert/pagerduty
```

该地址同时支持 PagerDuty V1 和 V2 Events API。**您必须修改 PagerDuty 地址为该地址。**

### Pagerduty V2 Events

<div className="md-block">
  #### 参考文档：

  [PagerDuty V2 Events](https://developer.pagerduty.com/api-reference/368ae3d938c9e-send-an-event-to-pager-duty)

  #### 鉴权方式：

  两种方式任选其一：

  * 方式 1：在 QueryString 中包含参数 integration\_key
  * 方式 2：将 integration\_key 作为 routing\_key 参数传入 Payload
</div>

### Pagerduty V1 Events

<div className="md-block">
  #### 参考文档：

  [PagerDuty V1 Events](https://developer.pagerduty.com/api-reference/f0037990796c8-send-an-event-to-pager-duty)

  #### 鉴权方式：

  两种方式任选其一：

  * 方式 1：在 QueryString 中包含参数 integration\_key
  * 方式 2：将 integration\_key 作为 service\_key 参数传入 Payload
</div>

### 配置示例

以 [ElastAlert2](https://github.com/jertel/elastalert2) 为例:

<div className="md-block">
  1. 步骤 1：获得推送地址

  在当前页面填写集成名称并保存，重新打开集成详情，复制推送地址，如：

  ```
  {api_host}/event/push/alert/pagerduty?integration_key=xxx
  ```

  2. 步骤 2：修改推送地址

  修改已经部署好的 ElastAlert 实例对应源码，[查看 diff ](https://github.com/jertel/elastalert2/commit/e815a62a6b1eecef6e1fef13afd99d905b67fc34)：

  <img alt="drawing" width="600" src="https://download.flashcat.cloud/pagerduty-replace-endpoint.png" />

  3. 步骤 3：上报告警事件

  遵循 [ElastAlert PagerDuty 推送配置文档](https://elastalert2.readthedocs.io/en/latest/ruletypes.html#pagerduty) 步骤，配置告警：

  ```
  name: "b"
  type: "frequency"
  index: "pgy_audit*"
  is_enabled: true
  num_events: 1
  realert:
    minutes: 1
  terms_size: 50
  scan_entire_timeframe: true
  timeframe:
    minutes: 60
  timestamp_field: "created_at"
  timestamp_type: "unix_ms"
  use_strftime_index: false
  alert_subject: "Test {0} 123 aa☃ {1}"
  alert_subject_args:
    - "account_id"
    - "operation"
  alert_text: "Test {0}  123 bb☃ {1}"
  alert_text_args:
    - "request_id"
    - "operation_name"
  filter:
    - query:
        query_string:
          query: "created_at:*"

  # ------- Flashduty ----------------
  alert: pagerduty
  pagerduty_service_key: xxx
  pagerduty_client_name: wahaha
  pagerduty_api_version: v2
  pagerduty_v2_payload_class: ping failure
  pagerduty_v2_payload_component: mysql
  pagerduty_v2_payload_group: app-stack
  pagerduty_v2_payload_severity: error
  pagerduty_v2_payload_source: mysql.host.name
  # ------- Flashduty ----------------
  ```

  4. 步骤 4：重启 ElastAlert，等待告警触发
</div>
