文章目录
- 一. 简介
- 实体
- 规则
- 默认的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文件中。 告警规则的定义分为三部分。
- 告警规则:它们定义了应该如何触发度量警报,应该考虑什么条件。
- Webhook:当警告触发时,回调HTTP API地址。
- 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_CONFIGURATION
和SW_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~