草庐IT

算法落地探究:智能运维远没有说得“智能”

王鹏 2023-03-28 原文

一、智能运维现状

大家对智能问答系统都很熟悉,目前许多APP都有智能问答系统——后台是一个机器人,而不是真正的人回答问题。当前众多研究者在对智能问答系统进行研究,提出了许多算法和技术,Google Scholar上关于智能问答系统的文章有30多万不到35万篇。但实际上,智能问答系统远没有达到真正的智能,回答的结果时常是答非所问,那么就会造成海量的算法和技术与差强人意的效果之间的偏差。

智能运维到现在大概有六七年的发展历程,在此期间智能运维算法一直在快速地发展,包括对性能指标的时间序列的数据、对日志告警的数据以及近两年对CMDB、调用链等图的数据。算法的类型和效果也在不断提升,包括指标异常检测、容量预测、日志聚类、日志日常检测、告警中的场景挖掘、根因定位等。接下来的内容主要涉及指标异常检测、日志智能分析、告警数据分析三个类别。

​1、指标异常检测

指标异常检测是一个落地最多的智能运维场景,因为它数据容易准备,效果容易验证,准确率、召回率的指标容易量化。目前许多公司对大规模指标进行异常检测,比如1万个指标、10万个指标。

针对指标的异常检测,研究者提出了大量的异常检测算法,比如单指标、多指标检测,基于统计、基于深度学习的模型,无监督、有监督的算法,以及近两年许多公司和机构开源了异常检测数据集和算法。但是,往往在落地的场景中应用的效果不尽如人意,主要问题如下:

1)误报太多

  • 设置阈值严,为了消除漏报,往往造成大量的误报
  • 异常数量多,运维人员难以处理,不得不忽略所有的指标异常告警

2)模型/参数难以设置

  • 不同类型的指标,往往适合不同类型的模型和参数
  • 无法单独设置模型和参数,进行分类则效果不佳

3)缺乏有效的反馈和修正机制

  • 缺乏问题发现能力,难以对指标异常进行类型、主机、时间段、业务等方面的展示和分析,难以对异常进行交互式探索,因此无法判断异常是否应该报
  • 缺乏基于反馈的模型调整能力,难以应对“这个不是我们认为的异常,后续检测中不要再报了”的个性化需求

​2、日志智能分析

目前,大量企业上线了日志实时聚类和基于日志的异常检测,主要解决了人工难以处理海量日志数据、基于规则的方法维护性差的问题。典型场景对海量日志做实时聚类,再做基于日志的异常检测,比如变量取值异常、模板数量异常、语义异常等,但日志智能分析实践同样存在若干问题。

1)模板质量难以有效评估

  • 日志聚类完之后,在将其聚到若干模板中时,模板质量难以有效评估,尤其是在实施过程或上线过程中,模板数量大,逐个人工判断耗时太长,可能运维人员没有充足的时间逐个人工判断
  • 不同的应用目标对模板的要求不同,可能做某类型的日志异常检测时该模板不应该被泛化,但做另外一件事情可能就需要泛化,模板是否需要被泛化是一件非常主观的事情
2)缺乏有效的反馈和修正机制

  • 缺乏基于反馈的模板调整能力,难以应对“这种模板应该根据这个变量拆分”、“这个变量应该被泛化”之类的个性化需求
  • 运维专家和算法人员的沟通难,运维专家与算法团队之间隔着实施团队,反馈链条长,且不是直接反馈

​3、告警数据分析

近年来告警相关项目快速增长,每天有成千上万的告警,由于告警数量太多,运维人员难以有效处理和派单,因此通过算法进行告警压缩、场景挖掘、根因定位越来越受重视。在告警智能处理中存在两个典型问题:

1)告警模板提取效果不佳

  • 告警数据更为灵活多变,不同运维人员的告警描述方式存在差异
  • 包含大量中文,告警模板提取效果不尽如人意
2)根因定位效果欠佳

  • CMDB质量有待提高,可能存在系统变更但CMDB没有及时变更到最新场景的情况
  • 可能真正的故障原因不存在于告警数据中,无法进行根因定位
  • 标签数据缺失,一方面故障数量少,另一方面企业由于涉及隐私等原因不愿意给予标签

二、问题分析

我们在前面对于智能运维的现状和具体的类别及相关问题进行了梳理,那么接下来是我个人的一些思考。我认为算法落地效果不尽如人意有两个深层次原因:

​1、算法需要不断迭代优化

我们时常认为智能运维的算法是开箱即用,但其实效果远不是如此,算法需要不断迭代优化。算法最开始的时候一般是一个通用算法,到具体在企业部署之后,它一定会成为一个定制化的算法。因为对于每一个具体的项目,算法需要和运维数据、业务特点、运维目标等深度融合,需要不断进行打磨和适配。

1)算法本身:普遍缺乏反馈修正能力

对于“这个异常我不需要,后续检测中不要再报了”、“这两个模板应该合并掉,变量不能被泛化”之类的反馈,当前的模型尤其是深度学习模型很难有效吸收,其中主要是两种能力的缺失:

  • 发现问题的能力。比如说我们一天报2000个异常,能否有半小时或一小时的时间将这2000个异常过一遍,判断其中哪些异常应该报,哪些不应该报,目前很少有人能够在短时间内做到这点。
  • 模型自动修正能力。比如给了很多“这个要报,那个不要报”之类的很多反馈,模型是否能够很好地适应,因为这个适应其实是个百分百的适应,有的可能一个都不要报,有些是一定要报出来,这种对于模型也是比较难的。

2)实施过程:运维专家和算法人员的脱离

对于算法而言,最重要的是标签数据和对算法结果的快速反馈,但是相关领域的专家可能熟悉机理却不熟悉算法,由于沟通链条长、沟通成本高,运维专家和算法人员在一定程度上是脱离的。

​2、系统故障本身是超低频事件

系统故障本身是一个超低频的事件,严重的故障基本可能只出现一次,并且会被快速解决,不可能再出现。而算法需要基于历史数据学规律进行优化提升,如果之前发现的故障后来很可能不再出现了,那么这其实是一个悖论。

我们前面也有提到完全依靠算法来实现自动化运维,至少在目前阶段我觉得其实是不现实的,我们仅仅做异常检测、日期类都没有做得非常的好,那么我们相信现在算法能达到自动化运维吗?我觉得更现实的目标是将算法作为一种让运维更高效的辅助手段。

1)数据量太大,用算法来提高效率

  • 对每天几百TB的日志自动提取模板和变量
  • 对上万的指标自动进行异常检测
2)在某些场景下,用算法来提高精度

因为在因果推断里有些链条比较长,需要考虑的方面比较多,人的思考其实并没有那么发达,所以算法在这些方面是可以帮助提高精度的。

3)作为一种定位故障过程的辅助手段,帮助运维人员灵活快速地查询和探索数据

这是一种非常重要的能力,因为在很多项目里,算法结果的分析工作非常劳累辛苦。

4)算法作为一种积累知识的方式,构建知识图谱

三、探索工作

​1、如何高效地支持反馈

如果只让运维专家给10个异常/10个模板打标签,应该怎么做?

1)快速发现问题的能力

首先可以通过异常置信度、日志模板置信度从2000个异常中选择10个异常,然后通过异常立方体更加系统的能力对异常进行交互式探索,使异常可视化。

2)模型自动修正的能力

当我们希望将一个Excel或CSV的记录人的电话、传真信息的表格变成结构化数据进行处理时,我们可以通过算法进行自动转化。通过我们给的少量样本,算法能够自动识别我们的目标,从而达成这个目标,这就是基于样例的算法。基于样例的算法在智能运维领域中同样大有可为,另外还有一种方法是小样本算法,通过给定少量标签或案例快速达成目标是我们正在进行的尝试。

​2、作为辅助手段的数据探索技术

1)基于自然语言的问答系统

人可以问类似以下自然语言的问题,能够自动转成SQL并出结果,具有高易用性,便于运维人员进行个性化数据探索。

  • 在2019/11/28 11:25发生突增异常的指标有哪些?
  • A应用发生异常次数最多的主机是哪台?
  • B应用告警次数最多的告警种类是什么?
  • 最近一周内存使用率最高的十台主机是哪些?
  • 最近十天发生异常次数最多的应用是什么?
  • 最近一周内失败率最高的应用是哪个?
2)基于时间关联的复杂查询

用于事件关联的快速发现,如下图所示的HDFS日志,我们想查询其中三个模板是否经常一起出现,PLQ查询能够更加简洁高效,SQL查询则会更加复杂。

3)基于拖拽式的分析流程实现

  • 便于领域专家结合不同分析算法搭建分析流程
  • 融合了异常检测、聚类、场景挖掘等多种算法
  • 支持不同语言开发的算法
  • 支持输入数据格式的智能学习

四、总结

智能运维中的算法正在发挥越来越大的作用,但同时算法落地仍有大量问题需要解决。算法不能一蹴而就,需要有持续优化的能力。不妨将算法作为一种运维的辅助手段,使运维人员也能灵活地分析数据,在运维过程中使其变得更高效。

作者:王鹏  复旦大学 教授/博导

复旦大学计算机科学技术学院,教授,博导。主要研究兴趣包括:工业物联网大数据、智能运维等。2012年获得教育部自然科学二等奖(第三完成人)。主持或主要参与科技部重点研发计划、国家青年973、自然科学重点 面上基金、上海市科委、上海市经信委的多个项目,以及华为、微软、IBM等企业的资助项目。在数据库领域顶级国际期刊和会议SIGMOD、VLDB、ICDE、TKDE等发表论文40多篇。担任众多国际学术会议的程序委员会委员,包括SIGKDD、ICDE、DASFAA、WAIM等。国际学术期刊VLDB Journal、TKDE、KIS等的审稿人。

有关算法落地探究:智能运维远没有说得“智能”的更多相关文章

  1. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

    我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

  2. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  3. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  4. 没有类的 Ruby 方法? - 2

    大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow

  5. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  6. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

  7. ruby - 没有类方法获取 Ruby 类名 - 2

    如何在Ruby中获取BasicObject实例的类名?例如,假设我有这个:classMyObjectSystem我怎样才能使这段代码成功?编辑:我发现Object的实例方法class被定义为returnrb_class_real(CLASS_OF(obj));。有什么方法可以从Ruby中使用它? 最佳答案 我花了一些时间研究irb并想出了这个:classBasicObjectdefclassklass=class这将为任何从BasicObject继承的对象提供一个#class您可以调用的方法。编辑评论中要求的进一步解释:假设你有对象

  8. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  9. ruby - 没有轨道的 ActiveRecord 时区 - 2

    我在非Rails项目中使用ActiveRecord。在Rails中,我可以这样做:config.time_zone='EasternTime(US&Canada)'config.active_record.default_timezone='EasternTime(US&Canada)'但如果我不使用rails,我该如何设置时区? 最佳答案 ActiveRecord::Base.default_timezone='EasternTime(US&Canada)' 关于ruby-没有轨道的A

  10. ruby-on-rails - 没有这样的文件或目录 - 用 Mini Magick 识别 - 2

    在我让另一个人重做我的前端UI之前,我的Rails应用程序运行平稳。我已经尝试解决此错误3天了。这是错误:Nosuchfileordirectory-identifyExtractedsource(aroundline#59):575859606162@post=Post.find(params[:id])authorize@postif@post.update_attributes(post_params)flash[:notice]="Postwasupdated."redirect_to[@topic,@post]else{"utf8"=>"✓","_method"=>"patc

随机推荐