AI赋能DevOps:数据驱动的全栈工程师实践

DevOps是什么?

对于传统的软件研发而言,开发,测试,运维,运营,有不一样的岗位进行分工协做,以保证质量和专业度,同一件事情,依赖不一样岗位的排期、沟通、协调,效率不免会有打折。而对于互联网业务来讲,快速的迭代,对人力的需求很是强烈,不大可能有足够的人力支撑这么多岗位。同时跨部门的沟通,强烈影响了项目的进度,所以一些快速发展的团队,开始推行DevOps,本身作测试,保证代码质量,本身上线运维,监控告警。亚马逊很早就开始推行"you build it, you run it"的文化。因为本身对本身的作事情很清楚,所以效率也会很高。这就是DevOps。算法

DevOps的挑战

DevOps责任多,事情多且杂。一天的时间怎么分配?我做为研发,确定是但愿一天90%可以专心的写代码。但实际上只有20%的时间来写代码,其余的时间作什么?帮用户调查问题,处理工单。作线上的运维等等。用户提了一个工单,你要立马放下手中的工做去帮用户调查问题。结果就发现时间被碎片化了,一天中很难有大块的时间去专门作研发。vim

经过数据驱动和智能自动化应对DevOps的挑战

怎么解决研发过程当中时间碎片化的问题?咱们原来作了不少重复性的工做,这些工做能够总结和沉淀下来,经过工具帮咱们去沉淀。咱们原来须要调查问题的时候,才登陆集群要抓日志;如今作一个采集日志的工具,把全部日志的实时采集到云端,当须要看日志的时候,我立马就能够在服务端看到全部的日志信息。原来须要到机器上搜索日志,如今在云端作倒排索引,直接就能够搜索到整个集群的日志。原来我可能要用excel作一些数据分析的工做,去分析个人运营效果怎么样。如今在服务端实现一套实时分析的计算引擎,再加上可视化功能,帮助作各类各样的报表。原来调查问题的时候要登陆集群上,用vim打开集群上的日志,看文件上下文是什么样子的。如今在云端作一个上下文关联的功能,直接在云端就能够看到全部集群上的日志和上下文信息。原来调查问题可能依赖于人的经验。如今经过AI帮咱们作自动化的事情。网络

因此总结下来咱们但愿经过数据中台帮咱们实现数据驱动的运维,来代替原来的人工驱动。借助于AI帮咱们实现自动化、智能化。经过这种数据驱动加上智能自动化的运维帮咱们节省被碎片化的时间。运维

数据中台的挑战

若是咱们要作这样一个数据中台会面临哪些挑战呢?首先就是数据太少,若是咱们抓取的数据太少的话,那么咱们的信息量就会太少,在分钟级别的监控里面可能不少信息就被平均掉了,咱们只有抓秒级监控才能够看到咱们所关心的数据。第二个是实时性的挑战,咱们作线上故障恢复的时候,都但愿是说能够尽快定位问题的答案,尽快去恢复,这就是一个实时性的需求。若是咱们找到答案太慢,可能已经错过了一个最佳的自救的时间。第三,系统愈来愈复杂,咱们的需求是愈来愈多的,咱们每加一个需求要加一个模块,那么维护整个一套系统实际上是一个很是大的挑战。最后是数据太多的问题,数据太少是问题,太多也是问题。太少的话信息量不足,太多的话不少重要的信息被淹没。关于数据规模的问题和数据速度的问题能够经过数据中台来解决,数据中台帮咱们经过算力来换取一个数据的速度和规模;而数据太多信息爆炸的问题,咱们用AI算法来换取对数据深刻的洞察力。机器学习

数据中台的基础能力

数据中台具有的能力,第一个就是数据采集,数据采集帮咱们从各个数据孤岛中,从各类环境中,把各类各样的格式的日志统一采集,而后以统一的格式被存储起来。原来数据可能在手机上,可能在网页上等等各类各样的环境,格式也不同。统一采集以后, 咱们就有统一的格式,之后分析就很是方便了。数据采集帮咱们作的脏活累活,实际上是帮咱们节省了不少的时间。数据采集以后,中台要有二次加工的能力。为何要二次加工?由于咱们采集过来的数据可能包含着脏数据,垃圾数据,咱们要过滤掉,作一些转换和富华。加强数据质量,数据质量加强之后,分析的时候才能够驾轻就熟。接下来就是一个查询分析的能力,中台提供的进行交互式的查询分析,能够在秒级别分析上亿日志。经过这种查询分析能力你能够尽情的探索你数据里面包含了什么价值。查询分析依赖于人的经验探索数据,那么咱们还能够借助AI自动探索数据,这就是AI的预测能力和异常检测能力以及根因分析的能力。经过数据中台将AI,帮助咱们去获取对数据源的可观察性,进而经过数据可观察性,实现对运维系统的可观察性。工具

基于数据中台的问题调查路径

咱们前面介绍了数据中台的,接下来我会以一系列的实践去分享咱们怎么样利用这样一个数据中台帮咱们解决咱们DevOps所遇到的各类各样的问题。性能

咱们说到数据驱动的运维,首先咱们会面临大规模的数据,如何去找有效的信息,这就是一个发现的过程。原来咱们经过grep搜索的关键字,经过awk作一些简单的计算;借助中台,咱们能够经过交互式查询去不停探索答案,也能够经过异常检测帮助咱们智能的检测数据里面到底有什么异常的信息。
当咱们发现一些有效信息之后,接下来怎么办?咱们要从这些线索出发,而后去找更多的线索,去找关联关系,去找因果关系,这个就是上下文钻取,以及聚类。那么经过这种钻取咱们能够找到一系列的更加关联的信息,咱们最终找到了信息足够多以后,咱们要肯定最终的一个答案,这个就是根因分析,帮咱们肯定故障的根本缘由是什么。学习

数据驱动和AI驱动的DevOps实践

1:搜索和上下文

咱们作数据分析最简单的形式是什么?咱们上网的时候,用的最多的工具是什么?是搜索引擎,搜索能够帮咱们尽情探索数据中的价值。原来咱们到机器上搜索日志,数据在文件中是是有序的存储的。而在采集的过程当中,为了性能的考虑,会以乱序的形式存储下来,固然咱们搜索完以后,可能咱们看到的是乱序的日志。如何从这些乱序的日志中找它的上下文信息呢?咱们为每一条日志指定一个编码。当咱们搜索到一条日志以后,去看它的编码值,再去计算它的下一条编码是什么,根据编号搜索下一条日志。经过这种方式去找,搜索,去定位下上文测试

咱们看一个搜索和上下文的样例。咱们把全部集群的日志都被统一的采集到一块儿,而后去搜索整个集群日志,这个时候若是咱们对某一台机器感兴趣的话,咱们能够把机器的hostname加入到搜索条件里面去。这个时候若是咱们对某一些关键字不感兴趣的话,咱们能够过滤掉。这个时候咱们定位到9条日志,咱们对这9条日志感兴趣。咱们能够去看上下文的信息。在上下文里面,能够以上下文严格有序的一种形式去看这条日志先后发生的一些事情,经过这种方式找它的一个因果关系。优化

2:全局视野和局部视野

搜索针对的对象是什么?是日志;日志是什么?是一种事件类型的数据,里面包含的信息有事件的发生的时间、对象、操做,还有各类属性,关于事件的描述是很是详细的。除了这种事件日志,还有一种指标日志。指标日志有时间,有一个汇总的数值,例如用一个数值表示这一分钟有多少个浏览量。这两种数据有什么区别?事件日志描述的是一个很是详细的信息,因此它的体量和规模是很是大的。它表明的是咱们从局部去观察问题的一种视角。而指标数据是一种汇总的信息,全部它的体量很是小。可是它表明的是一种全局视角,归纳整个事件的信息。例如,咱们一分钟有1万次的访问,咱们用这种事件日志来表示可能就真的是1万条数据。用这种指标日志可能就是1万这一个数字,这就是二者之间的差异。这两种日志之中是否是割裂的?不是,咱们能够经过计算把事件日志转化为指标日志,一个是表明大视野,一个表明小视野。咱们能够充分利用计算在这两种视野之间切换去调查问题。

举个例子,咱们面对一个事件日志,可能对某一些维度感兴趣,比方说时间维度,那么在时间维度中统计趋势指标;或者对IP维度感兴趣,能够统计出IP分布,他们这个时候咱们就把一个事件日志转化成了指标日志,从局部视野跳到所有视野看待问题。
当咱们看到某一个数值比较特殊,咱们对它进行下钻,增长维度,进行更多的统计。比方说咱们按照不一样的IP统计出它的趋势。假如统计出来的各个维度之间,咱们对某一些维度感兴趣的话,咱们把它单独拎出来,跳回咱们原来的事件日志当中,帮咱们搜索对应的事件。这样的话咱们就造成了一个调查问题的闭环,咱们从事件日志出发去统计它全局的信息,再回到原来的事件,这是一个闭环。

3:聚类解决数据爆炸

事件日志的体量是很是大的,如今对于咱们的业务来讲,天天的数据量都在上涨,每分钟能达到上亿条的日志,日志这么多,重要的信息被淹没了怎么办?即便咱们只关心错误的日志,可是错误的信息可能都有上千条,何时看完?咱们一般对于这不少大量日志的这种场景,首先想的是排除法,比方说咱们先把一些不关心的日志排除掉,逐步排除掉一些关键字,逐步的缩小数据的体量,慢慢靠近咱们关心的信息。对于数值类来讲,咱们怎么样排除?咱们可能统计数值的百分位,去统计它的25分位在哪里,75分位在哪里?99分位在哪里?假如说说咱们对99分位感兴趣,只须要过滤出来99分位以上的数据,经过这种方式减小数值类型数据的体量。

可是这种排除法不必定能够帮助咱们找到全部咱们所关心的问题,由于咱们如今的业务实在是太复杂了,维度太多了。有一个真实的案例,就是有一次咱们一个新版本发布,有一个边界的条件没有测试到,上线以后也没发现,直到用户跑过来问,为何我以前能够用,如今不能用?如今开始报错了?我到这个时候才发现发现,真的是从升级那一刻开始出现一种新类型的日志,原来都没有这种日志。显然用排除法是没有办法帮我解决升级后的这种异常检测,怎么办呢?那咱们引入了智能聚类。即便每分钟产生上亿条日志,可能里面不到100种类新的事件,只是说每一种类新的事件重复发生了不少次,因此形成总体数据的膨胀。

经过这种分析数据之间的关联性,把数据里面的干扰信息过滤掉,提取出里面一些公共的特征,这个就是聚类。在这个例子中咱们有1300万条数据,人眼去看这1300万条可能一天一晚上也看不到。可是咱们能够经过聚类,最后只有35条聚类的结果,这个时候咱们去看35种类型的事件,其实一眼就能够看到,那么在机器上到底发生了什么事情。好比说,我能够一眼看到这是有这样一个timeout关键字,是否是要特殊的关注它?

咱们怎么样利用智能聚会帮助咱们解决升级后故障发现的问题。咱们能够经过对比升级后你的聚类结果和升级前了聚类结果,查看有没有什么差异,若是一个新的事件在升级以后出现了,而以前是没有的,这是特殊关注的。经过这种方式咱们去作告警,及时发现问题,及时的处理,避免影响到用户。

4:Metric数据异常检测

经过智能聚类实现对文本类的数据异常类检测。那么对于咱们刚才说的Metric指标数据,怎么样寻求异常检测?最简单的指标什么?是一条平稳的直线,围绕这样一条直线,可能有一个很轻微的在正常范围以内的波动,对于这种数值咱们设一个固定的阈值,能够很好的把一些大的抖动捕获出来。可是这是一种很是简单的场景,在现实的业务中其实没有这么简单的,现实的数据必定是有各类各样的波动。
最多见波动是什么?是周期性。通常咱们工做日它的流量比较高,到了周末流量又跌下去了,那就是一个周期新的波动,因此对于波动性的信息咱们怎么样作异常的检测?我能够经过同比、环比,拿当前时间点的数据和上一个周期同一个时间点的数据进行对比,看看有没有发生比较大的误差,这就是同环比算法。

还有一种状况就是趋势性,对于互联网业务来讲,增加是一种常态,没有增加的业务是没有前途的。在增加的趋势中,可能还有周期性的波动,以及扰动。咱们所关心的那种异常的点可能被掩藏在这样一个增加的趋势中,对于人眼来讲,其实一眼就能够看出来哪个点是异常点。可是对于算法来讲检测出来这样一个异常点是一个很大的挑战。咱们的解决方案是经过机器学习,经过学习历史上的数据它的一个趋势性信息,周期性信息,而后去预测将来的点是什么样子的。那么把预测的点和真实出现的这个数据进行一个对比,那么当这样一个差值发生比较大的误差的时候,就认为这是一个异常的点。经过这种方式去检测趋势性数据里面的一个异常点。

无论是周期性信息仍是趋势性的信息,它其实都是一种很规律的一种波动。那么还有一种数据波动称为断层。比方说原来咱们一个机器,它的CPU很低。忽然有一天你把流量切到机器上,它的CPU立马暴涨到另一个水平,可是它的波动又没有什么变化,这就是断层。对于断层的数据,其实统计的时候是很是难的,由于在这样一个点里面它的导数是没有的。那么咱们能够用专门的断层检测算法去检测出来。
最后一个就是变点,变点是什么?就是在某一个点,它的波动形态、统计特征发生了变化。原来多是一条平稳的直线,可是在某一个时间点假如说发生了异常,你的流量抖动开始发生了很是大的一个抖动,这就是一个变点。经过变点算法,统计全部数据里面的波动信息,而后对比不一样点上的波动信息进行检测这种变点。这就是咱们针对Metric指标数据,利用机器学习、统计算法进行异常检测的方法。

5:异常根因分析

当咱们检测到异常以后,下一步要作什么事情?要找这个异常它发生的缘由是什么?而且及时的去修复它。假如咱们网站流量下跌了7%,下跌是什么缘由引发的?一般人工是怎么检测这个问题的?咱们可能按照咱们的经验逐步去排查,比方说咱们先到服务端看一下,有没有错过日志;服务端没有,再看网络上有没有抖动。OK,那网络端没有抖动,接下来怎么办,再去看用户的统计上有没有异常的一些抖动,结果发现,用户的统计上有抖动的话怎么办?咱们再去下钻,去看什么类型的用户发生了抖动。比方说不一样的城市有没有抖动,不一样的接入点有没有抖动?不一样的客户端有没有抖动?结果发如今客户端这样一个维度,有数据是抖动的。那么咱们再深刻的下钻去找哪种类型的客户端发生了问题。经过这种逐层的下钻,逐层去找,最终定位到版本因素形成了流量下跌。

这是咱们人工调查问题的一个方法,这一套流程走下来实际上是很是耗费时间的。咱们怎么样借助算法帮助咱们作这种异常检测呢?这就是关联规则算法,你们都据说过啤酒和尿布这个故事:在一大堆物品当中,啤酒和尿布同时出现的频率很是高,因此咱们认为它两个之间是有关联关系的,而后进行关联推荐。咱们能够把这种关联推荐给映射到根因分析算法。比方说我拿了一个访问日志,访问日志里面有不少的错误信息,而后咱们再把网络日志拿过来。结果发如今网络日志里面某个交换机常常会和这个错误日志同时出现,是否是能够认为这个交换机上出现了错误?

如何找两个关联的项目,就是咱们经过频繁集算法。咱们把一份错误的日志拿出来,找这个日志里面它高频出现的一些数据集合。比方说咱们在这样一个错误日志里面定位到IP等于1002这样一个用户,他出现的频率是68%,那么是否是认为这样一个用户他就是形成咱们错误的一个缘由?不必定。为何?由于这个用户可能在错误的日志中出现的频率比较高,可是在正确的日志中出现的频率也是很是高的,因此你不能简单认为他就是一个错误的缘由。那怎么办呢?要经过差别集合算法进行统计,咱们把一份完整的数据,按照是否有错误,分红正负两份样本,而后比较两个样本里面的频繁集有什么差异,若是某一个集合它在一个错误的集合中出现的频率比较高,而在正确的集合里面出现的频率比较低,就能够认为这个集合是形成错误的根本缘由。

若是咱们再引入到时序维度,针对咱们刚才说的网站浏览量下跌的问题,咱们怎么样作这种根因分析呢?咱们首先面对一个汇总的流量下跌的曲线,而后能够把咱们所关心的维度都引入进来,例如地区维度,运营商维度,客户端维度所有引入进来,把各类维度自由组合各类各样的集合,那么咱们算出来每个集合它的一个流量曲线,计算算每个集合它下跌的一个趋势,和总体流量下跌趋势之间的关联度,而且打分,按照分数的高低寻找根因集合。经过这种打分找出来一个集合,它对整个流量下跌的贡献是最大的。比方说咱们最终统计出来上海这个地区全部的运营商流量下跌都很是的严重,打分很是高,那咱们认为上海这个集合就是根因。

6:DevOps成本控制

对于咱们DevOps而言,咱们不只要关心咱们所作的成果,还要关心咱们的成本,由于拿堆资源作出来的成果不表明一我的的能力,用最少的资源作最大的事情才能够表明一我的的能力。咱们一般作采购机器,而后等待机器到货、上架,最终部署这个软件,交付。这是一个原来传统的上线机器的流程。这个流程是很长的,通常过几个月才能拿到机器。如今有云服务,一键能够建立机器,当你须要的时候能够立马拿到资源,这样一个流程实在太方便了。可是就是方便背后其实也有一些其余的困扰。比方说我一次测试的时候买了一台机器,用完以后忘了释放,结果这机器在那里跑着一直产生费用,或者我在储存里面放了一大堆的数据,测试彻底以后忘记了删除,过了好久,谁都不知道这个数据是干吗的,谁也不敢删,谁都不知道这个数据删掉之后会不会影响其余的业务。可是这些资源一直产生的费用。直到财务人员发现你的消费比较高的时候,通常都会来踢你的屁股,说你部门成本怎么这么高?你要优化一下了。这个时候其实就已是很被动了,为何?由于这个时候咱们去统计全部的资源,统计谁在用这些资源,这个流程是很是长的。咱们能够经过主动的成本控制,去统计咱们的资源使用量,实时去统计资源使用量,实时去优化。

咱们看一个成本控制的样例。咱们把实时的把帐单数据导入数据中台,而后能够统计出来,我这个月到底花费了多少钱,预测这个月大概花多少钱,以及每个云产品花钱的数量。还能够去看,过去三个月的趋势是怎么样的,以及每个产品的趋势。或者根据咱们过去的趋势信息预测我将来三个月大概要花多少钱,利用这个数字及时的去申请预算。

同时咱们还能够在咱们帐单数据里面,根据统计信息看一下有没有一些异常的帐单。比方说我在近三个月的消费曲线中,发现10月1号这一天帐单发生了暴涨。我要抓出来究竟是哪个云产品产生了这么多消费?因而深刻下钻到日志里面去分析,用刚才提到的根因分析的算法去找哪个产品对一个消费的上涨贡献归最大,因此咱们发现SLS这样一个产品,它的异常打分是最高的。那么咱们就认为,这个产品出现的消费异常,及时的发出告警便可。

Summary

咱们作一个总结,咱们介绍了调查问题的一系列案例,经过这些样例展现咱们如何借助于数据中台,帮助咱们作数据驱动,以及借助AI作一些智能化、自动化的运维。经过这种数据驱动和智能、自动化的运维,总体提高咱们的效率,减小咱们被碎片化的时间。

阿里云双11领亿元补贴,拼手气抽iPhone 11 Pro、卫衣等好礼,点此参与:http://t.cn/Ai1hLLJT


本文做者:云雷

阅读原文

本文为云栖社区原创内容,未经容许不得转载。

相关文章
相关标签/搜索