詳解Apache SkyWalking 告警配置指南
Apache SkyWalking
Apache SkyWalking是分布式系統(tǒng)的應(yīng)用程序性能監(jiān)視工具(Application Performance Management,APM),專(zhuān)為微服務(wù)、云原生架構(gòu)和基于容器(Docker、K8s、Mesos)架構(gòu)而設(shè)計(jì)。
它提供了分布式追蹤、服務(wù)網(wǎng)格遙測(cè)分析、度量聚合和可視化一體化解決方案。
Apache SkyWalking告警
Apache SkyWalking告警是由一組規(guī)則驅(qū)動(dòng),這些規(guī)則定義在config/alarm-settings.yml
文件中。
告警規(guī)則的定義分為三部分。
- 告警規(guī)則:定義了觸發(fā)告警所考慮的條件。
- webhook:當(dāng)告警觸發(fā)時(shí),被調(diào)用的服務(wù)端點(diǎn)列表。
- gRPCHook:當(dāng)告警觸發(fā)時(shí),被調(diào)用的遠(yuǎn)程gRPC方法的主機(jī)和端口。
- Slack Chat Hook:當(dāng)告警觸發(fā)時(shí),被調(diào)用的Slack Chat接口。
- 微信 Hook:當(dāng)告警觸發(fā)時(shí),被調(diào)用的微信接口。
- 釘釘 Hook:當(dāng)告警觸發(fā)時(shí),被調(diào)用的釘釘接口。
告警規(guī)則
告警規(guī)則有兩種類(lèi)型,單獨(dú)規(guī)則(Individual Rules)和復(fù)合規(guī)則(Composite Rules),復(fù)合規(guī)則是單獨(dú)規(guī)則的組合。
單獨(dú)規(guī)則(Individual Rules)
單獨(dú)規(guī)則主要有以下幾點(diǎn):
- 規(guī)則名稱(chēng):在告警信息中顯示的唯一名稱(chēng),必須以_rule結(jié)尾。
- metrics-name:度量名稱(chēng),也是OAL腳本中的度量名。默認(rèn)配置中可以用于告警的度量有:服務(wù),實(shí)例,端點(diǎn),服務(wù)關(guān)系,實(shí)例關(guān)系,端點(diǎn)關(guān)系。它只支持long,double和int類(lèi)型。
- include-names:包含在此規(guī)則之內(nèi)的實(shí)體名稱(chēng)列表。
- exclude-names:排除在此規(guī)則以外的實(shí)體名稱(chēng)列表。
- include-names-regex:提供一個(gè)正則表達(dá)式來(lái)包含實(shí)體名稱(chēng)。如果同時(shí)設(shè)置包含名稱(chēng)列表和包含名稱(chēng)的正則表達(dá)式,則兩個(gè)規(guī)則都將生效。
- exclude-names-regex:提供一個(gè)正則表達(dá)式來(lái)排除實(shí)體名稱(chēng)。如果同時(shí)設(shè)置排除名稱(chēng)列表和排除名稱(chēng)的正則表達(dá)式,則兩個(gè)規(guī)則都將生效。
- include-labels:包含在此規(guī)則之內(nèi)的標(biāo)簽。
- exclude-labels:排除在此規(guī)則以外的標(biāo)簽。
- include-labels-regex:提供一個(gè)正則表達(dá)式來(lái)包含標(biāo)簽。如果同時(shí)設(shè)置包含標(biāo)簽列表和包含標(biāo)簽的正則表達(dá)式,則兩個(gè)規(guī)則都將生效。
- exclude-labels-regex:提供一個(gè)正則表達(dá)式來(lái)排除標(biāo)簽。如果同時(shí)設(shè)置排除標(biāo)簽列表和排除標(biāo)簽的正則表達(dá)式,則兩個(gè)規(guī)則都將生效。
標(biāo)簽的設(shè)置必須把數(shù)據(jù)存儲(chǔ)在meter-system中,例如:Prometheus, Micrometer。以上四個(gè)標(biāo)簽設(shè)置必須實(shí)現(xiàn)LabeledValueHolder
接口。
- threshold:閾值。
對(duì)于多個(gè)值指標(biāo),例如percentile,閾值是一個(gè)數(shù)組。像value1
value2
value3
value4
value5
這樣描述。
每個(gè)值可以作為度量中每個(gè)值的閾值。如果不想通過(guò)此值或某些值觸發(fā)警報(bào),則將值設(shè)置為 -
。
例如在percentile中,value1
是P50的閾值,value2
是P75的閾值,那么-,-,value3, value4, value5
的意思是,沒(méi)有閾值的P50和P75的percentile告警規(guī)則。
- op:操作符,支持
>
,>=
,<
,<=
,=
。 - period:多久告警規(guī)則需要被檢查一下。這是一個(gè)時(shí)間窗口,與后端部署環(huán)境時(shí)間相匹配。
- count:在一個(gè)周期窗口中,如果按op計(jì)算超過(guò)閾值的次數(shù)達(dá)到count,則發(fā)送告警。
- only-as-condition:
true
或者false
,指定規(guī)則是否可以發(fā)送告警,或者僅作為復(fù)合規(guī)則的條件。 - silence-period:在時(shí)間N中觸發(fā)報(bào)警后,在N -> N + silence-period這段時(shí)間內(nèi)不告警。 默認(rèn)情況下,它和period一樣,這意味著相同的告警(同一個(gè)度量名稱(chēng)擁有相同的Id)在同一個(gè)周期內(nèi)只會(huì)觸發(fā)一次。
- message:該規(guī)則觸發(fā)時(shí),發(fā)送的通知消息。
舉個(gè)例子:
rules: service_resp_time_rule: metrics-name: service_resp_time op: ">" threshold: 1000 period: 10 count: 2 silence-period: 10 message: 服務(wù)【{name}】的平均響應(yīng)時(shí)間在最近10分鐘內(nèi)有2分鐘超過(guò)1秒 service_instance_resp_time_rule: metrics-name: service_instance_resp_time op: ">" threshold: 1000 period: 10 count: 2 silence-period: 10 message: 實(shí)例【{name}】的平均響應(yīng)時(shí)間在最近10分鐘內(nèi)有2分鐘超過(guò)1秒 endpoint_resp_time_rule: metrics-name: endpoint_avg threshold: 1000 op: ">" period: 10 count: 2 message: 端點(diǎn)【{name}】的平均響應(yīng)時(shí)間在最近10分鐘內(nèi)有2分鐘超過(guò)1秒
文章持續(xù)更新,微信搜索「萬(wàn)貓學(xué)社」第一時(shí)間閱讀,關(guān)注后回復(fù)「電子書(shū)」,免費(fèi)獲取12本Java必讀技術(shù)書(shū)籍。
復(fù)合規(guī)則(Composite Rules)
復(fù)合規(guī)則僅適用于針對(duì)相同實(shí)體級(jí)別的告警規(guī)則,例如都是服務(wù)級(jí)別的告警規(guī)則:service_percent_rule && service_resp_time_percentile_rule
。
不可以編寫(xiě)不同實(shí)體級(jí)別的告警規(guī)則,例如服務(wù)級(jí)別的一個(gè)告警規(guī)則和端點(diǎn)級(jí)別的一個(gè)規(guī)則:service_percent_rule && endpoint_percent_rule
。
復(fù)合規(guī)則主要有以下幾點(diǎn):
- 規(guī)則名稱(chēng):在告警信息中顯示的唯一名稱(chēng),必須以
_rule
結(jié)尾。 - expression:指定如何組成規(guī)則,支持
&&
,||
,()
操作符。 - message:該規(guī)則觸發(fā)時(shí),發(fā)送的通知消息。
舉個(gè)例子:
rules: service_resp_time_rule: metrics-name: service_resp_time op: ">" threshold: 1000 period: 10 count: 2 silence-period: 10 message: 服務(wù)【{name}】的平均響應(yīng)時(shí)間在最近10分鐘內(nèi)有2分鐘超過(guò)1秒 service_sla_rule: metrics-name: service_sla op: "<" threshold: 8000 period: 10 count: 2 silence-period: 10 message: 服務(wù)【{name}】的成功率在最近10分鐘內(nèi)有2分鐘低于80% composite-rules: comp_rule: expression: service_resp_time_rule && service_sla_rule message: 服務(wù)【{name}】在最近10分鐘內(nèi)有2分鐘超過(guò)1秒平均響應(yīng)時(shí)間超過(guò)1秒并且成功率低于80%
Webhook
Webhook 要求一個(gè)點(diǎn)對(duì)點(diǎn)的 Web 容器。告警的消息會(huì)通過(guò) HTTP 請(qǐng)求進(jìn)行發(fā)送,請(qǐng)求方法為 POST
,Content-Type
為 application/json
,JSON 格式包含以下信息:
- scopeId:目標(biāo) Scope 的 ID。
- name:目標(biāo) Scope 的實(shí)體名稱(chēng)。
- id0:Scope 實(shí)體的 ID。id1:未使用。
- ruleName:您在
alarm-settings.yml
中配置的規(guī)則名。 - alarmMessage. 告警消息內(nèi)容。
- startTime. 告警時(shí)間戳,當(dāng)前時(shí)間與 UTC 1970/1/1 相差的毫秒數(shù)。
舉個(gè)例子:
[{ "scopeId": 1, "scope": "SERVICE", "name": "one-more-service", "id0": "b3JkZXItY2VudGVyLXNlYXJjaC1hcGk=.1", "id1": "", "ruleName": "service_resp_time_rule", "alarmMessage": "服務(wù)【one-more-service】的平均響應(yīng)時(shí)間在最近10分鐘內(nèi)有2分鐘超過(guò)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": "實(shí)例【e4b31262acaa47ef92a22b6a2b8a7cb1@192.168.30.11 of one-more-service】的YoungGC次數(shù)在最近10分鐘內(nèi)有2分鐘超過(guò)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": "端點(diǎn)【/one/more/endpoint in one-more-service】的平均響應(yīng)時(shí)間在最近10分鐘內(nèi)有2分鐘超過(guò)1秒", "startTime": 1617670815000 }]
gRPCHook
告警消息將使用 Protobuf
類(lèi)型通過(guò)gRPC遠(yuǎn)程方法發(fā)送。消息格式的關(guān)鍵信息定義如下:
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 { }
Slack Chat Hook
您需要遵循傳入Webhooks入門(mén)指南并創(chuàng)建新的Webhooks。
如果您按以下方式配置了Slack Incoming Webhooks,則告警消息將按 Content-Type
為 application/json
通過(guò)HTTP的 POST
方式發(fā)送。
舉個(gè)例子:
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
只有微信的企業(yè)版才支持 Webhooks ,如何使用微信的 Webhooks 可參見(jiàn)如何配置群機(jī)器人。
如果您按以下方式配置了微信的 Webhooks ,則告警消息將按 Content-Type
為 application/json
通過(guò)HTTP的 POST
方式發(fā)送。
舉個(gè)例子:
wechatHooks: textTemplate: |- { "msgtype": "text", "text": { "content": "Apache SkyWalking 告警: \n %s." } } webhooks: - https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=dummy_key
釘釘 Hook
您需要遵循自定義機(jī)器人開(kāi)放并創(chuàng)建新的Webhooks。為了安全起見(jiàn),您可以為Webhook網(wǎng)址配置可選的密鑰。
如果您按以下方式配置了釘釘?shù)?Webhooks ,則告警消息將按 Content-Type
為 application/json
通過(guò)HTTP的 POST
方式發(fā)送。
舉個(gè)例子:
dingtalkHooks: textTemplate: |- { "msgtype": "text", "text": { "content": "Apache SkyWalking 告警: \n %s." } } webhooks: - url: https://oapi.dingtalk.com/robot/send?access_token=dummy_token secret: dummysecret
微信掃描二維碼,關(guān)注java 技術(shù)迷,回復(fù)「電子書(shū)」,免費(fèi)獲取Java必讀技術(shù)書(shū)籍。
到此這篇關(guān)于Apache SkyWalking 告警配置指南的文章就介紹到這了,更多相關(guān)SkyWalking 告警配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux服務(wù)器中的遠(yuǎn)程訪問(wèn)問(wèn)題小結(jié)
在php程序中運(yùn)用fopen或者socket的時(shí)候,報(bào)一下錯(cuò)誤php_network_getaddresses: getaddrinfo failed: Temporary failure in name2012-01-01telnet?Connection?refused端口不通如何處理
本文介紹了telnet命令的基本用途及排查telnet連接拒絕的處理思路,telnet主要用于測(cè)試網(wǎng)絡(luò)連接,如遇到連接問(wèn)題,可能是由于防火墻未開(kāi)放或目的主機(jī)服務(wù)未啟動(dòng),文章通過(guò)實(shí)際例子解釋了telnet命令的作用,并提供了解決網(wǎng)絡(luò)連接問(wèn)題的方法2024-10-10Linux服務(wù)器離線安裝 nginx的詳細(xì)步驟
這篇文章主要介紹了Linux服務(wù)器離線安裝 nginx的詳細(xì)步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06VPS CentOS-6 下 LNMP HTTP web服務(wù)器的搭建步驟
雖然現(xiàn)在很多朋友比較喜歡使用軍哥的lnmp一鍵安裝包,但手工配置方法也要會(huì),否則容易技術(shù)退步2014-06-06詳解linux 驅(qū)動(dòng)編寫(xiě)(sd卡驅(qū)動(dòng))
這篇文章主要介紹了詳解linux 驅(qū)動(dòng)編寫(xiě)(sd卡驅(qū)動(dòng)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04