Skywalking告警功能


Skywalking告警功能是在6.x版本新增的,其核心由一組規則驅動,這些規則定義在config/alarm-settings.yml 文件中。告警規則定義分為兩部分:
1、告警規則:它們定義了應該如何觸發度量警報,應該考慮什么條件
2、webhook(網絡鈎子):定義當告警觸發時,哪些服務終端需要被告知
一、告警規則
告警規則有兩種類型:單獨規則、復合規則
1.1、單獨規則
rules:
 # 規則唯一名稱,必須以'_rule'結尾.
 service_resp_time_rule:
 # 度量名稱,也是OAL腳本中的度量名,目前Service, Service Instance, Endpoint的度量可以用於告警
 metrics-name: service_resp_time
 # [可選]默認,匹配此指標中的所有服務
 include-names:
 - service_a
 - service_b
 exclude-names:
 - service_c
 # 閾值,對於多種指標值的如percentile可以配置P50、P75、P90、P95、P99的閾值
 threshold: 75
 # 操作符
 op: <
 # 評估度量標准的時間長度
 period: 10
 # 度量有多少次符合告警條件后,才會觸發告警
 count: 3
 # 檢查多少次,告警觸發后保持沉默,默認周期相同
 silence-period: 10
 # 該規則觸發時,發送的通知消息
 message: Response time of service {name} is more than 50ms in 1 minutes of last 1 minutes. 
1.2、復合規則
復合規則僅適用於針對相同實體級別的告警規則
例如都是服務級別的告警規則:service_percent_rule && service_resp_time_percentile_rule 不適用於編寫不同實體級別的告警規則
rules:
 service_resp_time_rule:
 metrics-name: service_resp_time
 op: ">"
 threshold: 1000
 period: 10
 count: 2
 silence-period: 10
 message: 服務【{name}】的平均響應時間在最近10分鍾內有2分鍾超過1秒
 service_sla_rule:
 metrics-name: service_sla
 op: "<"
 threshold: 8000
 period: 10
 count: 2
 silence-period: 10
 message: 服務【{name}】的成功率在最近10分鍾內有2分鍾低於80%
composite-rules:
 # 規則名稱:在告警信息中顯示的唯一名稱,必須以_rule結尾
 comp_rule:
 # 指定如何組成規則,支持&&, ||, ()操作符
 expression: service_resp_time_rule && service_sla_rule
 message: 服務【{name}】在最近10分鍾內有2分鍾平均響應時間超過1秒並且成功率低於80%
警規則配置項說明:
  • Rule name: 規則名稱,也是在告警信息中顯示的唯一名稱。必須以’_rule’結尾,前綴可以自定義
  • metrics name:度量名稱,取值為腳本中的度量名,目前只支持long、double、int類型。
  • include name:該規則作用於哪些實體名稱,比如:服務名,終端名(可選,默認為全部)
  • exclude name:該規則不作用於哪些實體名稱,比如:服務名,終端名(可選,默認為空)
  • op: 操作符:目前支持 > , < , = 【當然你可以自己擴展開發其他的操作符】
  • threshold:閾值/目標值:指標數據的目標數據 如sample中的1000就是服務響應時間,配合上操作符就是大於1000ms的服務響應
  • period: 告警檢查周期:多久檢查一次當前的指標數據是否符合告警規則
  • counts: 在一個period窗口中,如果values超過threshold值,達到counts值需要發送警報
  • silence-period:忽略相同告警信息的周期
  • message:告警信息
  • webhooks:服務告警通知服務地址
默認告警規則
  • 過去 3 分鍾內服務平均響應時間超過 1 秒
  • 最后2分鍾服務成功率低於80%
  • 最近 3 分鍾內服務響應時間超過 1s 的百分比
  • 服務實例在過去 2 分鍾內平均響應時間超過 1s,並且實例名稱與正則表達式匹配
  • 過去 2 分鍾內端點平均響應時間超過 1 秒
  • 過去 2 分鍾內數據庫訪問平均響應時間超過 1 秒
  • 過去 2 分鍾內端點關系平均響應時間超過 1 秒
支持的Hook類型
  • WebHook(可以簡單理解位一種web層面的回調機制,通常由一些事件出發,與代碼中得事件回調類似,只不過是Web層面的。由於是web層面的,所以當事件發生時,回調的不再是代碼中得方法或函數,而是服務接口。例如:在告警這個場景,告警就是一個事件,當該事件發生時,Skywalking就會主動去調用一個配置好的接口,該接口就是所謂的webhook。skywalking的告警消息會通過HTTP請求進行發送,請求方法為POST,Content-Type為application/json,其JSON數據基於List進行序列化的。)
  • GRPCHook
  • SlackHook
  • WechatHook
0
  • DingtalkHook
0
  • FeishuHook
  • 測試釘釘告警
測試
由於上面配置了閾值是50ms,多點幾次應用接口,到告警頁面可見如下告警:
0
釘釘告警示例
修改配置:
tee /skywalking/apache-skywalking-apm-bin-es7/config/alarm-settings.yml <<-'EOF'
dingtalkHooks:
  textTemplate: |-
    {
      "msgtype": "text",
      "text": {
        "content": "Apache SkyWalking Alarm: \n %s."
      }
    }
  webhooks:
    - url: https://oapi.dingtalk.com/robot/send?access_token=xxxxx
      secret: xxxxx
EOF
如下:
0
釘釘告警效果:
0
webhook,編寫回調接口
Skywalking通過HttpClient的方式遠程調用在配置項webhooks中定義的告警通知服務地址:
0
了解了SW所傳送的數據格式我們就可以對告警信息進行接收處理,實現我們需要的告警通知服務啦!我們將一個服務停掉,並將另外一個服務的某個對外暴露的接口讓他休眠一定的時間。然后調用一定的次數觀察服務的狀態信息以及告警情況。
0
打開源碼&Live-Demo工程
修改oap-server/server-bootstrap/src/main/resources/alarm-settings.yml文件覆蓋如下配置(最近1分鍾內,應用平均響應時間超過50ms次數達到1次)
rules:
 service_resp_time_rule:
 metrics-name: service_resp_time
 threshold: 50
 op: ">"
 period: 1
 count: 1
 message: Response time of service {name} is more than 50ms in 1 minutes of last 1 minutes.
 
dingtalkHooks:
 textTemplate: |-
 {
 "msgtype": "text",
 "text": {
 "content": "Apache SkyWalking Alarm: \n %s."
 }
 }
 webhooks:
 - url: https://oapi.dingtalk.com/robot/send?access_token=xxx
 secret: xxx 
0
啟動OAP服務
org.apache.skywalking.oap.server.starter.OAPServerStartUp
啟動UI服務
org.apache.skywalking.apm.webapp.ApplicationStartUp
啟動Eureka test.skywalking.springcloud.test.eureka.service.EurekaService_Main
啟動ProjectB
test.skywalking.springcloud.test.projectb.ProjectB_Main
執行 curl http://localhost:8762/projectB/test
等待1min中后,訪問Skywalking UI界面中的告警界面可以看到對應的告警信息
0
同時,釘釘群中也可以看到推送的消息
0
 
zhuan:https://blog.csdn.net/wb4927598/article/details/119192445


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM