指标体系的应用场景 - 动态阈值
在指标体系的应用场景中,基于指标的告警也是指标数据的一个重要应用。
基于指标的告警一般有以下几种类型:
- 静态阈值:大于/小于 某个具体的值则产生告警(对于明细数据,还可以用中位值/分位值进行阈值判断)
- 同环比: 同比/环比 变化率/变化值 上升/下降超过多少产生告警
- 动态阈值: 对比历史同时间段的基线值 产生告警
- 异常检测:基于历史数据检测度量的异常行为。异常检测会检测指标的行为何时与过去不同,并考虑趋势和季节性
- 离群点异常检测:离群点异常检测组内与其他成员相比异常的成员,主要用于判断指标的分组组合中哪些和其他组合差异过大
- 预测告警:预测指标在未来的表现。通过在超出阈值之前发出警报
本篇主要介绍动态阈值的实现方案:
需求背景
例如目前指标库中已经有了一个交易量指标,除了可以对交易量指标做统计报表,客户还希望能够基于历史数据反映出该指标的动态变化幅度(能够基于变化幅度进行topN倒排展示),并且能够评估该变化幅度是否在正常范围内(产生告警)。
交易码交易量增幅展示的效果:
业务系统 | 交易码 | 交易量基线值 | 当前交易量 | 增幅 |
---|---|---|---|---|
ICOP | EA1000 | 100 | 300 | 200% |
ICOP | EA1001 | 200 | 100 | -200% |
ICOP | EA1002 | 50 | 60 | 20% |
在列表中,是按对比基线值的变化来排序,列出前5或前10的交易码数据。
需求可总结为俩方面:
- 基于历史数据反映出当前指标值的一个变化幅度
- 评判该变化幅度是否异常
需求一只需要拉取一段时间内的指标数据,进行平均值计算得到基线值,然后用当前指标值 减去 基线值 就可以得到 偏离值。偏离值也入指标体系,这样就可以对变化值做可视化统计和告警配置
需求二的实现有两种方式
- 基于基线值的偏离值判断(偏离多少、偏离百分比、偏离标准差多少倍)
- 引入异常检测算法
因为需要将计算的偏离值作为正常指标引入指标体系,所以更适合用动态阈值方案
动态基线配置
时间窗口值
时间窗口有俩种类型:
一种为动态时间窗口,最近N天;
一种为固定时间窗口,选取一个时间段
基线趋势类型:
- 无趋势
- 每日小时趋势
- 每周小时趋势
- 每月小时趋势
这里有个数据粒度的问题,目前这些趋势都是基于小时级别的数据进行基线值计算,如果数据基座性能给力,可以考虑更细粒度的基线值计算
基线值计算
1)无趋势:当前小时往前推N天,平均小时的指标值;(比如当前为8点半,无趋势就是从8点之前往前推N天的平均小时的指标值,取指标体系中的小时粒度表,具体算法:sum(metric_value)/sum(count))
2)每日小时趋势:比如当前为8点半,那就是计算过去N天每天8点的指标值的平均值。
N天中的天数 | 小时点 | 指标值 | 指标次数 |
---|---|---|---|
第一天 | 8点 | 10 | 5 |
第二天 | 8点 | 12 | 6 |
第三天 | 8点 | 13 | 7 |
第N天 | 8点 | 15 | 9 |
N天当前小时平均值 = (10+12+13+14+15) / (5+6+7+8+9) |
同理其他趋势的计算
基线值的应用- 阈值检测
最后可以对偏离值做阈值检测,出发告警到下游的告警体系:
- 偏离基线值
- 偏离基线值 多少 产生告警
- 偏离基线值 n倍标准差 产生告警
- 偏离基线值 n% 产生告警
- 大于/小于基线值