🧭 本文為 【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】性能剖析實戰:定位慢接口與阻塞代碼(歡迎提前收藏)