编辑: 旋风 | 2017-12-26 |
3 整体思路 当前互联网应用种类繁多, 需要监测的度量达到 上万规模, 因此难以通过设定静态阈值进行异常检测, 因此我们尝试将监测度量看成一个整体进行异常评估. 主成分分析(Principal Component Analysis, PCA)可以 计算机系统应用http://www.c-s-a.org.cn 2016年第25卷第10 期104 系统建设 System Construction 获得当前数据集的主方向, 主方向的偏离程度即可衡 量当前数据的异常程度[8] . PCA 算法只需要保存上一 次的计算结果即可得到算法需要的协方差矩阵, 具有 较低的时间复杂度, 因此适合在度量动态变化的容器 虚拟化环境中进行在线异常诊断的应用场景. 为了保证监测任务不给应用系统增加额外的开销, 本文根据 PCA 算法得到的异常程度动态调整监测周 期, 在异常程度较小时, 使用较大的监测周期, 在异 常程度较大时, 使用较小的监测周期. 通过这种方式 可以在不降低监测准确性与及时性的前提下减小监测 开销. 本文采用了非侵入的监测方式, 通过容器自发现 引擎自动发现当前物理机上处于运行状态的容器, 并 自动将容器注册成为监测平台中的监测项, 然后采用 并行收集的方式获取容器的性能数据, 这些数据一部 分持久化到数据库, 另一部分直接发送给异常检测模 块. 异常检测模块将每个容器的数据分开存储, 对每 个容器的性能数据运行 PCA 算法, 得到当前数据分布 的主方向, 然后计算当前主方向与上一次主方向的余 弦相似度作为当前样本数据的异常程度, 同时对判定 为异常的容器及时报警. 监测周期调谐器根据异常检 测模块得到的异常程度动态调整监测周期.
4 监测方法 4.1 监测度量选择 PCA 算法处理线性结构有很好的效果, 然而实际 中的监测数据矩阵并非线性结构. 因此需要选取监测 数据中满足线性关系的度量进行分析. 本文根据历史 数据, 利用回归分析筛选出对于异常检测具有显著影 响的度量作为 PCA 算法的输入. 在一元线性回归分析中, 通常可以首先通过散点 图判断变量x与y之间是否存在线性关系. 如果散点图 上的实验数据接近于某一条直线, 便可直观地初步认 为二者之间存在线性关系. 但在多元线性回归分析中 情况略有不同. 首先无法用直观的方法帮助判断度量 间是否具有线性关系, 为此必须对回归方程进行显著 性检验. 其次在多个自变量中, 每个自变量在异常检 测中的重要性程度是不同的, 这表现在回归系数中就 是有的绝对值很大, 有的很小或接近于零, 这就需要 对回归系数进行显著性检验. 本文在线下利用回归分析的方法, 根据历史数据 得到具有线性关系且对异常诊断影响显著的度量, 在 线上只收集这些度量构建矩阵, 利用 PCA 进行分析. 4.2 面向动态度量的异常检测 使用 PCA 进行异常程度评估的步骤包括: 1)如果 有m条n维数据, 将原始数据按列组成 n 行m列矩阵 X;
2)将X的每一行进行零均值化处理;
3)求出协方差 矩阵;
4)求出协方差矩阵的特征值及对应的特征向量;
5)将特征向量按特征值大小从上到下按行排列成矩阵, 取前 k 行组成矩阵 P;
6)Y=PX 即为降维到 k 维后的数 据. PCA 算法第
4 步计算得到的特征向量就是数据集 分布的主方向. 同时, 计算特征向量使用的协方差矩 阵和平均值都对离群点比较敏感, 所以离群点会导致 数据集主方向有较大的改变, 如图