时序异常检测现状
在运维领域,运维人员通过对各种软硬件系统的监测指标进行异常检测,这是发现故障或风险的关键技术。根据应用场景和需求的不同,指标异常检测方法主要可分为单指标异常检测与多维指标异常检测两类。单指标异常检测关注指标级别的异常状况(指标的突增、突降、抖动等);而多维指标异常检测关注实体(例如服务器、系统)级别的异常。
表征操作系统正常运行的指标通常有成百上千个,如内存使用率、磁盘 I/O、CPU使用率、网络吞吐率等等。一旦操作系统运行异常,如内存泄漏、磁盘故障、CPU超载、网卡故障等故障发生,操作系统中的一个或多个指标都会不同程度地偏离正常模式。相较于对每一个单指标时间序列进行异常检测,将多维指标时间序列作为整体进行异常检测具有如下优势:
运维工程师关心操作系统整体是否异常而非其某个指标的瞬时异常。
分布式系统由众多操作系统结合起来完成特定功能,每一个操作系统上监控指标多样,对每个指标时间序列进行异常检测模型的训练和维护需要耗费大量的人力物力资源。
通常一个异常事件会引起多个指标出现异常,对于每一个指标进行异常检测容易产生大量冗余报警。
多维指标异常检测能通过分析指标间复杂的关联关系,挖掘出单指标异常检测不能发现的潜在异常,减少漏报。
因此,通过针对操作系统的多维指标时间序列整体建模,来实现对操作系统故障的高效、实时、自动化检测。
问题与挑战
在操作系统场景下,有时业务性能的下降相对不够明显,现有的方法难以识别出微小的异常;此外,现有方法仅仅是在检测时预测可能的正常数据模式,还需要通过重构误差将真实数据和预测数据的差异展现出来,但是如果仅仅凭借重构误差的变化趋势来判断是否故障的话,会有很大的滞后性,因此需要一个自动的阈值选择方案来及时地发现异常。最后,上述基于深度学习的异常检测方法的核心是通过学习训练集正常的指标模式来发现检测时与正常情况下的异常指标模式,但是当训练集混入故障时的数据时,上述方法的异常检测效果将难以保证。
综上所述,在操作系统场景下系统故障发现主要面临以下挑战:
挑战一:现有的方法对多维指标的微小程度的异常不敏感。
挑战二:多维指标的异常分数阈值难以准确、灵活地确定。
挑战三:多维指标数据中异常数据时模型检测效果不稳定。
技术方案
如图1所示,操作系统灰度故障发现分为离线训练(实线箭头)和在线检测(虚线箭头)两个阶段。
离线训练阶段,该模块首先会对数据进行预处理,例如对缺失值进行插入补充,分别对各个指标进行平滑平均减少噪声和抖动干扰,将指标的取值范围裁剪到均值周围,控制对异常分数的贡献程度,之后根据均值和方差对训练集数据进行标准化;在数据预处理之后,采用基于压缩感知的离群点过滤技术找出多维指标中的离群点并使用其附近的正常值进行替换;然后基于过滤之后的训练集,采用设计好的多指标重构模型对训练集的数据进行学习和重构,通过计算重构值和真实之间的误差得到所有指标的异常分数;最后采用 SPOT 模型对训练集的异常分数进行拟合,SPOT 输出的阈值可以在线更新,来适应多维时序指标的变化。
在线检测阶段,首先利用训练集计算保存的均值和方差对测试数据进行相应的预处理操作,接着将预处理后的数据输入到多指标重构模型得到重构误差(异常分数),最后该异常分数由离线阶段训练好的 SPOT 模型判断是否超出一定的异常阈值,如果异常分数超出阈值则输出故障告警和各个指标的故障程度。
图1 操作系统灰度故障发现模块示意图
实验结果
操作系统观测工具(包括CPU、网络、I/O、内存等)采集反映操作系统性能的各类指标,如:CPU利用率相关指标、内存使用相关指标、网卡性能相关指标、磁盘 I/O 相关指标、TCP 传输性能相关指标、ext4 文件系统相关指标、进程相关指标等。
其中部分指标如图2所示,cpu 指标基本没有变化,磁盘指标有冲高,确定不是故障时间范围,tcp 传输性能指标显示周期性上升。tcp 传输性能指标可能能表现出当前系统有异常。
图2 cpu、磁盘、tcp指标图
在实验室环境下通过故障注入测试验证持续两周多时间,约370000+个采样数据点,其中近340000个正常业务数据采样点,约30000+个故障注入数据采样点,其中,检测结果如表1所示,网络 IO 类任务962个,检测准确率 F1-score 91%,磁盘 IO 类任务645个,检测准确率 F1-score84%,总体任务1607个,检测准确率 F1-score86%。
实验总体准确率较高,可以辅助运维人员发现系统故障,单个任务的检测耗时75s, 基本满足线上异常检测任务的需求。
表1 网络磁盘检测精度
场景 | 任务个数 | 平均耗时(s) | Precision | Recall | F1-score |
---|---|---|---|---|---|
All | 1607 | 75 | 0.94 | 0.80 | 0.86 |
网络IO | 962 | 73 | 0.96 | 0.87 | 0.91 |
磁盘IO | 645 | 78 | 0.94 | 0.76 | 0.84 |
加入我们
文中所述的 gala-anteater 项目的相关源码均已在 openEuler 社区开源。如果您对相关技术感兴趣,可以访问源码仓https://gitee.com/openeuler/gala-anteater,欢迎您的围观和加入。
本文分享自微信公众号 - OpenAtom openEuler(openEulercommunity)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。