skywalking是一款针对分布式系统的APM(应用性能监控)系统,特别是针对微服务、cloud native和容器化(Docker, Kubernetes, Mesos)架构, 也可称为分布式追踪系统。主要提供以下功能:
- 分布式追踪和上下文传输
- 应用、实例、服务性能指标分析
- 根源分析
- 应用拓扑分析
- 应用和服务依赖分析
- 慢服务检测
- 性能优化
skywalking 6.0 架构图如下:
本文主要对skywalking6.0版本的告警模块源码进行解读,纯属个人理解,仅供参考。启用告警模块必须要在application.yml文件中增加“alarm/default”项才会在moduleMagager中加载告警的Module。
告警规则定义
告警的核心是由’ alarm-setting.yml’文件中配置的一组规则驱动的。报警规则(Rules)的定义分为两部分,
1. rules。定义了触发报警的度量和条件,该部分映射为AlarmRule类。
- [Rule name] 规则名称,唯一标识,需以“_rule”结尾
- indicator-name 指标名称, oal脚本中度量名称(oal相关源码会在后续文章中进行解读),必须在oal脚本定义过。
- include-names 适用该规则的实体名称,可配置系统名称、服务名称。不配置默认所有实体均适用。
- threshold 阀值。
- op 操作符,和阀值一起使用。
- period 时间段,告警规则检查的时间段。
- count 在period时间窗口内,达到op阀值的次数后即触发告警。
- silence-period 静默期,默认情况下与period相同,表示在静默期时间内,同样的告警只会触发一次。
- message 告警推送的消息
2. webhooks。触发告警规则后发送告警消息的服务端url列表。
规则配置示例如下:
rules: # Rule unique name, must be ended with `_rule`. service_resp_time_rule: indicator-name: service_resp_time op: ">" threshold: 1000 period: 10 count: 3 silence-period: 5 message: Response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes. webhooks: - http://127.0.0.1/notify/ - http://127.0.0.1/go-wechat/ |
AlarmModule
org.apache.skywalking.oap.server.core.alarm.AlarmModule,实现 ModuleDefine 抽象类,Alarm管理器定义类。构造方法传入模块名name为 "alarm" 。
#services() 实现方法,返回 Service 类名:IndicatorNotify实现类NotifyHandler。
AlarmModuleProvider
org.apache.skywalking.oap.server.core.alarm.provider.AlarmModuleProvider,实现 ModuleProvider 抽象类,告警模块Alarm管理器组件服务提供者。
#name() 实现方法,返回组件服务提供者名 "default" 。
#module() 实现方法,返回组件类AlarmModule。