>>与软件开发有关的知识:操作系统,数据库,网络通信等 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 21049 个阅读者 刷新本主题
 * 贴子主题:  海量日志分析与智能运维 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2020-01-27 16:54:11     消息  查看  搜索  好友  邮件  复制  引用

  

一、AIOps 与智能日志中心

1.1AIOps 五等级

要说智能日志中心,首先要了解什么是智能运维。目前业界对智能运维的运用,主要分为如下五个等级。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     一级是最容易的,只要你有个想法试试就行,到网管监控系统里,拿一个监控指标的曲线下来,就可以尝试异常检测。

     一级还没有成熟的单点应用,当有了一个成熟的单点应用,就算是达到二级。二级必须要有一定的基础设施建设作为前提。当单场景模块能够串联起来,形成流程化 AI 运维,也就达到了三级的层次。

     目前业界基本上处于从一二级,往二三级努力的阶段,想实现四、五级还比较远。

     大家都知道,现在 AI 应用强、技术成熟,能被广泛应用的基本上仅有两个模块——语音识别和人脸识别。语音及人脸识别能够快速得以发展,主要因为国内市场的需求,及国内大人口基数下广泛的数据资源。

     运维领域数据较少,且信息比较碎片化,这使得 AIOps 发展缓慢。日志易五年前开始做日志分析的时候,主要也是得益于海量的日志数据,AI算法的应用下,得以实现智能日志分析。目前日志易智能日志中心处于 AIOps 五等级的二级到三级之间。

1.2智能日志中心介绍

为了帮助大家实现更高级的 AIOps 能力,日志易打造了一个智能日志中心。如下图,为智能日志中心的全景架构图。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     我们都知道, AI 重要的是数据。所以,首先我们要具备尽量多类型的数据采集、处理及分析能力。

     日志易支持 Linux、Windows、AIX、HPUX 等各种平台的数据采集,也能采集 ODBC、Syslog、APM 的数据,甚至手机 App 埋点数据,然后配合一些 CMDB 数据,流程工单数据,非常方便地实现业务运维层面的关联分析。

     采集之后,我们有数十种 ETL 方法来对日志进行规范化处理。日志本身是非结构化的,而日志分析需要格式化的数据,ETL 做好了,后续的分析才容易展开。

     这个环节,会涉及到一些数据脱敏及业务日志串联,对于一些时间戳设计不合理的日志,日志易会自动对其进行补全,以便后续分析工作的展开。

     对数据进行搜索时,业界主流开源解决方案是 ES。然而,由于 ES 开源引擎是一个通用的搜索引擎,难以满足日志处理的一些特殊需求,用Java 开发,内存消耗及性能上存在很大优化空间,在面临海量日志数据时,ES 往往显得力不从心。

     基于以上原因,日志易自己开发了比通用引擎快 5 倍以上的 Beaver 搜索引擎,保证了海量数据的实时存取。我们还有上百个 SPL 指令进行统计分析,有多种不同场景的算法。搜索引擎可以说是 AIOps 的大脑。

     我们有日志易智能日志中心,也有基于日志开发的智能运维应用 Lynxee、大屏 Galaxee、数据工厂。安全审计、业务关联分析等解决方案,也是基于智能日志中心实现的。

     智能日志中心可以与大屏展示、告警推送、按需调用脚本执行、公开的数据 API 和第三方平台对接,这一部分可以说是 AIOps 的手。

     以上这些合在一起,就是整个智能日志中心,我们也可以把它看作 AIOps 的中控(或者中台)。

     日志易有上百种不同类型数据的采集分析方案,可以直接导入安装,如思科、F5、天融信等各种网络设备日志,Oracle、MySQL 等数据库日志,Nginx、Apache 等中间件日志等。这些内置数据采集分析方案,可以节省数据采集处理的时间。

     我们在实践中发现,做一个运维数据中心,70% 以上的时间是在做数据采集和处理。真正处理好了以后的分析过程还是很快的。这和 AI 界说人工智能 80% 的工作是数据清洗,是比较吻合的。

二、围绕日志的 AIOps 场景与算法原理介绍

2.1AIOps 场景

说到 AIOps 的场景,我们可以从成本、质量、效率三个方面做出规划,如下图:
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     以质量保障而言,以往的异常检测,需要运维工程师基于自己的经验做出判断和分析,我们要做的,是借助AI来实现这一目的。

     故障的发生都是有先兆的,可能表现为延时逐渐增大,响应逐渐变慢等。我们可以基于这些先兆及历史数据做出模型,对即将发生的异常做出预判。

     成本管理和效率提升要面临的情况更加复杂。成本管理面临成本优化、资源优化、容量规划、性能优化等复杂场景。

     效率提升涉及复杂度较高的智能变更、智能问答、智能决策、容量预测等,以双十一容量预测为例,要基于历史数据预估流量,同时结合业务(如促销活动带来的增量)等因素综合分析。纵然如此,预估也往往会和现实存在较大出入。

     就目前的阶段,质量保障还是最关键、性价比很高的,是可以首先实现智能化的部分。我们的智能日志中心,目前主要关注的也是这个方向。

     具体来说,在质量保障上,运维人员希望做到的,就是尽早告警、尽快定位、尽快修复。表现在“日志+算法”的 AIOps 实践上,具体流程为以下三步:

     1、快速发现故障:即基于多种算法进行异常预测;

     2、问题归因定位:即通过日志模式洞察罕见报错信息;

     3、辅助修复决策:即通过多方位展现系统状态加速决策。

2.2AIOps 之快速发现故障

快速发现故障即尽快告警。告警的本质,是告诉运维人员两件事情:一,有问题了;二,问题有多严重。

     我们从日志直接产生告警,或者经过统计分析变成时序指标,再监控告警。通过整合告警的优先级和重要程度,拟合出来一个服务的健康度,让用户对系统状态一目了然。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     一般而言,监控系统会有两种告警:一种是匹配关键字,一种是采样指标的阈值对比。匹配关键字的严重性,就是匹配 warning、critical 等;阈值的严重性,就是定义多个阈值区间,比如 CPU 大于 80% 发中危告警、大于 120% 发高危告警。在智能日志中心,这两种告警都支持。

     从日志、时序指标的监控告警,到服务健康度、故障定位,日志易有一整套监控流程,这是智能日志中心的重要组成部分,位于引擎的上层。告警这部分还是以质量保障和 AI 算法为主。

2.3AIOps 之问题归因定位

2.3.1指标异常检测
《SRE》是这几年很火的书了,里面有个概念值得推荐,就是所谓“黄金指标”。

     不管是主机设备层面,还是应用服务层面,或者集群、端到端等等,都可以从延迟、流量、错误和饱和度四个最关键的角度,来衡量它的健康状态。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     在日志易中,我们可以通过 SPL 语句,快速从不同的日志数据,转换成为对应的指标数据。只需要更换红字这段过滤条件,就可以做到全面的指标数据覆盖。

     既然有了指标数据,下一步要考虑的就是如何智能地检测指标,以便根据历史情况,智能地发现问题了。

     因为指标的千差万别,很难有一种单一的普适算法。所以日志易针对不同场景需求,启用不同的算法。下面稍微介绍部分算法的原理。
CVAE 算法
我们都知道 VAE是深度学习里的一种,一般你在网上搜这个算法解释,都是讲怎么做图像识别的。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     指标就是一个很简单的曲线,所以我们把曲线按照滑动窗口的形式,切割成一段一段的小曲线,合在一起,就成了一个特征矩阵了,然后进入多层的编码解码,反复迭代,得到更好的模型。

     为了提高效果,在训练数据上,还可以主动添加一些噪声误差。

     然后实际检测的时候,我们就把测试数据经过编解码得出来的一小段模拟曲线的分布,和实际数据作对比,是不是发生了严重偏离。因为模拟曲线是正态分布的,所以这个偏离就是 3Sigma。

     这个算法,很适合做强周期性的指标检测。一般来说,由大量人群行为产生的数据,像业务访问,就很适合。

     我们在这块还有一个创新:加强了时间特征上的处理。我们知道,人的行为肯定是有大小周期的,今天和昨天、本周一和上周一、每个月一号、每年春节、每年 618、双十一等,都是在算法上会重点加强学习的行为。
iForest 算法
第二个是 iForest 算法,这是一个专门用来做异常检测的随机森林算法变种。

     它适合一些和时间没有强相关性的指标,比如主机的 CPU、内存等,数据本身离散度较大,没有什么规律,可能主要关心的就是它不要出现太明显的偏离。

     这种指标比较多,要求算法检测速度够快。
KDE 算法
第三个是 KDE 算法,这个算法针对的是一类特殊的场景。

     我们知道,有些服务并不是 7x24 小时运行的。比如股票市场,每天 9 点开盘,15 点收盘。在闭市的时候,证券公司相关系统的业务指标完全是零。闭市和开市两个阶段,泾渭分明,普通算法在这两个跃迁的时刻几乎肯定是要误报的。

     同理,还有很多理财之类的金融场景,在周末两天无业务输出也是一个道理。

     所以我们按照天的维度,对每天的每个时间点都选取它周围的若干个点,形成一个集合,进行核密度分析,然后一天的所有点合起来,得到最终的 KDE 模型。

     这个模型有点类似于在 3D 地图上,无数个正态分布堆在一起形成的山峦。那么检测的时候,对应时间过来的值,如果出现在平原地带,就是明显的异常了。
GRBT 算法
GRBT 算法,我们会同时提取时序数据的统计学特征,以及它的时间戳特征。它的用途场景与 KDE 和 iForest 相比,有更广泛的普适性,突变的和业务的都能用。

     可以看到这个算法原理,和前面 iForest 比较像,因为都是决策树森林。不过 iForest 是每次部分抽样迭代,而 Boosting 是每次根据上一次迭代的结果来重新选取分界点。

     但是这是一个监督学习,想用好,需要训练样本里有一定的异常点标注。

     有这么多不同的算法针对不同的场景,运维人员根据实际的区别,选用不同的算法,就可以达到比较好的算法覆盖了。

     日志易后续也会继续研究指标数据的类型自动判断,尽量减少运维配置选取算法的工作量。
2.3.2日志异常检测
除了指标的异常,还有就是日志的异常。前面提到,最常见的日志告警就是关键字匹配。不过,大多数系统的研发,不会把日志写的那么规范。

     2016 年,中科院《软件学报》发过一篇国防科大的《大规模软件系统日志研究综述》,里面引用了不少国内外的调查分析。其中有几条数据蛮有趣的:

     日志代码的更新频率比其他代码要快约1倍;

     约四分之一的日志修改是把新的程序变量写入日志;

     约一半的日志修改是对日志消息静态文本的修改。

     这些研究一般都是基于大型分布式项目,比如 Hadoop、OpenStack 等。企业内部的系统开发,情况应该会比这些著名的项目要严重的多。所以,大家输出日志的时候,很难做到特别规范,日志格式经常在变动……

     所以,依赖关键字或者固定的某种正则表达式提取,在长期运行的场景下,是不足以做到日志异常检测的,这时就需要 AI 算法来帮忙。
层次聚类得到日志模式
日志易的思路,是采用层次聚类。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     先对日志进行最基础的分词和类型判断,然后聚类合并。聚类可以用最长子串,也可以用文本频率等等。聚类里,不同的部分就用通配符替换掉。类似这张示意图,把 8 条日志,先合并成 4 个日志格式,合并成 2 个,再合并成 1 个。

     在研究领域,我们一般把这种日志格式的树状结构,叫模式树。

     当然我们实践的时候,不用真的算到最顶端,一般来说,模式数量收敛速度差不多了,或者模式里的通配符数量差不多了,就可以停下来了。
日志模式的用法
得到日志模式,具体怎么用呢?一般来说,有两种用法,故障定位和异常检测。
故障定位
一种是故障定位的时候。比如我们查错误日志,单纯用关键词,可能出来几百上千条。你要一个一个看过去,翻好几页,耗时就比较长了。如果内容字很多,还可能看漏了。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     模式 树的信息,可以直接查看匹配关键字的日志的模式情况,可能就只有那么三五条信息,一眼就可以看完,很快就可以知道问题在哪,就可以进行下一步了。
异常检测
另一个用途,就是把得到的,加载到日志采集的实时处理流程里,进行异常检测,提前发现问题,这时候,我们除了模式,还可以检测参数,检测占比。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     上图是一个最简单的示例,3 条日志,得到的模式是*are<NUM>,然后我们同时可以检测符合这个模式的日志,前边的只能是 we 或 you,第三位只能落在平均值为 93.3、标准差为 9.4 的正态分布区间内。

     然后日志采集进来,先检测一下这个模式是不是合法的。如果合法,再检测一下各个参数位置的取值是不是合法的。如果依然合法,再检测一下这段时间这个模式的日志数量,和之前相比是不是正常的。

     这么三层检测下来,相当于把模式异常、数值异常、时序指标异常融合到了一起。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     这张截图就是日志异常检测的一个历史列表。可以看到,哪怕在 INFO 级别,也是可能出现你从来没见过的古怪日志的,这就需要密切关注了。

     当然,因为日志量特别大,所以他的训练样本很容易错过一些正常情况,所以上线初期,我们需要一些迭代以及标注的优化过程。把初始样本不断丰富起来。

     前面说了很多 AI 算法:如何来发现异常,定位异常。但是很可惜,定位异常这件事情,目前很难做到能找出非常理想的根因的程度。一般的做法,是依赖于云平台、容器平台的指标采集,做到定位出某台机器有问题,具体还是要登陆机器分析。

     我们从日志的角度,可以定位到某台机器的一段日志有问题,但是也不算找到 100% 的根因了,还需要后续查询分析。

     所以,做一个智能日志中心,我们也还需要提供更全面的统计分析和快速查询的能力,来完成对全局的、细节的运行状态的观测,以及对变化的即时捕捉。

三、日志分析实践与案例

3.1业务交易的实时统计分析

对应前面说的 VAE 算法,我们说他最适合的就是监控业务交易量这类指标。

     我们可以通过仪表盘的可视化效果,对业务交易量的各个不同维度,进行非常细致的统计分析。这样有什么变动的时候,一眼就能看到。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     当然,由于交易分析的常见维度比较少和明确,后续也可以通过决策树算法,来自动定位哪些维度的异常更明显地造成了变化,比如某个省某个运营商某个手机型号打开慢之类。

     从实践来说,这种基于性能优化目的的根因分析,即使分析出来,后续的优化成本也比较高,很可能从性价比考虑,会放弃掉。

     交易量指标还是像这样用来做实时统计和监控比较多。

3.2业务监控-多层业务指标钻取

如果是业务结构比较复杂的场景,可能单看最终用户层面的交易维度不足以定位故障。我们还需要从内部的业务流转关系来调查问题。这时候,就可以用拓扑图来观测系统运行状态。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     在运行状态出异常的时候,通过钻取跳转,把每层的情况和调查路径串联起来。哪怕很基础的运维人员,也可以熟练地按照高级工程师定义好的路径排查问题。

3.3业务监控-调用链展示分析

业务分析的另一个层面,是针对用户的分析,类似现在很流行的 Tracing 调用链系统。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     对于智能日志中心来说,Tracing 数据也是能很好支持的。在这个基础上,可以做到很好的展示。

     日志易提供了标准的调用链表格,还提供了循序图分析。这是业界比较少见的方式,但对研发人员很友好,因为系统设计的时候,循序图是研发人员很熟悉的方式。

3.4用户端监控-DNS/CDN 日志分析

除了系统内部,还可以从 DNS 和 CDN 厂商获取日志,甚至包括收集自己的手机 App 日志,来了解、监控端到端的情况。
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小

     以上截图,展示了 10TB 级别日志量的实时返回码趋势分析、各站点缓存率分析、各站点响应时长分析、流量峰值分析,以及用户行为轨迹分析、高频请求客户分析、热门站点分析、域名与运营商关系分析等。

     此外,基于这些日志可以实现性能监控、故障排查等,也可以跟第三方厂商的计费做二次核算。

     以上文字版根据《大咖·来了》第3期《海量日志分析与智能运维》整理,回放链接:http://aix.51cto.com/activity/10011.html?dk=wz



----------------------------
原文链接:https://blog.51cto.com/14474728/2467411
原作者:直播大咖

程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 flybird 在 2020-01-28 17:32:55 重新编辑]
  Java面向对象编程-->图形用户界面(下)
  JavaWeb开发-->访问数据库(Ⅱ)
  JSP与Hibernate开发-->Java对象持久化技术概述
  Java网络编程-->基于UDP的数据报和套接字
  精通Spring-->计算属性和数据监听
  Vue3开发-->Vue Router路由管理器
  OSI七层模型与层上协议
  一款SQL自动检查神器,再也不用担心SQL出错了,自动补全、回...
  Windows下安装MySQL8 的步骤
  mysql分区(partition)
  SaltStack 自动化运维实战
  MySQL 导入数据
  MySQL 处理重复数据
  MySQL 复制表
  MySQL的UPDATE更新语句的用法
  MySQL 安装
  SQL的SUM() 函数 的用法
  SQL CREATE VIEW、REPLACE VIEW、 DROP VIEW 语句
  深入浅出一致性Hash原理
  mysql主从复制的步骤
  开发好几年,你真的懂MQ嘛(RabbitMQ为例)?看完别说难搞哦
  更多...
 IPIP: 已设置保密
楼主      
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。