标准告警事件

通过标准 HTTP 协议推送自有系统告警事件到 1Duty,实现告警事件自动化降噪处理

概述

1Duty 已经适配了大部分常见监控系统的告警协议(如 Prometheus、Zabbix、Grafana 等),你可以通过告警接入直接对接这些系统。

但如果你使用的是自研的监控系统,或者需要将业务系统中的自定义告警推送到 1Duty,可以使用标准告警事件接口。该接口提供了一个通用的 HTTP 推送协议,支持任意系统向 1Duty 发送告警事件,享受自动化降噪、智能分派、升级通知等完整能力。

获取推送地址

按照以下步骤获取推送地址:

  1. 进入集成中心,选择或创建一个集成
  2. 进入集成详情页面,切换到 Webhook 配置区域
  3. 找到已生成的 Webhook URL
  4. 复制该 URL,在你的系统中作为告警推送目标地址使用

每个 Webhook URL 包含唯一的 webhook_key,用于标识告警来源。请妥善保管,避免泄露。

请求描述

使用标准 HTTP POST 请求向 1Duty 推送告警事件。

请求方式

MethodPOST
Content-Typeapplication/json
URLhttps://api.1duty.com/webhook/{webhook_key}

请求参数

字段必填类型说明
title string 告警标题,最大长度 512 个字符。用于展示告警的简要描述。
event_status string 告警状态,枚举值:
  • Critical -- 严重告警
  • Warning -- 警告告警
  • Info -- 信息告警
  • Ok -- 恢复(自动关闭已有告警)
alert_key string 告警唯一标识,最大长度 255 个字符。用于告警去重和自动恢复。相同 alert_key 的告警会被聚合为同一条事件,发送 Ok 状态时需要携带对应的 alert_key 以自动关闭告警。
description string 告警详细描述,最大长度 2048 个字符。支持更丰富的告警上下文信息。
labels map<string, string> 告警标签,键值对形式。用于携带告警上下文信息,如主机名、服务名、地域等,便于后续分派和筛选。

请求示例

curl -X POST "https://api.1duty.com/webhook/your_webhook_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "服务器 CPU 使用率超过 90%",
    "event_status": "Critical",
    "alert_key": "host-10.0.0.1-cpu-high",
    "description": "生产服务器 10.0.0.1 的 CPU 使用率持续 5 分钟超过 90%,当前值 95.2%",
    "labels": {
      "host": "10.0.0.1",
      "service": "api-gateway",
      "region": "cn-hangzhou",
      "env": "production"
    }
  }'

告警恢复示例:

curl -X POST "https://api.1duty.com/webhook/your_webhook_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "服务器 CPU 使用率恢复正常",
    "event_status": "Ok",
    "alert_key": "host-10.0.0.1-cpu-high",
    "description": "生产服务器 10.0.0.1 的 CPU 使用率已恢复至正常水平,当前值 45.3%"
  }'

响应说明

推送请求的响应格式如下:

成功响应

{
  "code": 0,
  "message": "success"
}

失败响应

{
  "code": 400,
  "message": "invalid request: title is required"
}

常见错误码:

HTTP 状态码code说明
2000推送成功
400400请求参数错误(缺少必填字段或格式不正确)
401401webhook_key 无效或已过期
429429请求频率超限,请稍后重试
500500服务器内部错误

字段映射

推送的告警字段会按以下规则映射为 1Duty 内部的事件字段:

推送字段1Duty 事件字段映射说明
title事件标题直接映射为事件的标题
event_status事件级别 / 状态Critical/Warning/Info 映射为事件严重级别;Ok 触发事件自动恢复
alert_key事件聚合键相同 alert_key 的告警聚合为同一事件,实现去重和自动恢复
description事件描述直接映射为事件的详细描述
labels事件标签映射为事件的标签(Tags),可用于分派策略条件匹配和告警筛选

最佳实践

设置有意义的 alert_key

建议使用能唯一标识告警来源的组合作为 alert_key,例如 主机-指标-阈值类型 的格式。这样系统可以正确地对同一来源的告警进行去重聚合,避免重复告警产生多条事件。

// 推荐的 alert_key 格式
"alert_key": "host-10.0.0.1-cpu-high"
"alert_key": "service-payment-error-rate"
"alert_key": "db-master-connection-pool-full"

使用 labels 丰富告警上下文

通过 labels 携带丰富的告警上下文信息,便于值班人员快速定位问题。常见的标签包括:

及时发送恢复事件

当告警条件恢复正常时,务必发送 event_status: "Ok" 的事件,并携带对应的 alert_key。这样 1Duty 会自动关闭对应的事件,减少值班人员的手动操作和不必要的通知打扰。

如果不发送恢复事件,告警事件将一直处于打开状态,需要值班人员手动关闭。建议在监控系统中配置自动恢复逻辑。

合理使用告警级别

根据告警的实际影响程度选择合适的 event_status

通知渠道

当告警事件通过标准接口推送到 1Duty 后,系统会根据分派策略将告警通知到相关值班人员。1Duty 支持以下通知渠道:

渠道说明
钉钉通过钉钉机器人推送告警消息到钉钉群或个人
飞书通过飞书机器人推送告警消息到飞书群或个人
企业微信通过企业微信机器人推送告警消息到企业微信群或个人
短信通过短信通知值班人员,适用于紧急告警场景
电话通过语音电话通知值班人员,确保严重告警能被立即响应

建议为不同级别的告警配置不同的通知渠道。例如 Critical 告警使用电话+短信+IM 多通道通知,Warning 告警使用 IM 通知即可。具体配置请参考通知设置