美女同事的烦恼:如何配置Apache SkyWalking的告警?

小婉

技术部基本上是一个和尚庙,女生非常少,即使有女生也略微有点抽象,小婉就不一样,她气质绝佳。

美女同事的烦恼:如何配置Apache SkyWalking的告警?

上午,同事小婉刚才从老板办公室里出来,看上去一脸不悦的样子。为了表示对同事的关(ba)心(gua),我就主动和她聊一聊。

美女同事的烦恼:如何配置Apache SkyWalking的告警?

Apache SkyWalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。这些我是知道的,它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

至于小婉问我的SkyWalking的告警,我还真不清楚,是我的知识盲区啊,我只能如实跟小婉说了。

美女同事的烦恼:如何配置Apache SkyWalking的告警?

哎,我都说了些什么,幸好我机灵一些,拖到了到下午,还有几个小时,赶快恶补一下。

Apache SkyWalking告警

Apache SkyWalking告警是由一组规则驱动,这些规则定义在config/alarm-settings.yml文件中。

告警规则的定义分为三部分。

  1. 告警规则:定义了触发告警所考虑的条件。
  2. webhook:当告警触发时,被调用的服务端点列表。
  3. gRPCHook:当告警触发时,被调用的远程gRPC方法的主机和端口。
  4. Slrules: 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秒
    复合规则(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% 

    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 { } 

    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 

    钉钉 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 

    尾声

    基本这些就差不多了,完全可以忽悠住小婉。想想小婉那崇拜的眼神和仰慕的表情,我擦了擦嘴巴的口水。

    美女同事的烦恼:如何配置Apache SkyWalking的告警?

    文章持续更新,微信搜索「万猫学社」第一时间阅读。
    关注后回复「电子书」,免费获取12本Java必读技术书籍。

版权声明:玥玥 发表于 2021-04-07 8:18:32。
转载请注明:美女同事的烦恼:如何配置Apache SkyWalking的告警? | 女黑客导航