对于服务的异常信息,比如接口有较长延迟,skywalking也做出了告警功能
kywalking中有一些默认的告警规则,如下:
- 最近3分钟内服务的平均响应时间超过1秒
- 最近2分钟服务成功率低于80%
- 最近3分钟90%服务响应时间超过1秒
- 最近2分钟内服务实例的平均响应时间超过1秒
当然除了以上四种,随着Skywalking不断迭代也会新增其他规则,这些规则的配置在config/alarm-settings.yml
配置文件中
每个规则都由相同的属性组成,这些属性的含义如下图:
如果想要调整默认的规则,比如监控返回的信息,监控的参数等等,只需要改动上述配置文件中的参数即可。
当然除了以上默认的几种规则,skywalking还适配了一些钩子(webhooks)。其实就是相当于一个回调,一旦触发了上述规则告警,skywalking则会调用配置的webhook,这样开发者就可以定制一些处理方法
当然这个钩子也是有些规则的,如下:
- POST请求
- application/json 接收数据
- 接收的参数必须是AlarmMessage中指定的参数。
注意:AlarmMessage这个类随着skywalking版本的迭代可能出现不同,一定要到对应版本源码中去找到这个类,拷贝其中的属性。这个类在源码的路径:org.apache.skywalking.oap.server.core.alarm
,如下图:
@Slf4j @Api(tags = "AlarmController") @RequestMapping("/alarm") @RestController public class AlarmController { @ApiOperation("接受skywalking告警") @PostMapping("/receive") public void receive(@RequestBody List<AlarmMessage> list) { log.info("/alarm/receive:" + JSON.toJSONString(list)); } }
接口定制完成后,需要在config/alarm-settings.yml
配置文件中添加这个钩子,如下图:
调用上面案例中的睡眠两秒的接口,多调用几次,则会触发告警,控制台打印日志如下: