详解Apache SkyWalking 告警配置指南


Posted in Servers onApril 22, 2021

Apache SkyWalking

Apache SkyWalking是分布式系统的应用程序性能监视工具(Application Performance Management,APM),专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。

它提供了分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

Apache SkyWalking告警

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

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

  • 告警规则:定义了触发告警所考虑的条件。
  • webhook:当告警触发时,被调用的服务端点列表。
  • gRPCHook:当告警触发时,被调用的远程gRPC方法的主机和端口。
  • Slack Chat Hook:当告警触发时,被调用的Slack Chat接口。
  • 微信 Hook:当告警触发时,被调用的微信接口。
  • 钉钉 Hook:当告警触发时,被调用的钉钉接口。

告警规则

告警规则有两种类型,单独规则(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-condition:true或者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%

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 告警配置指南的文章就介绍到这了,更多相关SkyWalking 告警配置内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
fastdfs+nginx集群搭建的实现
Mar 31 Servers
Nginx URL重写rewrite机制原理及使用实例
Apr 01 Servers
Nginx工作原理和优化总结。
Apr 02 Servers
Nginx实现负载均衡的项目实践
Mar 18 Servers
Nginx速查手册及常见问题
Apr 07 Servers
阿里云ECS云服务器快照的概念以及如何使用
Apr 21 Servers
Windows Server 2019 域控制器安装图文教程
Apr 28 Servers
nginx 配置缓存
May 11 Servers
Windows Server 2012 R2服务器安装与配置的完整步骤
Jul 15 Servers
Nginx报404错误的详细解决方法
Jul 23 Servers
apache基于端口创建虚拟主机的示例
Apr 22 #Servers
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
Apr 04 #Servers
Nginx工作原理和优化总结。
利用Nginx代理如何解决前端跨域问题详析
Apr 02 #Servers
Nginx URL重写rewrite机制原理及使用实例
Apr 01 #Servers
nginx限制并发连接请求数的方法
Apr 01 #Servers
Nginx已编译的nginx-添加新模块
You might like
PHP 第二节 数据类型之数值型
2012/04/28 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
React中如何引入Angular组件详解
2018/08/09 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
小程序实现悬浮搜索框
2019/07/12 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
js实现简单的随机点名器
2020/09/17 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
python的keyword模块用法实例分析
2015/06/30 Python
Python中subprocess的简单使用示例
2015/07/28 Python
python实现发送和获取手机短信验证码
2016/01/15 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
pygame实现打字游戏
2021/02/19 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/09/18 面试题
介绍一下write命令
2014/08/10 面试题
高三政治教学反思
2014/02/06 职场文书
供电工程专业求职信
2014/08/09 职场文书
2015年政务公开工作总结
2015/05/19 职场文书
食品安全主题班会
2015/08/13 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
JavaScript函数柯里化
2021/11/07 Javascript