WOT演讲回顾——海量日志分析与智能运维

以下内容根据日志易创始人 & CEO 陈军在 WOT 全球人工智能技术峰会上的演讲整理而成,全文大约7000字,阅读时长10分钟。


大家好,今天我演讲的主题是《海量日志分析与智能运维》,演讲的内容主要包括以下三点:


1、智能日志中心介绍。这部分会简要介绍日志易开发的智能运维日志管理平台的相关信息;


2、围绕日志的 AIOps 场景与算法原理介绍。这部分是以关联分析等日志应用场景为切入点,讲解怎样使用机器学习或人工智能算法实现智能日志分析;


3、日志分析实践与案例。这里会介绍一些日志易基于日志进行智能运维的案例。


智能日志中心介绍


1.1 AIOps 五等级

要说智能日志中心,首先要了解什么是智能运维。目前业界对智能运维的运用,主要分这么五个等级。

一级是最容易的,只要你有个想法试试就行,到网管监控系统里,拿一个监控指标的曲线下来,就可以尝试异常检测。一级还没有成熟的单点应用,当有了一个成熟的单点应用,就算是达到二级了。二级必须要有一定的基础设施建设作为前提。当单场景模块能够串联起来,形成流程化 AI 运维,也就达到了三级的层次。


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


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


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


1.2 智能日志中心介绍


为了帮助大家实现更高级的 AIOps 能力。日志易打造了一个智能日志中心。


这是智能日志中心的全景架构图。



我们都知道,做 AI最重要的是数据。所以首先,我们要具备尽量多类型的数据采集、处理及分析能力。日志易支持 Linux、Windows、AIX、HPUX 等各种平台的数据采集,也能采集 ODBC、Syslog、APM的数据,甚至手机 App 埋点数据。然后配合一些 CMDB 数据,流程工单数据,非常方便地实现业务运维层面的关联分析。


在采集之后,我们有数十种 ETL 方法来对日志进行规范化处理。日志本身是非结构化的,而日志分析需要格式化的数据,ETL 做好了,后续的分析才容易展开。这个环节,会涉及到一些数据脱敏及业务日志串联,对于一些时间戳设计不合理的日志,日志易会自动对其进行补全,以便后续分析工作的展开。


在对数据进行搜索时,业界主流开源解决方案是 ES。然而,由于 ES 开源引擎是一个通用的搜索引擎,难以满足日志处理的一些特殊需求,且使用 Java 开发,内存消耗及性能上存在很大优化空间,在面临海量日志数据时,ES 往往显得力不从心。基于以上原因,日志易自己开发了比通用引擎快 5 倍以上的 Beaver 搜索引擎,保证了海量数据的实时存取。我们还有上百个 SPL 指令进行统计分析,有多种不同场景定制的 AI 算法。搜索引擎可以说是 AIOps 的大脑。


我们有日志易智能日志中心,也有基于日志开发的智能运维应用 Lynxee、大屏 Galaxee、数据工厂。安全审计、业务关联分析等解决方案,也是基于智能日志中心实现的。智能日志中心可以与大屏展示、告警推送、按需调用脚本执行、公开的数据 API 和第三方平台对接,这一部分可以说是 AIOps 的手。


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


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


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


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


2.1 AIOps 场景


说到 AIOps 的场景,我们可以从成本、质量、效率三个方面做出规划。



以质量保障而言,以往的异常检测,需要运维工程师基于自己的经验做出判断和分析,我们要做的,是借助机器学习及人工智能算法来实现这一目的。故障的发生都是有先兆的,可能表现为延时逐渐增大,响应逐渐变慢等。我们可以基于这些先兆及历史数据做出模型,对即将发生的异常做出预判。


成本管理和效率提升要面临的情况更加复杂。成本管理面临成本优化、资源优化、容量规划、性能优化等复杂场景。效率提升涉及复杂度较高的智能变更、智能问答、智能决策、容量预测等,以双十一容量预测为例,要基于历史数据预估用户访问量,同时结合业务(如促销等活动带来的增量)等因素综合分析。纵然如此,预估也往往会和现实存在较大出入。


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


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


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

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

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


2.2 AIOps 之快速发现故障


快速发现故障即尽快告警。


告警的本质,是告诉运维人员两件事情:第一,有问题了;第二,问题有多严重。


我们从日志直接产生告警,或者经过统计分析变成时序指标,再监控告警。最后,通过整合告警的优先级和重要程度,拟合出来一个服务的健康度,让用户对系统状态一目了然。



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


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


2.3 AIOps 之问题归因定位


下面先说说问题的定位。


2.3.1 指标异常检测


《 SRE:谷歌运维解密》是这几年很火的书了,里面有个概念值得推荐,就是所谓“黄金指标”。不管是主机设备层面,还是应用服务层面,或者集群、端到端等等,都可以从延迟、流量、错误和饱和度四个最关键的角度,来衡量它的健康状态。



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


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


因为指标的千差万别,很难有一种单一的普适算法。所以日志易针对不同场景需求,启用不同的算法。下面稍微介绍部分算法的原理。


CVAE 算法


第一个是 CVAE 算法,我们都知道 VAE 是深度学习里最常用的一种,一般你在网上搜这个算法解释,都是怎么做图像识别。



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


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


然后实际检测的时候,我们就把测试数据经过编解码得出来的最后一小段模拟曲线的分布,和实际数据作对比,是不是发生了严重偏离。因为模拟曲线是正态分布的,所以这个偏离就是 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 算法来帮忙。


层次聚类得到日志模式


我们这里的思路,是采用层次聚类。



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


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


当然我们实践的时候,不用真的算到最顶端,一般来说,模式数量收敛速度差不多了,或者模式里的通配符数量差不多了,就可以停下来了。


日志模式的用法


得到日志模式,具体怎么用呢?一般来说,有两种用法。


一种是故障定位的时候。比如我们查错误日志,单纯用关键词,可能出来几百上千条。你要一个一个看过去,翻好几页,耗时就比较长了。如果内容字很多,还可能看漏了。



使用模式树的信息,直接查看匹配关键字的日志的模式情况,可能就只有那么三五条信息,一眼就可以看完,很快就可以知道问题在哪,就可以进行下一步了。


另一个用途,就是把学习得到的模式,加载到日志采集的实时处理流程里,进行异常检测,提前发现问题。这时候,我们除了模式,还可以检测参数,检测占比。



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


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


这么三层检测下来,相当于把模式异常、数值异常、时序指标异常融合到了一起。



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


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


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


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


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


日志分析实践与案例


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


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


我们可以通过仪表盘的可视化效果,对业务交易量的各个不同维度,进行非常细致的统计分析。这样有什么变动的时候,一眼就能看到。



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


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


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


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


如果是业务结构比较复杂的场景,可能单看最终用户层面的交易维度不足以定位故障。我们还需要从内部的业务流转关系来调查问题。这时候,就可以使用拓扑图来观测系统运行状态。



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


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


业务分析的另一个层面,是针对用户访问的个案分析。类似现在很流行的 Tracing 调用链系统。



对于智能日志中心来说,Tracing 数据也是能很好支持的。在这个基础上,可以做到很好的展示。日志易提供了标准的调用链表格,还提供了循序图分析。这是业界比较少见的方式,但对研发人员很友好,因为系统设计的时候,循序图是研发人员很熟悉的方式。


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


除了系统内部,还可以从 DNS 和 CDN 厂商获取日志,甚至包括收集自己的手机 App 日志,来了解、监控端到端的情况。



以上截图,展示了 10TB 级别日志量的实时返回码趋势分析、各站点缓存命中率分析、各站点响应时长分析、流量峰值分析,以及用户行为轨迹分析、高频请求客户分析、热门站点分析、域名与运营商关系分析等。此外,基于这些日志可以实现性能监控、故障排查等,也可以跟第三方厂商的计费做二次核算。


以上就是本次《海量日志分析与智能运维》的全部内容,谢谢大家。



北京优特捷信息技术有限公司是专注于机器大数据产品、服务和解决方案的供应商,致力于帮助各行各业用户挖掘和利用机器数据价值,提升数字化运营质量,轻松应对IT及业务挑战。