Skip to main content

一、功能概述

标签映射 API 允许您构建自定义的外部服务来增强告警标签。工作流程如下:
  1. Flashduty 接收到告警事件
  2. 系统根据配置,将事件信息和期望获取的标签列表发送到您的 API
  3. 您的 API 查询外部数据源(如 CMDB、数据库等)
  4. API 返回计算得到的增强标签
  5. Flashduty 将返回的标签附加到告警上

二、API 规范

请求方式

POST, Content-Type:“application/json”

请求 Payload:

Event:

请求示例

响应规范

成功响应:
  • HTTP 状态码:200 OK
  • 响应体必须是包含 result_labels 字段的 JSON 对象
  • result_labels 的 Key 必须是请求中 result_label_keys 指定的标签名
  • 如果某个标签无法获取,不应在响应中包含该 Key
成功响应示例:
失败响应:
提示: 返回 200 OK 状态码 + 空的 result_labels: {} 对象也会被视为”无结果”,但使用 404 状态码是更规范的做法。

三、配置映射服务

在 Flashduty 中配置标签映射时,您需要先创建一个映射服务,然后在标签增强规则中引用该服务。

映射服务字段说明

标签增强规则配置

配置标签增强规则时,只需要关注以下配置:
  1. result_label_keys:指定期望从 API 获取的标签列表,Flashduty 会自动将此列表和当前的 event 对象组合成请求体发送给您的 API
  2. 映射服务:选择或配置 API 服务的 URL、Headers 等信息

四、Header 安全约束

为了防止安全绕过、请求走私、IP 伪造及缓存污染,在自定义 API 请求头时,禁止使用以下 Header。系统网关将自动过滤或拒绝包含这些 Header 的请求。

Header 最佳实践

  1. 白名单模式:建议仅允许以 X-Custom-X-Enrich- 为前缀的自定义 Header
  2. 长度限制:单个 Header 的 Key 或 Value 长度不应超过 1024 字节
  3. 格式校验:Header 的 Value 严禁包含换行符(\r\n),以防止 Header 注入攻击

五、最佳实践

  1. 性能优先: 此 API 位于告警处理的关键路径上,必须保证低延迟。对外部数据源的查询应尽可能快,建议实现缓存机制。
  2. 明确的错误处理: 善用 HTTP 状态码(特别是 404)来传递清晰的执行结果。
  3. 幂等性: API 的设计应尽可能幂等。对于同一个 event,多次调用应返回相同的结果。
  4. 安全性: API 必须通过认证和授权机制进行保护,推荐使用自定义 Header(如 X-Custom-Auth)传递认证信息。

六、常见问题

  1. 服务是否有响应超时时间?
    • 服务需要在配置的超时时间内返回响应,超时则认为响应失败
  2. 如果 API 返回失败会怎样?
    • 告警会正常处理,但不会附加增强标签
    • 根据配置的重试次数,系统可能会重试请求
  3. result_label_keys 可以动态变化吗?
    • 是的,您可以在 Flashduty 中随时修改期望获取的标签列表,无需修改 API 代码