内存(DRAM)故障是常见的计算机硬件故障之一。在现在的大规模数据中心中,常常有内存故障导致的宕机事件出现。为了降低非预期的宕机率,预测潜在的内存故障是重要手段之一。
本文通过对服务器日志的分析,综合服务器的一些静态信息和状态信息,利用机器学习模型,进行服务器内存故障进行预测。
特征选择
(一)内存预测相关日志
服务器记录的和内存故障相关的特征可以分为三类,分别是服务器状态信息,服务器的日志记录,以及服务器的静态信息记录。
状态信息
状态信息包括服务器负载,CPU使用率,内存使用率,缓存使用率,磁盘使用率,流入流出流量,CPU温度,内存温度,内存功耗,总功耗等,可以反应出服务器的整体运行状态。状态信息都是时间序列数据,每分钟都在变化。
日志信息
日志信息是系统运行过程中产生的与硬件状况直接相关的日志,如mcelog 等,日志信息主要来自带内和带外日志信息。
静态信息
静态信息是指在预测任务的时间区间内保持不变的、或是表征服务器和 内存属性的特征。服务器相关特征包括服务器的厂商,部件Firmware信息,上线时间、所在城市、所属应用分组等,内存相关特征则包括内存的speed, manufacturer, type等。
(二)如何选取预测特征
为了筛选出对内存故障预测有帮助的特征,降低训练数据的特征维度,我们使用了不同的方法进行了特征选择。
T检验的方法
针对特征中的状态序列信息,我们采用T检验的方法来检验特征在内存故障发生前六天内的均值和正常服务器在相同时间段内的均值有没有显著性差异。经过实验,发现三个参数的差异性较为显著,P值小于0.05。具体如表1所示。
因此,我们选择状态信息中的,XXXX1、XXXX2、XXXX3 作为模型的输入特征。
表1. 重要性较高的时序特征T检验结果
系统日志选取
对于日志信息,我们统计了发生内存故障的服务器出现各不同日志内容的数量。为了让预测具有意义(预测后还有时间做出反应),我们只统计了内存故障发生5分钟以前的日志。结果发现出现最多的是xxx log 相关的信息。
因此,xxx log作为模型的输入参数。
表2.内存故障机器中不同日志机器数量
静态信息处理
针对静态信息,因为它们都是字符串,首先我们对这些特征各自进行编号。因为这些编号是人工引入的,而且是离散值,难以进行显著性的统计。我们采用基于互信息的特征选择方法,来对不同特征进行排序。互信息表达的是该特征与目标值的相关性程度。实验表明内存的三个特性与内存故障的相关性较大。
因此选取XXX1、XXX2、XXX3 3个静态信息作为输入。
表3. 静态信息相关性程度
静态信息 | XXX1 | XXX2 | XXX3 |
---|---|---|---|
相关性系数 | 0.9 | 0.6 | 0.1 |
数据预处理
数据预处理包括滑窗处理,正负样本平衡,和宕机标签移动。
滑窗针对的是高层信息和日志这样的时序序列。
虽然内存故障是主要硬件故障之一,但是对于数据中心的所有机器来说,发生故障的还是少数。所以存在正(内存故障)负(正常)样本比例悬殊的问题。尤其当数据还是时序序列时,负样本因为滑窗会增加很多倍,达到一比数万的比例。如此悬殊的正负样本比例,倘若不经任何处理,模型将难以训练,模型会很容易把所有样本都预测为负样本。所以需要合适的算法,调整正负样本的比例。
此外,因为机器的故障与机器的使用情况息息相关,存在在一段时间内有许多相关日志,但是一段时间后才发生内存故障的状况,这可能是这一段时间恰好使用不频繁或者未触碰到故障位置造成的。为了不干扰模型的判断,此时需要将宕机标签向前移动到最近存在相关日志的那一段时间。
模型选择
内存故障预测任务本质上是一个分类任务。模型在拿到相关的输入特征后判断该服务器是否会发生内存内存故障导致的宕机。因此在模型的选择和研究方面,我们首先选择有监督的分类模型。
经过对比,我们最终使用了基于树的集成模型,来进行预测。树模型的优点包括:可以处理数字和数据的类别;可解释性强,能够得到判断依据,还能输出特征重要性排序;需要的数据量不大;泛化能力强,对正负样本平衡性没有过分敏感。相比于其他传统机器学习模型,如K近邻模型(KNN),支持向量机(SVM),决策树等算法,拥有更强的拟合能力,能够达到更好的实验结果。
预测效果
以下是本文的预测模型跟业界预测效果的对比,相比当前业界水平,本文的预测模型recall 和 precision 提升至少10% 。