Apache SkyWalking 告警配置指南


Apache SkyWalking

Apache SkyWalking是分布式系統的應用程序性能監視工具(Application Performance Management,APM),專為微服務、雲原生架構和基於容器(Docker、K8s、Mesos)架構而設計。

它提供了分布式追蹤、服務網格遙測分析、度量聚合和可視化一體化解決方案。

文章持續更新,微信搜索「萬貓學社」第一時間閱讀,關注后回復「電子書」,免費獲取12本Java必讀技術書籍。

Apache SkyWalking告警

Apache SkyWalking告警是由一組規則驅動,這些規則定義在config/alarm-settings.yml文件中。

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

  1. 告警規則:定義了觸發告警所考慮的條件。
  2. webhook:當告警觸發時,被調用的服務端點列表。
  3. gRPCHook:當告警觸發時,被調用的遠程gRPC方法的主機和端口。
  4. Slack Chat Hook:當告警觸發時,被調用的Slack Chat接口。
  5. 微信 Hook:當告警觸發時,被調用的微信接口。
  6. 釘釘 Hook:當告警觸發時,被調用的釘釘接口。

文章持續更新,微信搜索「萬貓學社」第一時間閱讀,關注后回復「電子書」,免費獲取12本Java必讀技術書籍。

告警規則

告警規則有兩種類型,單獨規則(Individual Rules)和復合規則(Composite Rules),復合規則是單獨規則的組合。

單獨規則(Individual Rules)

單獨規則主要有以下幾點:

  • 規則名稱:在告警信息中顯示的唯一名稱,必須以_rule結尾。
  • metrics-name:度量名稱,也是OAL腳本中的度量名。默認配置中可以用於告警的度量有:服務實例端點服務關系實例關系端點關系。它只支持long,double和int類型。
  • include-names:包含在此規則之內的實體名稱列表。
  • exclude-names:排除在此規則以外的實體名稱列表。
  • include-names-regex:提供一個正則表達式來包含實體名稱。如果同時設置包含名稱列表和包含名稱的正則表達式,則兩個規則都將生效。
  • exclude-names-regex:提供一個正則表達式來排除實體名稱。如果同時設置排除名稱列表和排除名稱的正則表達式,則兩個規則都將生效。
  • include-labels:包含在此規則之內的標簽。
  • exclude-labels:排除在此規則以外的標簽。
  • include-labels-regex:提供一個正則表達式來包含標簽。如果同時設置包含標簽列表和包含標簽的正則表達式,則兩個規則都將生效。
  • exclude-labels-regex:提供一個正則表達式來排除標簽。如果同時設置排除標簽列表和排除標簽的正則表達式,則兩個規則都將生效。

標簽的設置必須把數據存儲在meter-system中,例如:Prometheus, Micrometer。以上四個標簽設置必須實現LabeledValueHolder接口。

  • threshold:閾值。

對於多個值指標,例如percentile,閾值是一個數組。像value1 value2 value3 value4 value5這樣描述。
每個值可以作為度量中每個值的閾值。如果不想通過此值或某些值觸發警報,則將值設置為 -
例如在percentile中,value1是P50的閾值,value2是P75的閾值,那么-,-,value3, value4, value5的意思是,沒有閾值的P50和P75的percentile告警規則。

  • op:操作符,支持>, >=, <, <=, =
  • period:多久告警規則需要被檢查一下。這是一個時間窗口,與后端部署環境時間相匹配。
  • count:在一個周期窗口中,如果按op計算超過閾值的次數達到count,則發送告警。
  • only-as-conditiontrue或者false,指定規則是否可以發送告警,或者僅作為復合規則的條件。
  • silence-period:在時間N中觸發報警后,在N -> N + silence-period這段時間內不告警。 默認情況下,它和period一樣,這意味着相同的告警(同一個度量名稱擁有相同的Id)在同一個周期內只會觸發一次。
  • message:該規則觸發時,發送的通知消息。

舉個例子:

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_instance_resp_time_rule:
    metrics-name: service_instance_resp_time
    op: ">"
    threshold: 1000
    period: 10
    count: 2
    silence-period: 10
    message: 實例【{name}】的平均響應時間在最近10分鍾內有2分鍾超過1秒
  endpoint_resp_time_rule:
    metrics-name: endpoint_avg
    threshold: 1000
    op: ">"
    period: 10
    count: 2
    message: 端點【{name}】的平均響應時間在最近10分鍾內有2分鍾超過1秒

文章持續更新,微信搜索「萬貓學社」第一時間閱讀,關注后回復「電子書」,免費獲取12本Java必讀技術書籍。

復合規則(Composite Rules)

復合規則僅適用於針對相同實體級別的告警規則,例如都是服務級別的告警規則:service_percent_rule && service_resp_time_percentile_rule
不可以編寫不同實體級別的告警規則,例如服務級別的一個告警規則和端點級別的一個規則:service_percent_rule && endpoint_percent_rule

復合規則主要有以下幾點:

  • 規則名稱:在告警信息中顯示的唯一名稱,必須以_rule結尾。
  • expression:指定如何組成規則,支持&&, ||, ()操作符。
  • message:該規則觸發時,發送的通知消息。

舉個例子:

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:
  comp_rule:
    expression: service_resp_time_rule && service_sla_rule
    message: 服務【{name}】在最近10分鍾內有2分鍾超過1秒平均響應時間超過1秒並且成功率低於80%

文章持續更新,微信搜索「萬貓學社」第一時間閱讀,關注后回復「電子書」,免費獲取12本Java必讀技術書籍。

Webhook

Webhook 要求一個點對點的 Web 容器。告警的消息會通過 HTTP 請求進行發送,請求方法為 POSTContent-Typeapplication/json,JSON 格式包含以下信息:

  • scopeId:目標 Scope 的 ID。
  • name:目標 Scope 的實體名稱。
  • id0:Scope 實體的 ID。
  • id1:未使用。
  • ruleName:您在 alarm-settings.yml 中配置的規則名。
  • alarmMessage. 告警消息內容。
  • startTime. 告警時間戳,當前時間與 UTC 1970/1/1 相差的毫秒數。

舉個例子:

[{
	"scopeId": 1, 
	"scope": "SERVICE",
	"name": "one-more-service", 
	"id0": "b3JkZXItY2VudGVyLXNlYXJjaC1hcGk=.1",  
	"id1": "",  
    "ruleName": "service_resp_time_rule",
	"alarmMessage": "服務【one-more-service】的平均響應時間在最近10分鍾內有2分鍾超過1秒",
	"startTime": 1617670815000
}, {
	"scopeId": 2,
	"scope": "SERVICE_INSTANCE",
	"name": "e4b31262acaa47ef92a22b6a2b8a7cb1@192.168.30.11 of one-more-service",
	"id0": "dWF0LWxib2Mtc2VydmljZQ==.1_ZTRiMzEyNjJhY2FhNDdlZjkyYTIyYjZhMmI4YTdjYjFAMTcyLjI0LjMwLjEzOA==",
	"id1": "",
    "ruleName": "instance_jvm_young_gc_count_rule",
	"alarmMessage": "實例【e4b31262acaa47ef92a22b6a2b8a7cb1@192.168.30.11 of one-more-service】的YoungGC次數在最近10分鍾內有2分鍾超過10次",
	"startTime": 1617670815000
}, {
	"scopeId": 3,
	"scope": "ENDPOINT",
	"name": "/one/more/endpoint in one-more-service",
	"id0": "b25lcGllY2UtYXBp.1_L3RlYWNoZXIvc3R1ZGVudC92aXBsZXNzb25z",
	"id1": "",
    "ruleName": "endpoint_resp_time_rule",
	"alarmMessage": "端點【/one/more/endpoint in one-more-service】的平均響應時間在最近10分鍾內有2分鍾超過1秒",
	"startTime": 1617670815000
}]

gRPCHook

告警消息將使用 Protobuf 類型通過gRPC遠程方法發送。消息格式的關鍵信息定義如下:

syntax = "proto3";

option java_multiple_files = true;
option java_package = "org.apache.skywalking.oap.server.core.alarm.grpc";

service AlarmService {
    rpc doAlarm (stream AlarmMessage) returns (Response) {
    }
}

message AlarmMessage {
    int64 scopeId = 1;
    string scope = 2;
    string name = 3;
    string id0 = 4;
    string id1 = 5;
    string ruleName = 6;
    string alarmMessage = 7;
    int64 startTime = 8;
}

message Response {
}

文章持續更新,微信搜索「萬貓學社」第一時間閱讀,關注后回復「電子書」,免費獲取12本Java必讀技術書籍。

Slack Chat Hook

您需要遵循傳入Webhooks入門指南並創建新的Webhooks。

如果您按以下方式配置了Slack Incoming Webhooks,則告警消息將按 Content-Typeapplication/json 通過HTTP的 POST 方式發送。

舉個例子:

slackHooks:
  textTemplate: |-
    {
      "type": "section",
      "text": {
        "type": "mrkdwn",
        "text": ":alarm_clock: *Apache Skywalking Alarm* \n **%s**."
      }
    }
  webhooks:
    - https://hooks.slack.com/services/x/y/z

微信Hook

只有微信的企業版才支持 Webhooks ,如何使用微信的 Webhooks 可參見如何配置群機器人

如果您按以下方式配置了微信的 Webhooks ,則告警消息將按 Content-Typeapplication/json 通過HTTP的 POST 方式發送。

舉個例子:

wechatHooks:
  textTemplate: |-
    {
      "msgtype": "text",
      "text": {
        "content": "Apache SkyWalking 告警: \n %s."
      }
    }
  webhooks:
    - https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=dummy_key

文章持續更新,微信搜索「萬貓學社」第一時間閱讀,關注后回復「電子書」,免費獲取12本Java必讀技術書籍。

釘釘 Hook

您需要遵循自定義機器人開放並創建新的Webhooks。為了安全起見,您可以為Webhook網址配置可選的密鑰。

如果您按以下方式配置了釘釘的 Webhooks ,則告警消息將按 Content-Typeapplication/json 通過HTTP的 POST 方式發送。

舉個例子:

dingtalkHooks:
  textTemplate: |-
    {
      "msgtype": "text",
      "text": {
        "content": "Apache SkyWalking 告警: \n %s."
      }
    }
  webhooks:
    - url: https://oapi.dingtalk.com/robot/send?access_token=dummy_token
      secret: dummysecret

微信公眾號:萬貓學社

微信掃描二維碼

關注后回復「電子書」

獲取12本Java必讀技術書籍


免責聲明!

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



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