【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】性能剖析实战:定位慢接口与阻塞代码(欢迎提前收藏)


相关推荐
老三牛擦4 天前
熟悉Docker及Docker-Compose。熟悉Linux常用命令,编写基本Shell脚本。可搭建Jenkins进行Dev/Ops。
skywalking
老三牛擦6 天前
熟练掌握RabbitMQ和Kafka的使用及相关应用场景。异步通知与解耦,流量削峰,配合本地消息表实现事务的最终一致性并解决消息可靠、顺序消费和错误重试等问题
skywalking
老三牛擦7 天前
熟悉多线程与并发编程,理解各类锁机制,熟悉JUC并发多线程及线程池,熟练异步编排编码,熟悉Redisson在分布式场景下各类锁的应用场景和并发控制原理。
skywalking
5007018 天前
SkyWalking 部署与应用(Windows)
windows·skywalking
递归尽头是星辰1 个月前
SkyWalking架构深度解析:分布式系统监控的利器
skywalking·分布式链路追踪·可观测性·云原生监控·微服务监控
·云扬·1 个月前
【PmHub面试篇】性能监控与分布式追踪利器Skywalking面试专题分析
分布式·面试·skywalking
XMYX-02 个月前
SkyWalking 报错:sw_profile_task 索引缺失问题分析与解决
运维·jenkins·skywalking
编程、小哥哥2 个月前
Java面试深度解析:微服务与云原生技术应用场景详解
java·spring cloud·微服务·云原生·面试·kubernetes·链路追踪
神雕大侠mu2 个月前
skywalking使用教程
skywalking