基于统计的预警:同环比预警深度剖析

UAVStack预警功能简介git

UAV.Monitor提供了对全维监控指标的预警功能,各种型的监控指标都可配置预警策略,当预警策略被触发后,可经过邮件、HTTP调用等方式进行通知报警,并会根据预警时间频率等对报警动做进行压制。github

预警分为流式预警、统计预警以及混合预警三种:express

  • 流式预警会对采集到的每个监控指标数据进行预警判断,达到实时预警的目的。
  • 统计预警是对指标在固定时间段统计值的预警,一般都是定时进行预警断定。
  • 混合预警则是将流式预警与统计预警结合进行预警。同环比预警属于统计预警的一种。

什么是同环比预警缓存

首先介绍一下同环比的概念,同环比描述的是统计数据的增/降幅度,即某一时间段(本期)的统计结果与以前另外一相同长度时间段(基期)的比较结果。架构

同比表示的是本期与上一个同期的比较,好比今年4月与去年4月比较,今天8点到9点与昨天8点到9点比较;环比表示的是本期与上期的比较,现在年4月与今年3月比较,今天8点到9点与7点到8点比较。网站

同环比预警则是对一段时间内监控指标的统计结果同比上一同期(或环比上期)的增/降幅进行预警,即指标的同/环比计算结果超过了策略指定的增/降幅度则进行报警。orm

同环比预警的实现cdn

1.预警策略blog

预警条件与动做由预警策略定义,预警策略的结构以下:文档

strategy

{

"type":"",

"instances":[],

"conditions":[],

"relations":[],

"actions":[]

}

condition {

"expressions":[]

}

  • 一个预警策略(strategy)包含多个预警条件(condition),condition是最小的预警断定元。
  • 每一个condition可包含多个表达式(Expression)。预警表达式定义了单一预警条件,表达式又分为统计(stat)表达式和流式(stream)表达式两种,分别对应统计预警条件与流式预警条件。
  • relations中各relation对应各condition中策略表达式Expression的逻辑判断关系。
  • instances表示该预警影响的实例。
  • actions表示预警触发后的报警动做。
  • type表示预警策略的类型,根据包含的表达式种类分为含统计表达式的统计(stat)策略和只含流式表达式的流式(stream)策略。

2.同环比预警表达式定义

同环比的计算公示为:同/环比值=本期数-基期数,同/环比率=(本期数-基期数)÷基期数×100%。根据计算公式,咱们须要的输入条件以下:

1)需预警的指标名:监控的各项数值型指标都可做为预警的指标,如CPU、访问量等。

2)本期时间段与基期时间段:因为预警是实时性动做,因此咱们把时间段限制在了24小时内,对于大于24小时好比一周或一个月的统计值或同环比,以周报或月报的形式直接统计效果更好。基期时间则根据同比周期或环比间隔计算得出。

3)指标在时间段内统计值的计算方式:同环比比较的是指标在一段时间内的统计值,统计方式有求和、求平均等。因为UAV的监控历史值都存储在OpenTSDB,可经过OpenTSDB自带的聚合操做进行统计值的计算。

4)预警阈值:增/降幅上限,可设置为数值型阈值或百分比阈值。

同环比预警属于统计预警,因此同环比预警表达式也是统计(stat)类型的表达式。综上,同环比预警表达式结构以下。

expression

{

"type":"stat",

"arg":"" //预警指标

"time_from":"" //初始时间段-from

"time_to":"" //初始时间段-to

"interval":"" //环比间隔(同比则此项为空)

"unit":"" //同比周期(环比则此项为空)

"aggr":"" //统计方式

"upperLimit":""//比值上限

"lowerLimit":""//比值下限

}

3.预警策略断定原理

预警模块经过流式条件或定时任务触发对预警表达式的断定,过程以下:

当预警策略断定被触发时,各condition独立进行断定,遍历其中的各个Expression进行断定,而后将Expression断定结果按relation定义的逻辑关系进行组合判断,若结果为true则将结果汇总到策略断定结果,而后整合策略断定结果进行报警。

4.同环比预警断定原理

同环比预警属于统计预警的一种,因此同环比的预警流程就是统计预警的预警流程,预警模块启动一个用于统计策略断定的Timer,每分钟(由于统计表达式的时间都是以分钟为单位,因此每分钟轮询一次便可)轮询一次策略,并触发统计策略的断定。

当策略被触发后,便会遍历各condition下的表达式,进行一一断定,定时任务触发表达式断定的规则以下:

当最小断定元condition内只有统计表达式时,遍历断定各统计表达式,首先会断定是不是统计表达式的断定时间,同环比表达式根据属性值time_from,time_to和环比间隔或同比周期来肯定。

若不是断定时间,考虑到多个统计表达式的组合断定状况时,各表达式的断定时间可能不一致,咱们会取出缓存中上次的未过时的断定结果返回。

如果断定时间,则进行同环比计算断定,构造OpenTSDB查询语句调用API查询本期值与基期值,计算得出同/环比值(率),并与阈值进行比较得出断定结果,结果会缓存到Redis,这里也会将此condition的断定置为有效,由于若是condition里的表达式都未达到断定时间,此次断定实际上是无效的。

若condition内既有统计表达式又有流式表达式(即为混合预警)时,统计表达式会进行正常的断定运算操做,但对于定时任务触发的流式表达式则直接返回false,所以condition断定结果也为false。

混合预警的最终断定是在流式条件触发预警策略时产生,condition中的流式表达式的断定会正常进行,统计表达式的断定过程以下:

若是流式条件的触发时间在表达式的断定时间(偏差一分钟)内,会直接从缓存获取由定时任务触发策略时计算得出的未过时的判断结果返回,返回结果即可与流式表达式的结果一同得出混合预警的结果。

断定结果返回后,会根据预警表达式信息及断定结果生成报警信息。如图:

以上即是同环比预警的完整实现过程。

**同环比预警的应用 **

实时预警关注的是系统的瞬时状态,同环比预警则反映了指标的变化趋势以及与过去同期相比的波动状态。

好比系统服务访问量异常检测,因为系统量可能根据时间有必定的规律性,如周一到周五访问量大,周末访问量小。若采用流式预警只能定义一个预警阈值,不能根据不一样时间设置不一样的预警阈值,这时能够在业务高峰时间对系统访问量指标配置按周同比预警,即可对业务访问量异常作出及时有效的报警。

有时单一的同环比预警也不足够,好比刚才的状况下,若是咱们不只关心访问量的相对波动还须要报警时的平均响应时间大于某一阈值才报警,这时就须要与流式预警进行结合预警。

同环比预警丰富了预警体系,与流式预警相结合更有助于对系统异常与业务异常的及时精确发现。

官方网站 开源地址

UAVStack已在Github上开放源码,并提供了安装部署、架构说明和用户指南等双语文档,欢迎访问-给星-拉取~~~

扫一扫下方二维码,关注一个不会让你失望的公众号

相关文章
相关标签/搜索