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

# 动态分派

> 实现告警基于标签动态进行分派，与您自研系统打通

## 适配场景

<Note>
  告警责任人在源监控系统中维护且频繁调整，希望及时同步到 Flashduty On-call。
</Note>

<AccordionGroup>
  <Accordion title="场景一：大数据任务系统">
    客户 A 自研大数据任务系统，内部人员可以在此平台新建各类数据批处理任务，每个任务可以设定第一责任人和第二责任人。当批处理任务处理失败时，系统会优先告警通知第一责任人，如果超过 30 分钟此告警还没有恢复，则升级为第二责任人。
  </Accordion>

  <Accordion title="场景二：Zabbix 主机监控">
    客户 B 使用 Zabbix 做主机监控，并且针对每一条主机设定了一个负责人 tag。客户希望该主机告警时，能够根据此 tag 通知到对应的责任人。
  </Accordion>

  <Accordion title="场景三：自研监控系统">
    客户 C 有一套自研监控系统，设定了很多告警策略，每一条策略都设定通知到某个微信群。该客户决定将事件响应迁移至 Flashduty，但希望仍然保留源监控系统中策略到微信群的关系，并且能够将告警依赖此关系动态通知到微信群。
  </Accordion>
</AccordionGroup>

## 实现方式

添加特定标签或 Query 参数，用于覆盖 Flashduty On-call 中的分派对象，实现动态分派。

<Tabs>
  <Tab title="替换分派人员">
    | 配置项      | 说明                                                                                                       |
    | -------- | -------------------------------------------------------------------------------------------------------- |
    | **参数名**  | 需要满足正则：`^layer_person_reset_(\d)_emails$`，环节数字从 0 开始。例如 `layer_person_reset_0_emails` 代表替换分派策略环节 1 的分派人员 |
    | **参数值**  | 分派人员邮件地址，多个地址使用 `,` 分割。例如 `zhangsan@flashcat.cloud,lisi@flashcat.cloud`，将人员替换为张三和李四                      |
    | **参数位置** | Query 参数或标签值。例如夜莺告警设定此标签，或通过标签增强等方式自动生成标签                                                                |
  </Tab>

  <Tab title="替换团队">
    | 配置项      | 说明                                                                                                             |
    | -------- | -------------------------------------------------------------------------------------------------------------- |
    | **参数名**  | 需要满足正则：`^layer_person_reset_(\d)_team_names$`，环节数字从 0 开始。例如 `layer_person_reset_0_team_names` 代表替换分派策略环节 1 的团队 |
    | **参数值**  | 团队名称，多个团队使用 `,` 分割。例如 `A组,B组`，将团队替换为 A 组和 B 组                                                                  |
    | **参数位置** | Query 参数或标签值。例如夜莺告警设定此标签，或通过标签增强等方式自动生成标签                                                                      |
  </Tab>

  <Tab title="替换企微群聊机器人">
    | 配置项      | 说明                                                                                                            |
    | -------- | ------------------------------------------------------------------------------------------------------------- |
    | **参数名**  | 需要满足正则：`^layer_webhook_reset_(\d)_wecoms$`，环节数字从 0 开始。例如 `layer_webhook_reset_0_wecoms` 代表替换分派策略环节 1 的企微群聊机器人 |
    | **参数值**  | 目标群聊机器人 token，多个 token 使用 `,` 分割。例如 `bbb025a0-e2e8-4b79-939d-82c91a275b06`，将群聊机器人替换成此 token 对应的机器人            |
    | **参数位置** | Query 参数或标签值。例如夜莺告警设定此标签，或通过标签增强等方式自动生成标签                                                                     |
  </Tab>

  <Tab title="替换钉钉群聊机器人">
    | 配置项      | 说明                                                                                                                  |
    | -------- | ------------------------------------------------------------------------------------------------------------------- |
    | **参数名**  | 需要满足正则：`^layer_webhook_reset_(\d)_dingtalks$`，环节数字从 0 开始。例如 `layer_webhook_reset_0_dingtalks` 代表替换分派策略环节 1 的钉钉群聊机器人 |
    | **参数值**  | 目标群聊机器人 token，多个 token 使用 `,` 分割。例如 `bbb025a0-e2e8-4b79-939d-82c91a275b06`，将群聊机器人替换成此 token 对应的机器人                  |
    | **参数位置** | Query 参数或标签值。例如夜莺告警设定此标签，或通过标签增强等方式自动生成标签                                                                           |
  </Tab>

  <Tab title="替换飞书群聊机器人">
    | 配置项      | 说明                                                                                                              |
    | -------- | --------------------------------------------------------------------------------------------------------------- |
    | **参数名**  | 需要满足正则：`^layer_webhook_reset_(\d)_feishus$`，环节数字从 0 开始。例如 `layer_webhook_reset_0_feishus` 代表替换分派策略环节 1 的飞书群聊机器人 |
    | **参数值**  | 目标群聊机器人 token，多个 token 使用 `,` 分割。例如 `bbb025a0-e2e8-4b79-939d-82c91a275b06`，将群聊机器人替换成此 token 对应的机器人              |
    | **参数位置** | Query 参数或标签值。例如夜莺告警设定此标签，或通过标签增强等方式自动生成标签                                                                       |
  </Tab>
</Tabs>

<Tip>
  故障触发时，Flashduty 按照已有的分派策略进行匹配。匹配到分派策略后，按照此策略中的环节进行分派或升级。如果设定上述参数，系统会自动替换分派对象或群聊通道。

  所匹配的分派策略中，除了分派对象和群聊目标发生变更，其他内容维持不变，相当于一个模板分派策略。
</Tip>

## 推送示例

### 步骤一：设置模板分派策略

为协作空间配置一个分派策略。如下图所示，该空间只设定一个分派环节，分派对象为头铁科技，同时推送 token 为 5b96 结尾的企微群聊。

<Frame caption="模板分派策略配置示例">
  ![模板分派策略配置](https://download.flashcat.cloud/flashduty/kb/dynamic-escalate-rule.png)
</Frame>

### 步骤二：为告警设定标签

以自定义告警事件集成为例，向目标协作空间推送一条示例告警：

* 设定 `layer_person_reset_0_emails` 标签，期望将环节一的分派人员替换为 guoyuhang 和 yushuangyu
* 设定 `layer_webhook_reset_0_wecoms` 标签，期望将环节一的微信群聊 token 替换为 d9c0 结尾的 token

```bash theme={null}
curl --location --request POST 'https://api.flashcat.cloud/event/push/alert/standard?integration_key=your-integration-key' \
--header 'Content-Type: application/json' \
--data-raw '{
    "event_status": "Warning",
    "alert_key": "lasdfl2xzasd0262",
    "description": "cpu idle lower than 20%",
    "title_rule": "$cluster::$resource::$check",
    "labels": {
        "service": "engine",
        "cluster":"nj",
        "resource":"es.nj.01",
        "check":"cpu.idle<20%",
        "metric":"node_cpu_seconds_total",
        "layer_person_reset_0_emails": "guoyuhang@flashcat.cloud,yushuangyu@flashcat.cloud",
        "layer_webhook_reset_0_wecoms":"90dbb66b-af39-4235-956c-636a9c1ed9c0"
    }
}'
```

### 步骤三：查看故障分派时间线

如下图所示，目标故障正常触发并进行分派。故障的分派人员和目标群聊都按照预期进行了替换。

<Frame caption="动态分派结果">
  ![动态分派结果展示](https://download.flashcat.cloud/flashduty/kb/dynamic-escalate-inc.png)
</Frame>

## 常见问题

<AccordionGroup>
  <Accordion title="我的监控系统没有这些标签怎么办？">
    <Steps>
      <Step title="方案一：主动添加标签">
        如果您的系统支持主动添加标签，比如 Prometheus 或者夜莺，建议您直接在告警策略处增加特定标签。
      </Step>

      <Step title="方案二：使用标签增强">
        如果您的系统已经有相关标签，但格式或命名不同。比如，您的主机带有团队标签，您需要根据团队来找到对应的责任人，这种情况下您可以使用标签增强功能，根据团队标签生成负责人相关标签。

        具体请参考 [配置标签增强](/zh/on-call/integration/alert-integration/label-enhancement)。
      </Step>
    </Steps>
  </Accordion>
</AccordionGroup>

## 延伸阅读

<CardGroup cols={2}>
  <Card title="标签增强" icon="tags" href="/zh/on-call/integration/alert-integration/label-enhancement">
    根据已有标签自动生成新标签
  </Card>

  <Card title="分派策略" icon="route" href="/zh/on-call/channel/escalation-rule">
    了解分派策略的配置方法
  </Card>
</CardGroup>
