当前位置: 首页 > 科技观察

巧妙利用机器学习定位云服务器故障

时间:2023-03-17 16:58:49 科技观察

背景对于每一个单台主机故障,我们都需要定位其背后真正的故障原因,以更换相应的部件,并统计各个部件的故障率。因此,故障定位和分析的人力消耗也在增加。希望通过机器学习的方法学习历史故障主机的日志数据,沉淀一些模型,实现对新主机故障原因的自动分析,从而提高处理提高主机工单效率,解放人力,同时分析故障的一些规律,进而实现对故障的预测。目标1、自动分析主机故障,准确定位故障原因;2、当故障分类准确度足够准确时,可实现自动计费,无需人工参与;3、各主机实时流处理此类数据实现了对部分故障的预测。数据1.dmesg:机器死机前的最后一屏,包括netconsole数据;2、mcelog:系统检查硬件错误产生的日志;3.sel:系统事件日志,由服务器传感器采集数据发现异常日志生成。图片来自宝途网。该方法的主要步骤包括数据筛选、数据清洗、文本向量化、模型构建和结果分析。数据筛选1)检查三种类型的日志,分析每种类型的日志是否对故障定位有价值。消除无价值的日志;2)根据业务需要选择具体的故障类别。由于某些故障的工单数量极少,难以建立机器学习模型进行分类;3)保留三种日志不全为空的故障工单,完全没有记录的工单不能使用;4)根据工单号ticket_id整合日志和故障工单,工单和master机要一一对应。数据清洗1)剔除特殊符号'#'、'<'、'>'、'&'、'@'、'!'、'('、')'、'*'、'_'等;2)剔除日志中无用的信息,如数字、英文格式等;3)日志单独清理。当不同日志的格式不一致时,需要分开处理,分开清洗。文本向量化日志数据一般为文本数据。在构建文档分类模型时,需要将文本数据转换为数值数据。文本向量化(也称为特征权重计算)常用的有以下三种方法。1)布尔向量是最简单的权重计算方法。如果一个特征词出现在文本中,则其权重为1;没有出现则为0。这种简单粗暴的方法容易丢失文本内部的具体信息,效果稍差。但它适用于一些使用二元分类的模型,例如决策树和概率分类器。2)词频是最直观的权重计算方法。一个词在文本中出现的次数就是频率权重。这种方法的思路是,特征词出现的越多,其重要性就越大。3)Tf-idf(TermFrequency-InverseDocumentFrequency,TermFrequency-InverseDocumentFrequency),是应用最广泛的权重计算方法。一个词在工单日志中出现的次数越多,在所有工单中出现的次数越少,它就越能代表故障单。与频率权重相比,引入了IDF。IDF的主要思想是:如果包含词条t的文档越少,IDF越大,说明该词条具有较好的类别区分能力。计算公式如下。之所以需要将分母加1,是为了避免分母为0。参考例子:http://www.ruanyifeng.com/blog/2013/03/tf-idf.html模型建立在已有的基础上data(label)是在的基础上构建分类函数/分类模型,是一个决策面。1)数据划分:随机分层抽样,划分训练集(70%)建立模型,划分测试集(30%)验证模型效果;2)数据预处理:数据整合、数据清洗、文本分词等过程训练集和测试集采用相同的方式处理,保证最佳清洗的训练集和测试数据格式统一;3)文本向量化:使用tf-idf对文本进行向量化,选择l2正则化结合文档频率df和***词频tf进行特征选择,选择几个关键词;设置停用词['is','not','this','the','do','in']等;4)模型构建:选择分类问题常用的算法构建模型,并在构建模型的过程中不断优化参数,构建最好的模型。注:对于极少数故障类型,如果依靠专家知识分析已有的工单日志,并一一正确区分,则可以人为抽象出最准确的故障特征,编写模块实现自动化分类。结果分析在故障诊断阶段,将建立的模型应用到测试集上,对故障诊断结果进行分析。用决策树建立故障诊断模型,可以看出在训练集上的效果可以达到98.94%,在测试集上的效果可以达到90.24%。为了进一步提升模型的性能,一方面需要具体分析训练集和测试集上误分类的故障单,查看三个日志的内容,找出问题所在;另一方面,可以加入更多的数据来构建模型,一般来说,数据量越大,模型越接近。不同的算法:尝试使用不同的文本分类算法进行故障分类,测试结果能够反映算法对当前问题的适用性。下面,笔者使用8种算法进行对比,并对结果进行总结分析。关联规则:左键->右键,左键的组合导致右键的出现。关联规则挖掘的引入可以进一步分析关键字在日志中的出现情况,以及如何判断某类故障的发生。例如,当同时出现{'TSC','CPU','Hardware','Error'}等词时,可以理解为当这些关键词出现时,有89.1%的置信度是硬件故障——人为造成记忆故障。方案补充笔者从工程实践的角度,提出以下可能的解决方案作为上述方法步骤的补充:1、故障分类:将故障划分等级,如一级故障(硬件故障-软件故障)、二级故障故障是硬件故障下更具体的故障类型。当直接对所有次级故障进行分类不理想时,可以考虑先对初级故障进行分类,再对次级故障进行分类,以达到故障分类的效果。2.数据不平衡:即不同类型的故障工单数量级不一致,数据量差异较大,使得分类模型偏向于故障数量较多的故障。考虑到故障工单数据不均衡的问题,可以考虑将数量少的归为一类——其他类。例如,九类问题可以转化为四类问题。但是,当工单数量严重失衡,故障类别较多时,这种将少数类别的样本聚合到其他类别的方法使得模型的分类效果更具随机性。3、多字符特征词:原理是根据字节流对文本内容进行大小为N的滑动窗口操作,形成长度为N的字节分片序列,从而自动生成多——人物特征词。与单独存在相比,几个词的连续出现可能有不同的含义,影响分类。4、布尔权重:当一个CPU出现故障时,CPU多核故障和单核故障属于同一类,但多核故障会记录每个核的情况,导致某些关键字或格式重复出现,使得模型类似于两者都减少。此时,考虑使用布尔权重代替tf-idf进行文本向量化。后续由于文字分类涵盖的内容较多,本文从浅入深,讲解主机日志分析的大致流程,以及工程实践中的解决方案,以供交流。对于文本分类特征选择,模型参数调优和数据不平衡等更详细的解决方案,笔者会在后续跟进。以上内容是roganhuang(黄荣庚)实习期间的工作总结。感谢运维团队小伙伴们的帮助,感谢学长@simbazhou,导师@lelandwu,学姐@mengnizhang的指导和帮助。作者不是天才。如有错误,请指正!参考链接1.https://blog.csdn.net/zrc199021/article/details/537284992.https://blog.csdn.net/sangyongjia/article/details/524400633.http://www.ruanyifeng.com/blog/2013/03/tf-idf.html4.https://blog.csdn.net/lxg0807/article/details/52776183?fps=1&locationNum=105.https://blog.csdn.net/wangongxi/article/详情/515910316.https://blog.csdn.net/wangongxi/article/details/51591031