欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~html
本文由roganhuang 发表于云+社区专栏前端
导语算法
随着腾讯云业务的扩大,母机数量愈来愈多。为减小人力并实现母机故障的自动化定位,本文尝试利用机器学习算法,经过对历史故障母机的日志数据学习,训练模型实现自动化分析定位母机故障缘由。服务器
对于每一单母机故障咱们都须要定位出背后真实的故障缘由,以便对相应的部件进行更换以及统计各类部件故障率的状况,所以故障定位和分析消耗的人力也愈来愈多。但愿能借助机器学习的方法对历史故障母机的日志数据进行学习,沉淀出一些模型出来实现自动化的分析新的母机故障的缘由,进而提升母机工单的处理效率解放人力,同时也能分析出故障的一些规律,进而实现对故障的预测等。机器学习
一、对母机宕机故障进行自动化的分析,准肯定位故障缘由;前端性能
二、当故障分类准确率达到足够准确以后,可以不须要人工参与,实现自动化结单;函数
三、实时流式处理母机的各类数据,实现部分故障的预测。性能
一、dmesg :机器宕机前的最后一屏,含有netconsole数据;学习
二、mcelog :系统检查到硬件错误产生的日志;测试
三、sel :系统事件日志,是服务器传感器收集数据发现异常产生的日志。
主要步骤包括数据筛选、数据清洗、文本向量化、模型构建、结果分析等。
1)查看三类日志,分析是否每一种日志对故障定位都有存价值。剔除无价值的日志;
2)根据业务需求,选择特定的故障类别。由于某些故障的工单数量特别少,难以创建机器学习模型作分类;
3)保留三种日志不全为空的故障工单,彻底无记录的工单是没法利用的;
4)根据工单编号ticket_id将日志及故障工单整合,工单和母机应该是一一对应的。
1)剔除特殊符号'#', '<', '>', '&', '@','!', '(', ')', '*', '_'等;
2)剔除日志的无用信息,如数字格式和英文格式的;
3)日志分开清洗,当不一样日志的格式不一致时,须要区分对待分开清洗。
日志数据通常为文本数据,在构建文档分类模型时,须要将文本型数据转化成数值型数据。文本向量化(也叫作特征权重计算)经常使用如下三种方法。
1)**布尔权重(Boolean vector),是最简单的权重计算方法。**若是某特征词在文本中出现,其权重即为1,;不出现,即为0.这一简单粗暴的方法容易丢失文本内部具体信息,效果略差。但适用于一些采用二分类的模型,好比决策树和几率分类器。
2)**频度权值(term frequence),是最直观的权重计算方法。**单词在文本中出现的次数即为频度权重。这种方法的思想是,出现次数越多的特征单词,其重要性越大。
3)Tf-idf(Term Frequency-Inverse Document Frequency, 词频-逆文件频率),是应用最普遍的权值计算方法。单词在一条工单的日志中出现次数越多, 同时在全部工单中出现次数越少, 越可以表明该故障工单。
相比于频度权值,引入了IDF。IDF的主要思想是:若是包含词条t的文档越少, IDF越大,则说明词条具备很好的类别区分能力。计算公式以下,分母之因此要加1,是为了不分母为0
参考示例: www.ruanyifeng.com/blog/2013/0…
在已有数据(标记)的基础上构造出一个分类函数/分类模型, 即为一个决策面。
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给予的指导和帮助。
笔者不才。若有错误,欢迎指正!
3.www.ruanyifeng.com/blog/2013/0…
问答
相关阅读
此文已由做者受权腾讯云+社区发布,更多原文请点击
搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!
海量技术实践经验,尽在云加社区!