【SkyWalking】配置告警规则并通过 Webhook 推送钉钉通知
🧭 本文为 【SkyWalking 系列】第 3 篇
👉 系列导航:点击跳转
【SkyWalking】配置告警规则并通过 Webhook 推送钉钉通知
简介
介绍 SkyWalking 告警机制、告警规则格式以及如何通过 webhook 方式将告警信息发送到钉钉。
引入
服务响应超时、失败率升高是系统预警的重点。SkyWalking 提供默认规则与自定义 webhook 推送机制,快速闭环告警链路。
SkyWalking 告警配置详解
在微服务系统中,及时发现接口异常、响应变慢、调用失败等问题是保障系统稳定性的关键。SkyWalking 不仅能提供可视化链路追踪,也内置了告警机制,能够自动监控服务运行状态并触发预警。
1 告警触发场景示例
当某个接口出现较长延迟、失败率升高时,SkyWalking 会自动检测并触发告警,如下图所示:
你可以在 Web UI 的 Alarm 页面 中查看最近的告警记录,包括服务名称、告警时间、告警指标和描述等信息。
2 SkyWalking 默认内置的告警规则
SkyWalking 提供了一些常用的默认规则,这些规则覆盖了服务响应时间、成功率、调用性能等关键维度。例如:
告警名称 | 触发条件说明 |
---|---|
服务平均响应时间告警 | 最近 3 分钟内服务的平均响应时间 > 1 秒 |
服务成功率告警 | 最近 2 分钟内服务成功率 < 80% |
服务 P90 响应时间告警 | 最近 3 分钟内 P90 响应时间 > 1 秒 |
实例平均响应时间告警 | 最近 2 分钟内服务实例的平均响应时间 > 1 秒 |
随着 SkyWalking 的版本不断迭代,也在持续新增其他告警规则
3 告警配置文件位置与格式
所有告警规则统一配置在:config/alarm-settings.yml
配置文件示例截图如下所示:
4 告警规则结构说明
每条规则都是以 YAML 格式编写,由如下属性组成:
属性 | 含义说明 |
---|---|
metrics-name | 指标名称,如 service_resp_time、service_percentile |
op | 运算符,如 > 、< 、= 等 |
threshold | 阈值(超过/低于该值触发告警) |
period | 检查周期(单位:分钟) |
count | 连续满足条件的次数,才会触发告警 |
silence-period | 告警静默周期,单位分钟,在此期间不重复告警 |
message | 告警通知内容,支持模板变量,如 {{name}} 、{{value}} |
每个规则都由相同的属性组成,这些属性的含义如下图:
示例规则:
rules:slow_response_rule:metrics-name: service_resp_timeop: ">"threshold: 1000period: 1count: 3silence-period: 5message: |[服务慢响应告警]服务名称: {{ name }}平均响应时间: {{ value }}ms
如果想要调整默认的规则,比如监控返回的信息,监控的参数等等,只需要改动上述配置文件中的参数即可。
5 告警通知:Webhook 钩子集成
如果你想将告警信息实时推送给运维人员或系统平台(如钉钉、飞书、微信、邮件等),SkyWalking 提供了对 Webhook 机制的原生支持。
Webhook 本质上是一个 POST 请求,一旦告警被触发,SkyWalking 会自动将告警信息以 JSON 格式推送到你配置的 HTTP 接口。
✅ 修改规则参数
除了内置的几种默认规则外,你也可以按需修改响应时间、成功率等阈值,或者新增自定义规则,只需编辑:config/alarm-settings.yml
通过调整其中的参数即可灵活控制告警粒度与频率。
✅ Webhook 告警触发机制说明
- 告警触发后,将以 POST 请求 的方式调用指定的 webhook 地址;
- 请求体为
application/json
格式,内容为AlarmMessage
实例; - Webhook 接口的入参字段必须与
AlarmMessage
类一致。
⚠️ 注意:
AlarmMessage
类在不同 SkyWalking 版本中字段可能会变化,请前往你使用版本的源码中查看:org.apache.skywalking.oap.server.core.alarm.AlarmMessage
示意图如下:
✅ 示例:创建自定义告警接收模块
你可以创建一个新微服务(如 skywalking-alarm
),并定义一个简单的告警接收接口:
@RestController
@RequestMapping("/alarm")
public class AlarmWebhookController {@PostMappingpublic void receiveAlarm(@RequestBody AlarmMessage message) {// 可将告警发送至钉钉、邮件、日志或数据库等System.out.println("接收到告警: " + message);}
}
✅ 配置 alarm-settings.yml 中的 webhook 地址
在 config/alarm-settings.yml
文件中添加:
webhooks:- http://localhost:1004/alarm # 自定义告警接收接口地址
✅ 测试告警触发
使用前文中示例接口(如 http://localhost:1003/order/list
),进行多次慢响应调用(模拟接口卡顿,例如睡眠 2 秒),触发响应时间告警。
触发成功后,SkyWalking 会:
- 控制台打印告警日志;
- 向 webhook 接口发送 JSON 告警数据;
- 接收模块将其记录或转发至通知渠道。
✅ 总结
Webhook 机制让 SkyWalking 的告警不仅停留在日志层面,还能触发外部通知或自动化运维脚本。配合钉钉机器人、飞书通知、企业微信或邮件平台,你可以快速搭建完整的微服务监控告警链路,提升故障响应效率。
🧩 本文为【SkyWalking系列】第 3 篇
📌 喜欢记得点赞、收藏,或关注我持续更新更多微服务实战内容!
📮 有问题欢迎评论区讨论,看到必回 🙌
👉 下一篇预告:系列4:SkyWalking】性能剖析实战:定位慢接口与阻塞代码(欢迎提前收藏)