Apache SkyWalking告警是由一组规则驱动,这些规则定义在config/alarm-settings.yml文件中。
告警规则
告警规则定义了触发告警所考虑的条件。告警规则有两种类型,单独规则和复合规则,复合规则是单独规则的组合。这里重点介绍一下单独规则,单独规则主要有以下几点:
规则名称:在告警信息中显示的唯一名称,必须以_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:该规则触发时,发送的通知消息。
默认告警规则
过去 3 分钟内服务平均响应时间超过 1 秒
最后2分钟服务成功率低于80%
最近 3 分钟内服务响应时间超过 1s 的百分比
服务实例在过去 2 分钟内平均响应时间超过 1s,并且实例名称与正则表达式匹配
过去 2 分钟内端点平均响应时间超过 1 秒
过去 2 分钟内数据库访问平均响应时间超过 1 秒
过去 2 分钟内端点关系平均响应时间超过 1 秒
hook配置
hook是向外界发送警报信息的一种方式,SkyWalking支持多个相同类型的hook,主要包括
webhook:当告警触发时,被调用的服务端点列表。
gRPCHook:当告警触发时,被调用的远程gRPC方法的主机和端口。
Slack Chat Hook:当告警触发时,被调用的Slack Chat接口。
微信 Hook:当告警触发时,被调用的微信接口。
钉钉 Hook:当告警触发时,被调用的钉钉接口。
飞书 Hook:当告警触发时,被调用的飞书接口。
WeLink Hook:当告警触发时,被调用的Welink接口。
PagerDuty Hook:当告警触发时,被调用的PagerDuty接口。
Discord:当告警触发时,被调用的PagerDuty接口。
钉钉Hook配置
我们可以按以下方式配置钉钉的 Webhooks ,告警消息将按 Content-Type 为 application/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
关于钉钉自定义机器人配置方式,可以参考
https://open.dingtalk.com/document/orgapp/application-types
关于skywalking更加详细的告警配置信息可以参考
https://gitcode.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-alarm.md
我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!