实时异常预警
来源:互联网 发布:简单的表单验证js代码 编辑:程序博客网 时间:2024/05/21 01:48
前言
线上业务的快速发展对系统稳定性提出了更高的要求。每次在系统出现异常波动时,如何及时、准确的发现并提醒业务方,显得尤其重要。
这里有很关键的两个要求:
- 及时:告警对实时性要求较高,必须尽可能尽早发现问题,才能最大程度上减小损失。
- 准确:准确的告警能提高业务方对于告警的敏感性,如果存在大量的误报,则为导致业务方对告警已经麻木,不能及时处理异常。
实时异常检测
异常识别基于历史数据,获取当前时间点的可能数值范围,当实际值在该范围以外时,即认为数据异常。
1. 同比 & 环比
最最简单的方式当然是当同比或环比变化超出某一阈值时,即认为数据异常。但是这两种方式存在一些问题:
- 环比:仅使用当前值的上一个值,当数据出现周期性变化时,可能会出现周期性告警(如每天的4点05分有某一活动,数据周期性陡增)。
- 同比:仅使用当前值上一周期的一个值,当某一周期数据整体性上涨时,则会持续告警(如淘宝双十一的数据比前一天同比增长很大比例)
如果将这两种方式的优势结合起来,同时考虑数据的整体变化和周期性变化,甚至考虑到历史所有的数据对于当前值的影响,预测结果的误差将会更小。
2. 预测器 & 比较器
异常检测模型分为两个部分,预测器和比较器。历史数据作为预测器的输入,输出当前时间点的预测值,并将当前时间点的预测值和真实值通过比较器检测数据是否异常。
Hot-Winters预测器
Hot-Winters又称三次指数平滑,基于历史时间序列预测当前值。它将时间序列分为三个部分,残差分量(s),趋势分量(t),周期分量(p),使用(x)表示预测值。累加式公式如下:
其中,趋势分量主要表达时间序列有保持上一个变化态势的趋势,而周期分量主要表达时间序列周期性变化。
趋势变化图:
周期变化图:
在我们的业务中,数据存在明显的周期行变化,但不存在明显的趋势变化,所以我们考虑去除趋势分量(其中k表示周期内时间点个数,(i-k)表示上一周期当前时间点的值)
α和γ则代表了历史时间序列对于当前值的影响比重,越大则表示影响越小。
最终的预测结果如下:
比较器
得到预测值和真实值之后,如果检测数据异常呢?
首先猜想误差应该集中在某一个范围,通过画出误差的直方分布图发现,误差值近似于正态分布
95%预测区间
对于正态分布,在统计学中有一个95%预测区间的概念,即有95%的可能性数值落在预测区间中。
95%预测区间的范围为 [μ - 1.96*δ, μ + 1.96*δ],其中μ表示期望值,δ表示标准差。
- [μ - 1.96*δ, μ + 1.96*δ]:95%区间
- [μ - 2*δ, μ + 2*δ]:95.44%区间
- [μ - 2.58*δ, μ + 2.58*δ]:99%区间
所以最终采用前50个时间点的误差值来计算当前值的预测区间,超出部分则认为数据异常。
关于Hot-Winters公式,将在下一篇博客详细说明
- 实时异常预警
- 非实时日志如何elastalert预警
- 判断数据变化的标准以及预测、异常预警
- 中国电信欢go建立话费话费异常预警(国际)
- 你用着单屏多任务系统,却想打造实时预警/分析中心
- 飞鸽快信微信消息-LINUX服务器告警、状态监控预警、程序报警提醒等消息实时推送工具
- 飞鸽快信微信消息-LINUX服务器告警、状态监控预警、程序报警提醒等消息实时推送工具
- biee预警
- 盈利预警
- 颜色预警
- 预警信息
- dbms_alert(预警)
- 常见异常总结(实时更新)
- 颜色预警实例
- AUTO病毒81920预警
- Compiere预警开发文档
- 金山毒霸每日病毒预警
- 金山病毒预警:
- Java集合操作
- git第一次推送
- 进程状态
- angular 使用 ui-router 设计网页
- 机器学习3-无监督学习
- 实时异常预警
- 爱运动管理系统使用指南
- 优达机器学习:误差原因
- Springboot使用 prometheus监控
- python网络编程--IO多路复用之epoll
- 【数据结构】线性表 Python 实现
- Java环境变量配置&解决版本不一致问题
- COCOS2DX STUIDO clone错误
- CCF CSP 201709-1 打酱油