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

2023-11-11

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

本文由roganhuang 发表于云+社区专栏

导语

随着腾讯云业务的扩大,母机数量越来越多。为减少人力并实现母机故障的自动化定位,本文尝试利用机器学习算法,通过对历史故障母机的日志数据学习,训练模型实现自动化分析定位母机故障原因。

背景

对于每一单母机故障我们都需要定位出背后真实的故障原因,以便对相应的部件进行更换以及统计各种部件故障率的情况,因此故障定位和分析消耗的人力也越来越多。希望能借助机器学习的方法对历史故障母机的日志数据进行学习,沉淀出一些模型出来实现自动化的分析新的母机故障的原因,进而提高母机工单的处理效率解放人力,同时也能分析出故障的一些规律,进而实现对故障的预测等。

目标

1、对母机宕机故障进行自动化的分析,准确定位故障原因;

2、当故障分类准确率达到足够准确之后,能够不需要人工参与,实现自动化结单;

3、实时流式处理母机的各种数据,实现部分故障的预测。

数据

1、dmesg :机器宕机前的最后一屏,含有netconsole数据;

2、mcelog :系统检查到硬件错误产生的日志;

3、sel :系统事件日志,是服务器传感器收集数据发现异常产生的日志。

方法步骤

主要步骤包括数据筛选、数据清洗、文本向量化、模型构建、结果分析等。

数据筛选

1)查看三类日志,分析是否每一种日志对故障定位都有存价值。剔除无价值的日志;

2)根据业务需求,选择特定的故障类别。因为某些故障的工单数量特别少,难以建立机器学习模型做分类;

3)保留三种日志不全为空的故障工单,完全无记录的工单是无法利用的;

4)根据工单编号ticket_id将日志及故障工单整合,工单和母机应该是一一对应的。

数据清洗

1)剔除特殊符号’#’, ‘<’, ‘>’, ‘&’, ‘@’,’!’, ‘(‘, ‘)’, ‘*’, ‘_’等;

2)剔除日志的无用信息,如数字格式和英文格式的;

3)日志分开清洗,当不同日志的格式不一致时,需要区分对待分开清洗。

文本向量化

日志数据一般为文本数据,在构建文档分类模型时,需要将文本型数据转化成数值型数据。文本向量化(也叫做特征权重计算)常用以下三种方法。

1)布尔权重(Boolean vector),是最简单的权重计算方法。如果某特征词在文本中出现,其权重即为1,;不出现,即为0.这一简单粗暴的方法容易丢失文本内部具体信息,效果略差。但适用于一些采用二分类的模型,比如决策树和概率分类器。

2)频度权值(term frequence),是最直观的权重计算方法。单词在文本中出现的次数即为频度权重。这种方法的思想是,出现次数越多的特征单词,其重要性越大。

img

3)Tf-idf(Term Frequency-Inverse Document Frequency, 词频-逆文件频率),是应用最广泛的权值计算方法。单词在一条工单的日志中出现次数越多, 同时在所有工单中出现次数越少, 越能够代表该故障工单。

相比于频度权值,引入了IDF。IDF的主要思想是:如果包含词条t的文档越少, IDF越大,则说明词条具有很好的类别区分能力。计算公式如下,分母之所以要加1,是为了避免分母为0

img

img

参考示例: http://www.ruanyifeng.com/blog/2013/03/tf-idf.html

模型构建

在已有数据(标记)的基础上构造出一个分类函数/分类模型, 即为一个决策面。

img

1)数据划分:随机分层抽样,划分训练集(70%)用于构建模型,测试集(30%)用于验证模型效果;

2)数据预处理:数据整合、数据清洗、文本分词等过程在训练集和测试集上是同样的处理方式,以确保最后的干净的训练集和测试数据的格式是统一的;

3)文本向量化:采用tf-idf将文本向量化,选择l2正则化,结合文档频率df和最大词频tf进行特征选择,选出若干个关键词;设置停用词[‘is’, ‘not’, ‘this’, ‘the’, ‘do’, ‘in’]等;

4)模型构建:选取分类问题常用的算法构建模型,构建模型过程中不断参数调优,构建最佳的模型。

img

注:对于数量特别少的故障类型,如果依靠专家知识分析已有的工单日志能够一一正确区分的话,那么可以人为地抽象出独一无二的故障特征,并编写模块实现自动化分类。

结果分析

故障诊断阶段,将构建好的模型运用到测试集上,对故障诊断结果分析。以决策树建立故障诊断模型,可见在训练集上的效果可达98.94%,测试集上可达90.24%。

img

为进一步提高模型性能,一方面应具体分析训练集和测试集上被错误分类的故障工单,查看三种日志的内容并查找问题;另一方面,可增加更多的数据用于构建模型,一般而言,数据量越大,模型越接近。

不同算法:尝试采用不同的文本分类算法用于故障分类,测试效果能反映出该算法对当前问题的适用性。如下,笔者采用了8种算法进行对比,并对结果进行总结分析。

img

img

关联规则:左键 ->右键,左键的组合导致右键的发生。引入关联规则挖掘,可进一步分析日志中关键词的出现,可以如何判定某一类故障的发生。譬如当{‘TSC’, ‘CPU’, ‘Hardware’, ‘Error’}等词同时出现时,可理解为当这些关键词出现时,有89.1%的置信度人为发生了硬件故障-内存故障。

解决方案补充

从工程实践的角度出发,笔者提出以下几种可能的解决方案,以作为对上面方法步骤的补充:

1.故障分级:将故障划分等级,如一级故障(硬件故障-软件故障),二级故障为硬件故障下更具体的故障类型。当直接对所有二级故障做分类效果不理想时,可先考虑对一级故障做分类,再对二级故障做分类,实现故障分级的效果。

2.数据不平衡:即不同类别的故障工单在数量级上不一致,数据量上相差较大,使得分类模型偏向于数量多的故障。考虑到故障工单数据不平衡的问题,可考虑将数目少的归总为一类——其他类。示例如下,九分类问题可被转化为四分类问题。但是,在工单数量严重不平衡而且故障类别多的情况下,这种归总少类样本为其他类的方法,使得模型分类效果具有较大的随机性。

img

3.多字特征词:原理即将文本内容按字节流进行大小为N的滑动窗口操作,形成长度为N的字节片段序列,以自动产生多字特征词。相比于分开存在,几个单词的连续出现可能会有产生不一样的意义,对分类产生影响。

4.布尔权重:*CPU发生故障时,CPU多核故障和单核故障属于同一类,但多核故障会记录每一个核的情况,导致某些关键词或者格式重复出现,使得模型对于两者的相似性降低。此时,可考虑使用布尔权重代替tf-idf进行文本向量化*。

后续

由于文本分类涵盖的内容较多,本文尽可能从简出发,阐述母机日志分析的大体流程,以及工程实践上的解决方案,以供交流。对于文本分类特征选择,模型参数调优和数据不平衡的更为详细的解决方法,笔者将在后续跟进。

以上内容基于roganhuang(黄荣庚) 在实习期间工作的总结。感谢运营开发组的小伙伴们的帮助,感谢学长@simbazhou,导师@lelandwu和学姐@mengnizhang给予的指导和帮助。

笔者不才。如有错误,欢迎指正!

参考链接

1.https://blog.csdn.net/zrc199021/article/details/53728499

2.https://blog.csdn.net/sangyongjia/article/details/52440063

3.http://www.ruanyifeng.com/blog/2013/03/tf-idf.html

4.https://blog.csdn.net/lxg0807/article/details/52776183?fps=1&locationNum=10

5.https://blog.csdn.net/wangongxi/article/details/51591031

6.https://blog.csdn.net/wangongxi/article/details/51591031

问答
机器学习入门需要哪些数学基础?
相关阅读
基于多维数据频繁项挖掘的母机隐患排查
再也不用担心网吧开黑队友听不清了!
自己动手打造前端性能监控系统
【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识

此文已由作者授权腾讯云+社区发布,更多原文请点击

搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!

海量技术实践经验,尽在云加社区

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

巧用机器学习定位云服务器故障 的相关文章

  • Cache 和 Buffer 有什么区别

    Cache 和 Buffer 有什么区别 转载 talkwithtrend https mp weixin qq com s YsEOBVS7fXgrGXnXH1I0MQ Cache和Buffer简单的说 Cache是加速 读 而buffe
  • android自定义可缩放,移动图像裁剪框

    在实际项目中 经常要制作一个简易的图像裁剪功能 即获取一张图片 并用一个遮罩层选择目标范围并截取保存的功能 如下图所示 在此分享下该自定义视图的制作过程 需求说明 整一个视图包含一个透明的遮罩层 一个透明带白色边框的矩形 要实现的功能是 点

随机推荐

  • oracle 问题 :Cause: java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束

    使用mysql时使用的sql语句常有 结尾的语句 但oracle中不能出现 结尾 因为oracle解析器很严谨 不支持 结尾语句解析
  • C基础day6(2023.7.6)

    一 Xmind整理 二 课上练习 练习1 循环嵌套 三个循环结构可以任意嵌套 include
  • Python爬虫分析唯品会商品数据 +数据可视化

    目录 前言 数据来源分析 1 明确需求 2 抓包分析 通过浏览器自带工具 开发者工具 代码实现步骤 发送请求 gt 获取数据 gt 解析数据 gt 保存数据 发送请求 解析数据 保存数据 数据可视化 先读取数据 泳衣商品性别占比 商品品牌分
  • Springmvc+mybatis+Dubbo+ZooKeeper+Redis+KafKa

    开发工具 1 Eclipse IDE 采用Maven项目管理 模块化 2 代码生成 通过界面方式简单配置 自动生成相应代码 目前包括三种生成方式 增删改查 单表 一对多 树结构 生成后的代码如果不需要注意美观程度 生成后即可用 技术选型 只
  • Androidstudio快捷操作之多选

    如图 想要批量复制属性名 不需要一个一个的复制 只需按住alt 鼠标左键从上往下拉 将光标定位在每个属性名的前面 再按ctrl w就可以选中所有光标后面的单词了
  • QT里使用sqlite的问题,好多坑

    1 我使用sqlite 开发机上好好的 测试机上却不行 后来发现是缺少驱动 Driver not loaded Driver not loaded 代码检查了又检查 发现应该是缺少dll文件 系统不提示 是自己使用 QMessageBox
  • c语言基础五子棋,十分的易懂理解,详细解释,容易上手

    前言 提示 经过b站和视频学习后编程 提示 以下是本篇文章正文内容 下面案例可供参考 文章目录 前言 五子棋 头文件 展示棋盘 display 下棋 PlayMove 主体函数 game 完整代码 五子棋 本篇博客主要写了关于c语言的五子棋
  • MySQL主从搭建-Centos实战

    目录 一 规划说明 二 主节点安装MySQL 1 下载MySQL和安装 2 启动Mysql 设置root密码 允许远程登录 三 副节点安装MySQL 参考主节点 四 主节点配置 1 配置my cnf 修改默认存储目录为指定目录 data 下
  • 解决SQL查询总是超时已过期

    解决SQL查询总是超时已过期 在WIN8里提示 OLE DB 或 ODBC 错误 查询超时已过期 HYT00 1 由于数据库设计问题造成SQL数据库新增数据时超时 症状 Microsoft OLE DB Provider for SQL S
  • web前端页面适配方法

    流式布局 就是百分比布局 非固定像素 内容向两侧填充 理解成流动的布局 称为流式布局 视觉窗口 viewport 是移动端特有 这是一个虚拟的区域 承载网页的 承载关系 浏览器 gt viewport gt 网页 适配要求 1 网页宽度必须
  • c++基础十一(跳转语句)

    跳转语句 1 break 2 continue 3 goto 1 break 作用 跳出循环结构和选择结构 1 switch语句中 用于终止case并跳出switch语句 2 在循环结构中 用于跳出当前循环 3 在嵌套循环语句中 跳出最近的
  • 企业微信 => 接入第三方vue应用 第三阶段:企业微信使用JSSDK

    目录 使用说明 官方文档不会告诉你的内容 都是会踩的坑 一 我采用的混入方法去使用这个官方SDK 二 可能会遇到的坑 前提 我们开发的是三方应用 不是内部应用 使用说明 所有的JS接口只能在企业微信应用的可信域名下调用 包括子域名 且可信域
  • 深度学习环境搭建( Tensorflow & PyTorch)

    前言 硬件配置 基础软件 1 安装VC redist x64 2 安装显卡驱动并确定算力 3 确认cuda版本 4 安装CUDA 配置cudnn 5 安装Anaconda 6 安装PyCharm 深度学习框架Tensorflow安装 深度学
  • 复习之linux系统中的权限管理

    1 权限的查看及读取 1 权限的查看 ls l file 查看文件的权限 ls ld dir 查看目录权限 2 权限的读取 文件的属性叫做文件的元数据 元数据 Metadata 又称中介数据 中继数据 为描述数据的数据 data about
  • HTML爱心表白代码,亲测有效,独一无二!福利来啦!

    发福利啦 小编最近搜集了好几个表白代码 感兴趣可以点进主页看看哟 如果觉得文章不错 还请一键三联 不定时发布各种全免费的独一无二的代码 这次我们来分享跳动的爱心的代码 网上有很多 但是个人觉得我这个比较温馨一点 背景也好看
  • springboot框架介绍,让我们深入的了解

    Spring Boot是一种用于快速构建基于Spring框架的Java应用程序的开源框架 它旨在简化Spring应用程序的开发过程 通过提供一种约定优于配置的方式 让开发人员能够快速搭建起一个可独立运行的 可部署的 易于扩展的应用 Spri
  • Java的内存机制

    1 Java的内存机制 Java 把内存划分成两种 一种是栈内存 另一种是堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配 当在一段代码块定义一个变量时 Java 就在栈中为这个变量分配内存空间 当超过变量的
  • 虚拟化一、虚拟化技术基础原理

    一 虚拟化 虚拟化 是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机 在一台计算机上同时运行多个逻辑计算机 每个逻辑计算机可运行不同的操作系统 并且应用程序都可以在相互独立的空间内运行而互不影响 从而显著提高计算机的工作效率 虚拟化使用软
  • java字符串转json

    针对不同jar包 一 import org json JSONObject JSONObject jo new JSONObject new String 需要转换的字符串 二 import com alibaba fastjson JSO
  • 巧用机器学习定位云服务器故障

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由roganhuang 发表于云 社区专栏 导语 随着腾讯云业务的扩大 母机数量越来越多 为减少人力并实现母机故障的自动化定位 本文尝试利用机器学习算法 通过对历史故障母机的日志