当前位置: 代码迷 >> 综合 >> 【弄nèng - Skywalking】入门篇(三)—— Skywalking告警模块使用
  详细解决方案

【弄nèng - Skywalking】入门篇(三)—— Skywalking告警模块使用

热度:15   发布时间:2024-01-30 10:38:46.0

文章目录

    • 一. 简介
      • 实体
      • 规则
      • 默认的metrics-name列表
      • alarm-settings.yml文件说明
    • 二. Webhook 告警回调
      • 消息属性如下
      • 对应JAVA实体类
      • Controller编写
      • 配置回调
    • 三. 动态配置
      • 修改application.yml
      • 使用配置中心
      • 测试
    • 项目推荐

该篇博客是Skywalking的告警模块的使用
官方文档:
https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-alarm.md

一. 简介

告警的核心由一组规则驱动,这些规则定义在config/ Alarm -settings.yml文件中。 告警规则的定义分为三部分。

  1. 告警规则:它们定义了应该如何触发度量警报,应该考虑什么条件。
  2. Webhook:当警告触发时,回调HTTP API地址。
  3. gRPChook:远程gRPC方法的主机和端口,告警触发后调用。

实体

定义范围和实体名称之间的关系

  • Service: Service name
  • Instance: {Instance name} of {Service name}
  • Endpoint: {Endpoint name} in {Service name}
  • Database: Database service name
  • Service Relation: {Source service name} to {Dest service name}
  • Instance Relation: {Source instance name} of {Source service name} to {Dest instance name} of {Dest service name}
  • Endpoint Relation: {Source endpoint name} in {Source Service name} to {Dest endpoint name} in {Dest service name}

规则

规则的key的含义如下:

endpoint_percent_rule 规则名称,将会在告警消息体中展示,必须唯一,且以 _rule 结尾
metrics-name 度量名称,取值可在 skywalking根目录/config/oal/*.oal 中找到,填写其中的key即可,对OAL感兴趣的,可前往 https://github.com/apache/skywalking/blob/master/docs/en/concepts-and-designs/oal.md 阅读其定义
include-names 将此规则作用于匹配的实体名称上,实体名称可以是服务名称或端点名称等
exclude-names 将此规则作用于不匹配的实体名称上,实体名称可以是服务名称或端点名称等
threshold 阈值
op 操作符,目前支持 >、<、=
period 多久检测一次告警规则,即检测规则是否满足的时间窗口,与后端开发环境匹配
count 在一个period窗口中,如果实际值超过该数值将触发告警(按每一分钟计算)
silence-period 触发告警后,在silence-period这个时间窗口中不告警,该值默认和period相同。例如,在时间T这个瞬间触发了某告警,那么在(T+10)这个时间段,不会再次触发相同告警
message 告警消息体,{name} 会解析成规则名称

默认的metrics-name列表

\config\oal目录下
在这里插入图片描述

alarm-settings.yml文件说明

选取其中一个规则说明
在这里插入图片描述
以上规则含义:

取最近10分钟窗口,在这10分钟内的每一分钟单独计算服务响应时间,如果到达三次超过1s就产生告警,在产生告警后的5分钟之内不再重复告警。

二. Webhook 告警回调

Webhook表达的意思是,当告警发生时,将会请求的地址URL(用POST方法),警报消息将会以 application/json 格式发送出去。

消息属性如下

  • scopeId:范围。所有范围都在DefaultScopeDefine中定义。
  • name:目标范围实体名称。服务名称
  • id0:作用域实体的ID与名称匹配。使用关系范围时,它是源实体ID。
  • id1:使用关系范围时,它将是目标实体ID。否则为空。
  • ruleName:您在中配置的规则名称alarm-settings.yml。
  • alarmMessage:报警文本消息。
  • startTime:告警时间戳。

消息事例:

[{"scopeId":1, //指的是告警的范围类型(定义常量见下文)"scope":"SERVICE", //指的是告警的范围类型(定义常量见下文)"name":"serviceA", //服务"id0":"123", // 作用域实体的ID与名称匹配。使用关系范围时,它是源实体ID"id1":"", "ruleName":"service_resp_time_rule", // 规则名称"alarmMessage":"alarmMessage xxxx", // 告警内容"startTime":1560524171000 // 发生时间}
]

对应JAVA实体类

public class AlarmMessage {private int scopeId;private String scope;private String ruleName;private String name;private String id0;private String id1;private String alarmMessage;private long startTime;
}

Controller编写

@RestController
@RequestMapping("")
public class SkyWalkingAlarmController {@PostMapping("/alarm")public void alarm(@RequestBody List<SkyWalkingAlarm> alarms) {// 接收到告警后的业务处理}
}

配置回调

修改alarm-settings.yml中的webhooks配置
在这里插入图片描述
重启oap后端服务生效
到这里 skywalking产生的告警就会发送到回调接口

三. 动态配置

告警这类的配置我们有可能会经常改动,每次都重启oap服务略显很low。没关系,skywalking帮我们解决了这个问题,就是动态配置
官方文档:传送门

SkyWalking配置大部分是通过application.yml OS系统环境变量设置的。同时,其中一些支持上游管理系统的动态设置。
目前,SkyWalking支持以下动态配置。
在这里插入图片描述

修改application.yml

动态配置在application.yml文件中,我们使用zookeeper当配置中心,只要修改SW_CONFIGURATIONSW_CONFIG_ZK_HOST_PORT就可以,如果你想指定路径就修改SW_CONFIG_ZK_NAMESPACE

application.yml文件中的配置都可以使用环境变量注入
在这里插入图片描述

使用配置中心

因为我们要把告警实现动态配置,所以我们要覆盖alarm-settings.yml文件。在zookeeper的/default路径下创建节点名称为alarm.default.alarm-settings,内容为alarm-settings.yml文件的完整内容复制过去。

测试

启动oap后端服务,观察启动日志,会打印新的告警配置信息。
修改zk中的节点alarm.default.alarm-settings内容,再次观察日志,也会打印新的配置信息。
oap后端服务默认是一分钟同步动态配置一次。可以修改SW_CONFIG_ZK_PERIOD进行变更。


项目推荐

IT-CLOUD :IT服务管理平台,集成基础服务,中间件服务,监控告警服务等。
IT-CLOUD-ACTIVITI6 :Activiti教程源码。博文在本CSDN Activiti系列中。
IT-CLOUD-ELASTICSEARCH :elasticsearch教程源码。博文在本CSDN elasticsearch系列中。
IT-CLOUD-KAFKA :spring整合kafka教程源码。博文在本CSDN kafka系列中。
IT-CLOUD-KAFKA-CLIENT :kafka client教程源码。博文在本CSDN kafka系列中。

开源项目,持续更新中,喜欢请 Star~