SkyWalking提供了告警功能,保证服务在出现异常时能够及时的告警,通知相关人员进行问题排查。
告警的核心由规则驱动。这些规则被定义在/你的路径/apache-skywalking-apm-bin-es7/config/alarm-setting.yml文件中,告警规则定义有2部分构成。skywalking发送告警的基本原理是每隔一段时间轮询skywalking-collector收集到的链路追踪的数据,再根据所配置的告警规则(如服务响应时间、服务响应时间百分比)等,如果达到阈值则发送响应的告警信息。发送告警信息是以线程池异步的方式调用webhook接口完成,(具体的webhook接口可以使用者自行定义),从而开发者可以在指定的webhook接口中自行编写各种告警方式,邮件、短信告警等等。
规则(rules)
报警规则主要有以下几点:
- Rule name。在告警信息中显示的唯一名称。必须以_rule结尾。
- Metrics name。 也是oal脚本中的度量名。只支持long,double和int类型。详细参数可见解压包下/你的路径/apache-skywalking-apm-bin-es7/config/ official_analysis.oal文件
- Include names。其下的实体名称都在此规则中。比如服务名,终端名。
- Threshold。阈值。
- OP。 操作符, 支持 >, <, =。欢迎贡献所有的操作符。
- Period.。多久告警规则需要被核实一下。这是一个时间窗口,与后端部署环境时间相匹配。
- Count。 在一个Period窗口中,如果values超过Threshold值(按op),达到Count值,需要发送警报。
- Silence period。在时间N中触发报警后,在TN -> TN + period这个阶段不告警。 默认情况下,它和Period一样,这意味着相同的告警(在同一个Metrics name拥有相同的Id)在同一个Period内只会触发一次。
告警样例如下:该规则的为endpoint_percent指标在10分钟内有3分钟低于75,如果不处理告警,告警每10分钟触发一次
rules:
#规则的名称,必须唯一
endpoint_percent_rule:
#指标,对应的值必须是long、double后者int
metrics-name: endpoint_percent
#阈值
threshold: 75
#操作符
op: <
#评估度量标准的时间长度
period: 10
#满足多少次指标符合条件后,才会触发报警
count: 3
#检查多少次,闹铃后保持沉默,闹铃触发后,默认同周期。
silence-period: 10
(网络钩子)Webhook
SkyWalking 的告警 Webhook 要求对等方是一个 Web 容器. 告警的消息会通过 HTTP 请求进行发送, 请求方法为 POST, Content-Type 为 application/json, JSON 格式基于 List<org.apache.skywalking.oap.server.core.alarm.AlarmMessage>, 包含以下信息.
- scopeId. 所有可用的 Scope 请查阅 org.apache.skywalking.oap.server.core.source.DefaultScopeDefine
-
name.
目标 Scope 的实体名称.
-
id0. Scope
实体的 ID.
-
id1.
未使用.
-
alarmMessage.
报警消息内容.
-
startTime.
告警时间, 位于当前时间与 UTC 1920/1/1 之间.
以下是一个样例(serviceA于serviceB是一个你自己实现的服务)
[{
"scopeId": 1,
"name": "serviceA",
"id0": 12,
"id1": 0,
"alarmMessage": "alarmMessage xxxx",
"startTime": 1560524171000
}, {
"scopeId": 1,
"name": "serviceB",
"id0": 23,
"id1": 0,
"alarmMessage": "alarmMessage yyy",
"startTime": 1560524171000
}]