故障 Webhook
title: "故障 Webhook"
description: "Flashduty 故障 Webhook 开发介绍。"
date: "2024-11-20T10:00:00+08:00"
url: "https://developer.flashcat.cloud/zh/flashduty/webhook/incident-webhook"
配置故障 Webhook,当故障发生特定操作(如触发、关闭)时,系统通过 HTTP 回调您配置的地址。回调内容将包含故障最新关键信息,您可以与自研工具进行集成。
一、事件类型
目前支持以下事件类型,未来可能会增加。
事件类型 | 释义 |
---|---|
i_new | 创建故障(自动或手动创建) |
i_assign | 分派故障(自动或手动分派) |
i_snooze | 手动屏蔽故障 |
i_wake | 取消屏蔽故障 |
i_ack | 手动认领故障 |
i_unack | 取消认领故障 |
i_storm | 触发风暴预警 |
i_custom | 触发自定义操作 |
i_rslv | 关闭故障(自动或手动关闭) |
i_reopen | 重新打开故障 |
i_merge | 手动合并故障 |
i_r_title | 更新故障标题 |
i_r_desc | 更新故障描述 |
i_r_impact | 更新故障影响 |
i_r_rc | 更新故障根因 |
i_r_rsltn | 更新故障解决办法 |
i_r_severity | 更新故障严重程度 |
i_r_field | 更新故障自定义字段 |
二、推送描述
请求方式
POST, Content-Type:"application/json"
请求 Payload:
字段 | 类型 | 必含 | 释义 |
---|---|---|---|
event_time | int64 | 是 | 事件发生毫秒时间戳 |
event_type | string | 是 | 事件类型,枚举值见事件类型 |
event_id | string | 是 | 事件 ID,同一个事件可能因为超时等原因重试多次,接收方需要能够去重 |
person | Person | 否 | 操作人,仅人为动作时存在 |
incident | Incident | 是 | 故障详情 |
Person:
字段 | 类型 | 必含 | 释义 |
---|---|---|---|
person_id | int64 | 是 | 人员 ID |
person_name | string | 是 | 人员名称 |
string | 是 | 邮件地址 |
Responder:
字段 | 类型 | 必含 | 释义 |
---|---|---|---|
person_id | int64 | 是 | 人员 ID |
person_name | string | 是 | 人员名称 |
string | 是 | 邮件地址 | |
assigned_at | int64 | 否 | 分派时间 |
acknowledged_at | int64 | 否 | 认领时间 |
Incident:
字段 | 类型 | 必含 | 释义 |
---|---|---|---|
incident_id | string | 是 | 故障 ID |
title | string | 是 | 故障标题 |
description | string | 否 | 故障描述 |
impact | string | 否 | 故障影响 |
root_cause | string | 否 | 故障根本原因 |
resolution | string | 否 | 故障解决办法 |
incident_severity | string | 是 | 严重程度,枚举值:Critical,Warning,Info |
incident_status | string | 是 | 故障状态,枚举值:Critical,Warning,Info,Ok |
progress | string | 是 | 处理进度,枚举值:Triggered,Processing,Closed |
created_at | int64 | 是 | 创建时间 |
updated_at | int64 | 是 | 更新时间 |
start_time | int64 | 是 | 触发时间,Unix 秒时间戳 |
last_time | int64 | 否 | 最新事件时间,关联告警中的最新事件推送时间,Unix 秒时间戳,默认为 0 |
end_time | int64 | 否 | 恢复时间,关联的告警全部恢复时,故障也会自动恢复,Unix 秒时间戳,默认为 0 |
ack_time | int64 | 否 | 首次认领时间,故障可被多人认领,此时间为最早的认领时间。Unix 秒时间戳,默认为 0 |
close_time | int64 | 否 | 关闭时间,end_time代表故障恢复时间,close_time代表处理进度的关闭时间,故障恢复时会同时关闭,故障关闭时不影响故障恢复。Unix 秒时间戳,默认为 0 |
snoozed_before | int64 | 否 | 屏蔽截止时间 |
labels | map[string]string | 否 | 标签 KV,Key 和 Value 均为字符串。手动创建时无此信息,自动创建时为聚合的第一条告警的标签信息 |
fields | map[string]interface{} | 否 | 自定义字段 KV,Key 为字符串,Value 可能为任意类型,取决于字段类型 |
creator | Person | 否 | 创建人员信息,仅手动创建故障时存在 |
closer | Person | 否 | 关闭人员信息,仅手动关闭故障时存在 |
responders | []Responder | 否 | 处理人员信息列表 |
alert_cnt | int64 | 否 | 关联告警个数 |
channel_id | int64 | 否 | 协作空间ID,为0代表不属于任何空间 |
channel_name | string | 否 | 协作空间名称 |
detail_url | string | 是 | 详情地址 |
group_method | string | 否 | 聚合方式,枚举值:n:不聚合,p:按规则聚合,i:智能聚合 |
请求响应
HTTP status code 为 200,认为推送成功。
请求示例
curl -X POST 'https://example.com/incident/webhook?a=a' \
-H 'Content-Type: application/json' \
-H 'X-Customize-Header-A: a' \
-d '{
"event_id":"fac0599a2a25529ba2362c0c184b6cfb",
"event_time":1689335086948,
"event_type":"i_new",
"incident":{
"account_id":74058170041504,
"account_name":"头铁科技kk",
"ack_time":0,
"alert_cnt":0,
"assigned_to":{
"assigned_at":1689335086,
"escalate_rule_id":"64abb8a687e7984845822139",
"escalate_rule_name":"默认分派",
"id":"NBRbNwDSTSMijKXdLtBU3T",
"layer_idx":0,
"type":"assign"
},
"channel_id":1840312623504,
"channel_name":"Reduce Noise",
"close_time":0,
"created_at":1689335086,
"creator":{
"email":"toutie@flashcat.cloud",
"person_id":1552048792504,
"person_name":"头铁"
},
"creator_id":1552048792504,
"data_source_id":0,
"dedup_key":"",
"description":"",
"detail_url":"http://10.206.0.17:8567/incident/detail/64b1352e376e32c85c56e25b",
"end_time":0,
"equals_md5":"",
"group_method":"n",
"impact":"",
"incident_id":"64b1352e376e32c85c56e25b",
"incident_severity":"Critical",
"incident_status":"Critical",
"labels":{
"check": "cpu idle low"
},
"last_time":1689335086,
"num":"56E25B",
"progress":"Triggered",
"resolution":"",
"responder_ids":[
1552048792504
],
"responders":[
{
"acknowledged_at":0,
"assigned_at":1689335086,
"email":"toutie@flashcat.cloud",
"person_id":1552048792504,
"person_name":"头铁"
}
],
"root_cause":"",
"snoozed_before":0,
"start_time":1689335086,
"title":"ysy028",
"updated_at":1689335086
},
"person":{
"email":"toutie@flashcat.cloud",
"person_id":1552048792504,
"person_name":"头铁"
}
}' -v
三、常见问题
服务是否有响应超时时间?
- 服务需要在 1 秒内返回响应,超过 1 秒则认为响应失败
推送失败后是否会持续推送?
- 目前 FlashDuty 最多推送一次,未来可能会引入重试机制,也可能因为中间链路超时导致重试,您需要做好幂等处理
如何保证推送顺序?
- 理论上同一个故障的事件是按照时间顺序进行推送,但是重试等情况可能会导致乱序
- 服务可以根据 event_time 进行过滤,如果已经收到了更晚的事件,可以直接过滤掉更早的事件,每一次推送都会携带最新的、完整的信息,偶尔丢失事件是可以容忍的
推送来源可信 IP 白名单?
- 47.94.95.118, 123.56.8.183, 47.94.193.81, 1.13.19.96
- 未来可能会更新,请定期查验
最后修改时间: 23 天前