标准告警事件集成指引
title: "标准告警事件集成指引"
description: "通过标准协议推送自有系统告警事件到 Flashduty,实现告警事件自动化降噪处理。"
date: "2024-05-11T10:00:00+08:00"
url: "https://docs.flashcat.cloud/zh/flashduty/custom-alert-integration-guide"
通过标准协议推送自有系统告警事件到 Flashduty,实现告警事件自动化降噪处理。
:::tips
Flashduty 已经适配了大部分常用告警系统的 webhook 协议,对于这些系统您应该首先使用对应的集成,更加简单方便。本集成提供了一个标准的 HTTP 接口,需要允许您开发适配。好处是您可以推送任何你想进行oncall的告警事件。
:::
操作步骤
在 Flashduty
您可通过以下2种方式,获取一个集成推送地址,任选其一即可。
使用专属集成
当您不需要将告警事件路由到不同的协作空间,优先选择此方式,更简单。
展开
- 进入 Flashduty 控制台,选择 协作空间,进入某个空间的详情页面
- 选择 集成数据 tab,点击 添加一个集成,进入添加集成页面
- 选择 标准告警事件 集成,点击 保存,生成卡片。
- 点击生成的卡片,可以查看到 推送地址,复制备用,完成。
使用共享集成
当您需要根据告警事件的 Payload 信息,将告警路由到不同的协作空间,优先选择此方式。
展开
- 进入 Flashduty 控制台,选择 集成中心=>告警事件,进入集成选择页面。
- 选择 标准告警事件 集成:
- 集成名称:为当前集成定义一个名称。
- 点击 保存 后,复制当前页面的新生成的 推送地址 备用。
- 点击 创建路由,为集成配置路由规则。您可以按条件匹配不同的告警到不同的协作空间,也可以直接设置默认协作空间作为兜底,后续再按需调整。
- 完成。
一、请求描述
请求方式
POST, Content-Type:"application/json"
请求参数:
QueryString 必须需要包含参数 integration_key,用于访问控制。
JsonBody 参数如下:
字段 | 必含 | 类型 | 释义 |
---|---|---|---|
event_status | 是 | string | 告警 event 状态,枚举值:Critical:严重,Warning:警告,Info:提醒,Ok:恢复 |
alert_key | 是 | string | event 合并依据,不同告警 event 根据该字段和时间窗口合并为一个 alert |
title_rule | 否 | string | 告警 title 生成规则,形如$a::b::$c ,用:: 分割子串,每一个子串可以是一个固定字符串或用$ 作为前缀的变量,变量内容将从 labels 参数中提取,提取不到将会报错。缺省时,系统将提取 labels 字段中的 service、cluster、resource 和 check 等标签生成规则 |
description | 否 | string | 告警描述,不超过 2048 个字符 |
labels | 否 | map | 告警标签集合,key 为标签名称,value 为标签值。标签是事件的描述,用于后续的关联和降噪,非常重要。1. 标签的 key 和 value 均为 string 类型,区分大小写。2. 标签的 key 不要超过 128 个字符。3. 至多传入 50 个标签。标签内容参考 最佳实践 |
请求响应
Body:
参数名称 | 必选 | 类型 | 描述 |
---|---|---|---|
request_id | 是 | string | 请求 trace id,用于问题追踪 |
error | 否 | Error | 错误描述,仅当出现错误时返回 |
Error:
参数名称 | 可选 | 类型 | 描述 |
---|---|---|---|
code | 是 | string | 错误码 |
message | 是 | string | 错误描述 |
Code:
错误码 | HTTP Status | 描述 |
---|---|---|
InvalidParameter | 400 | 参数错误 |
InvalidContentType | 400 | Conten-Type 不支持 |
MethodNotAllowed | 400 | http method 不支持 |
Unauthorized | 401 | 登录认证失败 |
AccessDenied | 403 | 权限认证失败 |
RequestTooFrequently | 429 | 请求过于频繁 |
RouteNotFound | 404 | 请求 Method+Path 未匹配 |
ResourceNotFound | 400 | 账户未购买资源,前往费用中心线操作下单 |
InternalError | 500 | 内部或未知错误 |
二、请求示例
请求:
curl -X POST '{api_host}/event/push/alert/standard?integration_key=$key' \
-H 'Content-Type: application/json' \
-d '{
"event_status": "Warning",
"alert_key": "asdfjl1234asdf2s",
"description": "cpu idle low 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"
}
}' -v
成功响应:
{
"request_id": "0ace00116215ab4ca0ec5244b8fc54b0"
}
失败响应:
{
"request_id": "0ace00116215abc0ba4e52449bd305b0",
"error": {
"code": "InvalidParameter",
"message": "integration_key is not a valid one"
}
}
三、最佳实践
- 当告警状态发生变更时,向 Flashduty发送事件
- 当告警恢复时,发送一个 status 为 Ok 的事件,来关闭告警。否则,告警将一直处于打开状态。如果您的告警系统没有恢复事件,建议您手动发送恢复事件
- 标签是事件的描述,应尽量丰富标签内容(发送时指定,或者通过配置 enrichment 规则来生成新的标签),比如:
- 告警的发生来源,如 host,cluster,check 或 metric 等
- 告警的归属信息,如 team,owner 等
- 告警的类别信息,如 class(api,db,net)
四、常见问题
为什么在Flashduty没有收到告警?
在 Flashduty
- 查看集成是否展示了 最新事件时间?如果没有,代表Flashduty没有收到推送,直接优先您的系统。
- 如果您使用的是 共享集成,优先确认您是否配置了 路由规则。不设置路由规则,系统会直接拒绝新的推送,因为没有协作空间可以承接您的告警。这种情况下,直接配置路由规则到您期望的空间即可。
在您的系统
- 确认您请求的地址,和集成详情中的地址完全一致。
- 确认您的服务可以访问外网 api.flashcat.cloud 域名。如果不可以,您首先需要为 server 开通外网,或单独针对 Flashduty 的域名开通外网访问。
- 打印 Flashduty 服务的响应结果,查看是否有明确信息。
如果以上步骤执行之后,仍然没有查询到问题根因,请 携带请求响应中的 request_id 联系我们。
最后修改时间: 2 天前