当前位置: 首页 > 后端技术 > Java

ApacheSkyWalking告警配置指南

时间:2023-04-01 17:06:49 Java

ApacheSkyWalkingApacheSkyWalking是一款面向分布式系统的应用性能监控工具(ApplicationPerformanceManagement,APM),专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)的架构而设计。它为分布式跟踪、服务网格遥测分析、指标聚合和可视化提供一体化解决方案。ApacheSkyWalking警报ApacheSkyWalking警报由一组在config/alarm-settings.yml文件中定义的规则驱动。告警规则的定义分为三个部分。警报规则:定义考虑触发警报的条件。webhook:触发警报时要调用的服务端点列表。gRPCHook:触发告警时调用的远程gRPC方法的主机和端口。SlackChatHook:触发告警时,调用SlackChat接口。WeChatHook:触发报警时,调用微信接口。DingTalkHook:触发告警时调用的钉钉接口。告警规则告警规则有两种,分别是个体规则(IndividualRules)和复合规则(CompositeRules),复合规则是个体规则的组合。个别规则(IndividualRules)个别规则主要有以下几点:规则名称:告警信息中显示的唯一名称,必须以_rule结尾。metrics-name:metric的名称,也是OAL脚本中metric的名称。默认配置中可用于告警的指标有:服务、实例、端点、服务关系、实例关系、端点关系。它只支持long、double和int类型。include-names:包含在此规则中的实体名称列表。exclude-names:排除在该规则之外的实体名称列表。include-names-regex:提供正则表达式以包含实体名称。如果同时设置了包含名称的列表和包含名称的正则表达式,则这两个规则都将生效。exclude-names-regex:提供一个正则表达式来排除实体名称。如果同时设置排除名称列表和排除名称正则表达式,则两条规则都将生效。include-labels:包含在该规则中的标签。exclude-labels:从此规则中排除的标签。include-labels-regex:提供正则表达式来包含标签。如果同时设置了标签列表和标签的正则表达式,则这两个规则都会生效。exclude-labels-regex:提供正则表达式来排除标签。如果同时设置了排除标签列表和排除标签正则表达式,则两条规则都会生效。标签的设置必须存储仪表系统中的数据,例如:Prometheus、Micrometer。以上四种标签设置必须实现LabeledValueHolder接口。门槛:门槛。对于多值指标,例如百分位数,threshold是一个数组。描述如value1value2value3value4value5。每个值都可以作为度量中每个值的阈值。将值设置为-如果您不希望此值或某些值触发警报。例如百分位数,value1是P50的阈值,value2是P75的阈值。那么-、-、value3、value4、value5分别表示P50、P75无阈值的百分位报警规则。op:运算符,支持>、>=、<、<=、=。period:警报规则需要检查多长时间。这是一个与后端部署环境时间相匹配的时间窗口。count:在一个周期窗口内,如果count超过op计算的阈值,达到count,就会发出告警。only-as-condition:true或false,指定规则是否可以发送警报,或者仅作为复合规则的条件。silence-period:在时间N触发告警后,N->N+silence-period期间不会发出告警。默认与period相同,即同一个alarm(相同的metricname和相同的Id)在同一周期内只会触发一次。message:触发规则时发送的通知消息。例如:rules:service_resp_time_rule:metrics-name:service_resp_timeop:">"threshold:1000period:10count:2silence-period:10message:最近10分钟服务[{name}]的平均响应时间2分钟超过1秒service_instance_resp_time_rule:metrics-name:service_instance_resp_timeop:">"threshold:1000period:10count:2silence-period:10message:实例[{name}]的平均响应时间在最近10个中有2个minutesTheminuteexceeds1secondendpoint_resp_time_rule:metrics-name:endpoint_avgthreshold:1000op:">"period:10count:2message:端点[{name}]的平均响应时间在2分钟内超过1秒last10minutes(CompositeRules)复合规则只适用于针对同一实体级别的告警规则,例如都是服务级别的告警规则: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_timeop:">"threshold:1000period:10count:2silence-period:10message:最近10分钟服务[{name}]的平均响应时间2分钟超过1秒service_sla_rule:metrics-name:service_slaop:"<"threshold:8000period:10count:2silence-period:10message:Thesuccessrateofservice[{name}]is2minutesinthelast10minutesBelow80%composite-rules:comp_rule:expression:service_resp_time_rule&&service_sla_rulemessage:Service[{name}]has2minutesover1secondinthelast10minutes平均响应时间超过1秒且成功率低于80%WebhookWebhook需要一个Peer对等网络容器。告警消息将通过HTTP请求发送,请求方式为POST,Content-Type为application/json,JSON格式包含以下信息:scopeId:目标scope的ID。name:目标Scope的实体名称。id0:Scope实体的ID。id1:未使用。ruleName:你在alarm-settings.yml中配置的规则名称。报警信息。报警信息内容。开始时间。报警时间戳,当前时间与UTC1970/1/1之间的毫秒数。例如:[{"scopeId":1,"scope":"SERVICE","name":"one-more-service","id0":"b3JkZXItY2VudGVyLXNlYXJjaC1hcGk=.1","id1":"","ruleName":"service_resp_time_rule","alarmMessage":"最近10分钟服务[one-more-service]的平均响应时间超过1秒2分钟","startTime":1617670815000},{"scopeId":2,"scope":"SERVICE_INSTANCE","name":"e4b31262acaa47ef92a22b6a2b8a7cb1@192.168.30.11ofone-more-service","id0":"dWF0LWxib2Mtc2VydmljZQ==.1_ZTRiMzEyNjJhY2FhNDdlZjkyYTIyYjZhMmI4YTdjYjFAMTcyLjI0LjMwLjEzOA==","id1":"","ruleName":"instance_jvm_young_gc_count_rule","alarmMessage":"最近10分钟实例[e4b31262acaa47ef92a22b6a2b8a7cb1@192.168.30.11ofone-more-service]的YoungGC计数2分钟内超过10次","startTime":1617670815000},{"scopeId":3,"scope":"ENDPOINT","name":"/one/more/endpointinone-more-service","id0":"b25lcGllY2UtYXBp.1_L3RlYWNoZXIvc3R1ZGVudC92aXBsZXNzb25z","id1":"","ruleName":"endpoint_resp_time_rule","alarmMessage":"端点的平均响应时间[/one/more/endpointinone-more-service]isInthelast10minutes,2minutesexceeded1second","startTime":1617670815000}]gRPCHook告警信息将使用Protobuf类型通过gRPC远程方法发送消息格式的关键信息定义如下:syntax="proto3";optionjava_multiple_files=true;optionjava_package="org.apache.skywalking.oap.server.core.alarm.grpc";serviceAlarmService{rpcdoAlarm(streamAlarmMessage)returns(Response){}}messageAlarmMessage{int64scopeId=1;字符串范围=2;字符串名称=3;字符串id0=4;字符串id1=5;字符串规则名称=6;字符串报警消息=7;int64startTime=8;}messageResponse{}SlackChatHook您需要按照IncomingWebhooks入门指南创建新的Webhooks。如果您按如下方式配置SlackIncomingWebhooks,警报消息将通过HTTPPOST发送,内容类型为application/json。例如:slackHooks:textTemplate:|-{"type":"section","text":{"type":"mrkdwn","text":":alarm_clock:*ApacheSkywalkingAlarm*\n**%s**。”}}webhooks:-https://hooks.slack.com/services/x/y/zWeChatHook仅在微信企业版支持Webhooks。微信Webhooks的使用方法请参考如何配置群机器人。如果您如下配置微信Webhooks,警报消息将通过Content-Typeapplication/json的HTTPPOST发送。例如:wechatHooks:textTemplate:|-{"msgtype":"text","text":{"content":"ApacheSkyWalkingalert:\n%s."}}网络钩子:-https://qyapi。weixin.qq.com/cgi-bin/webhook/send?key=dummy_key钉钉Hook您需要跟随自定义机器人打开并创建新的Webhooks。为了安全起见,您可以为webhookURL配置一个可选密钥。如果您通过以下方式配置了钉钉的Webhooks,则告警消息将通过HTTPPOST方式发送,Content-Type设置为application/json。例如:dingtalkHooks:textTemplate:|-{"msgtype":"text","text":{"content":"ApacheSkyWalkingalert:\n%s."}}webhooks:-url:https://oapi.dingtalk.com/robot/send?access_token=dummy_tokensecret:dummysecret注意:本文以SkyWalking8.2.0版本为例,如有差异会略有差异版本不同。