【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}}

每个规则都由相同的属性组成,这些属性的含义如下图:

示例规则:
yaml 复制代码
rules:
  slow_response_rule:
    metrics-name: service_resp_time
    op: ">"
    threshold: 1000
    period: 1
    count: 3
    silence-period: 5
    message: |
      [服务慢响应告警]
      服务名称: {{ 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 版本中字段可能会变化,请前往你使用版本的源码中查看:

java 复制代码
org.apache.skywalking.oap.server.core.alarm.AlarmMessage

示意图如下:

✅ 示例:创建自定义告警接收模块

你可以创建一个新微服务(如 skywalking-alarm),并定义一个简单的告警接收接口:

java 复制代码
@RestController
@RequestMapping("/alarm")
public class AlarmWebhookController {

    @PostMapping
    public void receiveAlarm(@RequestBody AlarmMessage message) {
        // 可将告警发送至钉钉、邮件、日志或数据库等
        System.out.println("接收到告警: " + message);
    }
}
✅ 配置 alarm-settings.yml 中的 webhook 地址

config/alarm-settings.yml 文件中添加:

yaml 复制代码
webhooks:
  - http://localhost:1004/alarm  # 自定义告警接收接口地址
✅ 测试告警触发

使用前文中示例接口(如 http://localhost:1003/order/list),进行多次慢响应调用(模拟接口卡顿,例如睡眠 2 秒),触发响应时间告警。

触发成功后,SkyWalking 会:

  • 控制台打印告警日志;
  • 向 webhook 接口发送 JSON 告警数据;
  • 接收模块将其记录或转发至通知渠道。

✅ 总结

Webhook 机制让 SkyWalking 的告警不仅停留在日志层面,还能触发外部通知或自动化运维脚本。配合钉钉机器人、飞书通知、企业微信或邮件平台,你可以快速搭建完整的微服务监控告警链路,提升故障响应效率。


🧩 本文为【SkyWalking系列】第 3 篇

📌 喜欢记得点赞、收藏,或关注我持续更新更多微服务实战内容!

📮 有问题欢迎评论区讨论,看到必回 🙌

👉 下一篇预告:系列4:SkyWalking】性能剖析实战:定位慢接口与阻塞代码(欢迎提前收藏)


相关推荐
Jinkxs5 小时前
SkyWalking - Spring Cloud Alibaba 全链路追踪实战
skywalking
烛之武2 天前
Skywalking服务链路追踪与Jemeter压力测试
压力测试·skywalking
鬼先生_sir2 天前
Spring Cloud 微服务监控实战:SkyWalking + Prometheus+Grafana 全栈解决方案
运维·spring cloud·grafana·prometheus·skywalking
dgvri7 天前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
rOuN STAT8 天前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
危笑ioi8 天前
helm部署skywalking链路追踪 java
java·开发语言·skywalking
MmeD UCIZ9 天前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
专注API从业者9 天前
淘宝 API 调用链路追踪实战:基于 SkyWalking/Pinpoint 的全链路监控搭建
大数据·开发语言·数据库·skywalking
MMMMMMMMMMemory10 天前
记录skywalking预警如何处理401问题
skywalking
SoulRoar.11 天前
Armbian离线安装ES+SkyWalking并注册系统服务
大数据·elasticsearch·skywalking