基于SkyWalking的分布式跟蹤系統 – 異常告警

通過前面2篇文章我們搭建了SW的基礎環境,監控了微服務,能了解所有服務的運行情況。但是當出現服務響應慢,接口耗時嚴重時我們需要立即定位到問題,這就需要我們今天的主角–監控告警,同時此篇也是SW系列的最后一篇。

UI參數

首先我們認識一下SW DashBoard上的幾個關鍵參數,如下圖所示

基于SkyWalking的分布式跟蹤系統 - 異常告警

告警配置

告警流程

skywalking發送告警的基本原理是每隔一段時間輪詢skywalking-collector收集到的鏈路追蹤的數據,再根據所配置的告警規則(如服務響應時間、服務響應時間百分比)等,如果達到閾值則發送響應的告警信息。發送告警信息是以線程池異步的方式調用webhook接口完成,(具體的webhook接口可以使用者自行定義),從而開發者可以在指定的webhook接口中自行編寫各種告警方式,釘釘告警、郵件告警等等。

規則配置

告警的核心由一組規則驅動,這些規則定義在 config/alarm-settings.yml ,打開之后如下所示:

基于SkyWalking的分布式跟蹤系統 - 異常告警

告警規則的定義分為兩部分。

  • 告警規則。它們定義了應該如何觸發度量警報,應該考慮什么條件。
  • [網絡鉤子](#Webhook}。當警告觸發時,哪些服務終端需要被告知。

告警規則主要有以下幾點

  • Rule name。 在告警信息中顯示的唯一名稱。必須以_rule結尾。
  • Metrics name。 也是oal腳本中的度量名。
  • Include names。 其下的實體名稱都在此規則中。比如服務名,終端名。
  • Threshold。 閾值。
  • OP。 操作符, 支持 >, <, =。
  • Period.。 多久檢查一次當前的指標數據是否符合告警規則這是一個時間窗口,與后端部署環境時間相匹配。
  • Count。 在一個Period窗口中,如果values超過Threshold值(按op),達到Count值,需要發送警報。
  • Silence period。 在時間N中觸發報警后,在TN -> TN + period這個階段不告警。 默認情況下,它和Period一樣,這意味著相同的告警(在同一個Metrics name擁有相同的Id)在同一個Period內只會觸發一次

Webhook

SkyWalking 的告警 Webhook 要求對等方是一個 Web 容器. 告警的消息會通過 HTTP 請求進行發送, 請求方法為 POST, Content-Type 為 application/json, JSON 格式基于 List<org.apache.skywalking.oap.server.core.alarm.AlarmMessage, 包含以下信息.

org.apache.skywalking.oap.server.core.source.DefaultScopeDefine
[{
    "scopeId": 1, 
        "name": "serviceA", 
    "id0": 12,  
    "id1": 0,  
    "alarmMessage": "alarmMessage xxxx",
    "startTime": 1560524171000
}, {
    "scopeId": 1,
        "name": "serviceB",
    "id0": 23,
    "id1": 0,
    "alarmMessage": "alarmMessage yyy",
    "startTime": 1560524171000
}]

代碼實戰

  • 編寫實體類用于接收sw告警消息
@Data
public class SwAlarmVO {
    private int scopeId;
    private String name;
    private int id0;
    private int id1;
    private String alarmMessage;
    private long startTime;
}
  • 編寫webhook接口
@RestController
@RequestMapping("sw")
@Log4j2
public class AlarmController {
    @PostMapping("/alarm")
    public void alarm(@RequestBody List<SwAlarmVO> alarmList){
        log.info("skywalking alarm message:{}",alarmList);
        //todo doalarm
    }
}
Thread.sleep(1000)

基于SkyWalking的分布式跟蹤系統 - 異常告警

詳細信息如下:

[SwAlarmVO(scopeId = 2, name = dubbo - consumer - pid: 13812 @ jianzhang11, id0 = 28, id1 = 0, alarmMessage = Response time of service instance dubbo - consumer - pid: 13812 @ jianzhang11 is more than 1000ms in 2 minutes of last 10 minutes, startTime = 1573122018755), SwAlarmVO(scopeId = 2, name = dubbo - provider2 - pid: 14108 @ jianzhang11, id0 = 25, id1 = 0, alarmMessage = Response time of service instance dubbo - provider2 - pid: 14108 @ jianzhang11 is more than 1000ms in 2 minutes of last 10 minutes, startTime = 1573122018755)]

此時webhook能正常接收到sw的告警信息,后續的消息通知直接定制開發即可。

相關文章:

基于SkyWalking的分布式跟蹤系統 – 環境搭建

基于SkyWalking的分布式跟蹤系統 – 微服務監控

更多內容請關注公眾號:JAVA日知錄

基于SkyWalking的分布式跟蹤系統 - 異常告警

原文 

https://segmentfault.com/a/1190000020950505

本站部分文章源于互聯網,本著傳播知識、有益學習和研究的目的進行的轉載,為網友免費提供。如有著作權人或出版方提出異議,本站將立即刪除。如果您對文章轉載有任何疑問請告之我們,以便我們及時糾正。

PS:推薦一個微信公眾號: askHarries 或者qq群:474807195,里面會分享一些資深架構師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發、高性能、分布式、微服務架構的原理,JVM性能優化這些成為架構師必備的知識體系。還能領取免費的學習資源,目前受益良多

轉載請注明原文出處:Harries Blog? » 基于SkyWalking的分布式跟蹤系統 – 異常告警

贊 (0)
分享到:更多 ()

評論 0

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
2013平特肖公式