【SkyWalking】配置告警规则并通过 Webhook 推送钉钉通知

发布于:2025-07-12 ⋅ 阅读:(18) ⋅ 点赞:(0)

🧭 本文为 【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_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 版本中字段可能会变化,请前往你使用版本的源码中查看:

org.apache.skywalking.oap.server.core.alarm.AlarmMessage

示意图如下:

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

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

@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 文件中添加:

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

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

触发成功后,SkyWalking 会:

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

✅ 总结

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


🧩 本文为【SkyWalking系列】第 3 篇
📌 喜欢记得点赞、收藏,或关注我持续更新更多微服务实战内容!
📮 有问题欢迎评论区讨论,看到必回 🙌
👉 下一篇预告:系列4:SkyWalking】性能剖析实战:定位慢接口与阻塞代码(欢迎提前收藏)



网站公告

今日签到

点亮在社区的每一天
去签到