SkyWalking提供了告警功能,保证服务在出现异常时能够及时的告警,通知相关人员进行问题排查。

告警的核心由规则驱动。这些规则被定义在/你的路径/apache-skywalking-apm-bin-es7/config/alarm-setting.yml文件中,告警规则定义有2部分构成。skywalking发送告警的基本原理是每隔一段时间轮询skywalking-collector收集到的链路追踪的数据,再根据所配置的告警规则(如服务响应时间、服务响应时间百分比)等,如果达到阈值则发送响应的告警信息。发送告警信息是以线程池异步的方式调用webhook接口完成,(具体的webhook接口可以使用者自行定义),从而开发者可以在指定的webhook接口中自行编写各种告警方式,邮件、短信告警等等。

Skywalking 服务失败率监控指标 skywalking 告警_apm

 

规则(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
}]