算法加运维
① 相比传统运维工具,AIOps的优势在哪里
作为一种将算法集成到工具里的新型运维方式,AIOps 可以帮助企业最大程度地简化运维工作,把 IT 从耗时又容易出错的流程中解放出来。
有了 AIOps,当 IT 出现故障隐患,运维人员不需要再等待系统发出故障告警,通过内置的机器学习算法以及大数据技术,就能自动发现系统的各类异常,从而实现从异常入手判断故障发生的镇老扮可能性、严重性和影响,依赖机器对数据的分析结果,判断最佳的应对方案。
由此可以看出,基于 AIOps 的管理方法对监控式运维的底层技术实现了颠覆。传统 IT 运维管理工具更为关注突发事件(即告警)、配置和性能,而 AIOps 则更加关注问题、分析和预测御灶,二者可谓互相补充相得益彰。
对 IT 运维人员而言,当一条含兆告警被确认的时候,不但意味着你第一时间发现了业务故障,更意味着在故障发生的这一刻,业务已经受到了影响。而随着 AIOps 的出现,IT 部门可以通过机器学习和算法技术,事先发现 IT 系统的运行异常,提前进行故障的防范甚至规避措施,确保业务故障不出现或者少出现,这些对于 IT 和业务部门来说意义重大。
② 运维是做什么的
不同类型的运维,具体的工作也是不一样的,例举部分如下:
1、运维工程师/运维开发工程师:负责具体的产品线运维工作,同时也需要掌握开发的能力,深入业务,最了解业务的痛点和问题,同时研发/优化针对产品业务需求的平台、工具和手段,能够接触到各类优秀的系统架构并有能力做出优劣对比。
同时对业务的掌控决定了相应运维工程师在业务发展中的作用。长远发展是成为大型系统的架构师。
2、运维平台研发工程师:专门研发运维相关通用平台和技术,需要有一定的产品线运维经验或从产品线中拿到运维需求。对研发能力有较高的要求,对系统的设计有较严格的标准,并且能够理解用户需求。
做出适合服务运维和满足运维工程师使用体验的运维产品,长远的发展是成为各个技术纵向领域的技术专家。
3、数据库研发工程师/数据库工程师:数据库方向是运维技术中较为特殊的一个方向,由于业务的重要性通常需要专设岗位,业界在该方向也有深厚的研究和积累。主要方向有数据库内核、云数据库等,长远发展是数据库领域的技术专家,数据库架构师。
4、运维经理:运维同学做事情的过程中通常需要协调多个RD和QA同学,对协调和推进能力要求比较高,对一些技术深度还不错,协调和推进能力比较高的同学非常适合转型管理职位,长远的发展和技术部门的管理职位一样目标是CTO、CEO。
5、业务运维工程师:主要负责监控线上的服务质量,响应异常/处理突发故障,在线发布/升级产品。和相应产品线的研发和测试协调处理产品问题,基于工作中的问题和数据分析进行抽取,将运维经验理念落地沉淀为方法论/工具/系统/平台。
并制定相关的改进计划,在各个技术方向上落地实现,最终反馈回运维工作中,提高运维本身的效率和产品的价值。
③ IT运维平台算法背后的两大“神助攻”
智能运维(AIops)是目前 IT 运维领域最火热的词汇,全称是 Algorithmic IT operations platforms,正规翻译是‘基于算法的 IT 运维平台’,直观可见算法是智能运维的核心要素之一。
本文主要谈算法对运维的作用,涉及异常检测和归因分析两拆御隐方面,围绕运维系统Kale 中 skyline、Oculus 模块、Opprentice 系统、Granger causality(格兰杰因果关系)、FastDTW 算法等细节展开。
一、异常检测
异常检测,是运维工程师们最先可能接触的地方了。毕竟监控告警是所有运维工作的基础。设定告警阈值是一项耗时耗力的工作,需要运维人员在充分了解业务的前提下才能进行,还得考虑业务是不是平稳发展状态,否则一两周改动一次,运维工程师绝对是要发疯的。
如果能将这部分工作交给算法来解决,无疑是推翻一座大山。这件事情,机器学习当然可以做到。但是不用机器学习,基于数学统计的算法,同样可以,而且效果也不差。
异常检测之Skyline异常检测模块
2013年,Etsy 开源了一个内部的运维系统,叫 Kale。其中的 skyline 部分,就是做异常检测的模块, 它提供了 9 种异常检测算法 :
first_hour_average、
simple_stddev_from_moving_average、
stddev_from_moving_average、
mean_subtraction_cumulation、
least_squares
histogram_bins、
grubbs、
median_absolute_deviation、
Kolmogorov-Smirnov_test
简要的概括来说,这9种算法分为两类:
从正态分布入手:假设数据服从高斯分布,可以通过标准差来确定绝大多数数据点的区间;或者根据分布的直方图,落在过少直方里的数据就是异常;或者根据箱体图分析来避免造成长尾影响。
从样本校验入手:采用 Kolmogorov-Smirnov、Shapiro-Wilk、Lilliefor 等非参数校验方法。
这些都是统计学上的算法,而不是机器学习的事情。当然,Etsy 这个 Skyline 项目并不是异常检测的全部。
首先,这里只考虑了一个指标自己的状态,从纵向的时序角度做旅厅异常检测。而没有考虑业务的复杂性导致的横向异常。其次,提供了这么多种算法,到底一个指标在哪种算法下判断的更准?这又是一个很难判断的事情。
问题一: 实现上的抉择。同样的样本校验算法,可以用来对比一个指标的当前和历史情况,也可以用来对比多个指标里哪个跟别的指标不一样。
问题二: Skyline 其实自己采用了一种特别朴实和简单的办法来做补充——9 个算法每人一票,投票达到阈值就算数。至于这个阈值,一般算 6 或者 7 这样,即占到大多数即可。
异常检测之Opprentice系统
作为对比,面对相同的问题,网络 SRE 的智能运维是怎么处理的。在去年的 APMcon 上,网络工程师描述 Opprentice 系统的主要思想时,用了这么一张图:
Opprentice 系统的主体流程为:
KPI 数据经过各式 detector 计算得到每个点的诸多 feature;
通过专门的交互工具,由运维人员标记 KPI 数据的异常时间段;
采用随机森林算法做异常分类。
其中 detector 有14种异常检测算法,如下图:
我们可以看到其中很多算法在 Etsy 的 Skyline 里同样存在。不过,为避免给这么多算法调配参数,直接采用的办法是:每个参数的取值范围均等分一下——反正随机森林不要求什么特征工程。如,用 holt-winters 做为一类拆滚 detector。holt-winters 有α,β,γ 三个参数,取值范围都是 [0, 1]。那么它就采样为 (0.2, 0.4, 0.6, 0.8),也就是 4 ** 3 = 64 个可能。那么每个点就此得到 64 个特征值。
异常检测之
Opprentice 系统与 Skyline 很相似
Opprentice 系统整个流程跟 skyline 的思想相似之处在于先通过不同的统计学上的算法来尝试发现异常,然后通过一个多数同意的方式/算法来确定最终的判定结果。
只不过这里网络采用了一个随机森林的算法,来更靠谱一点的投票。而 Etsy 呢?在 skyline 开源几个月后,他们内部又实现了新版本,叫 Thyme。利用了小波分解、傅里叶变换、Mann-whitney 检测等等技术。
另外,社区在 Skyline 上同样做了后续更新,Earthgecko 利用 Tsfresh 模块来提取时序数据的特征值,以此做多时序之间的异常检测。我们可以看到,后续发展的两种 Skyline,依然都没有使用机器学习,而是进一步深度挖掘和调整时序相关的统计学算法。
开源社区除了 Etsy,还有诸多巨头也开源过各式其他的时序异常检测算法库,大多是在 2015 年开始的。列举如下:
Yahoo! 在去年开源的 egads 库。(Java)
Twitter 在去年开源的 anomalydetection 库。(R)
Netflix 在 2015 年开源的 Surus 库。(Pig,基于PCA)
其中 Twitter 这个库还被 port 到 Python 社区,有兴趣的读者也可以试试。
二、归因分析
归因分析是运维工作的下一大块内容,就是收到报警以后的排障。对于简单故障,应对方案一般也很简单,采用 service restart engineering~ 但是在大规模 IT 环境下,通常一个故障会触发或导致大面积的告警发生。如果能从大面积的告警中,找到最紧迫最要紧的那个,肯定能大大的缩短故障恢复时间(MTTR)。
这个故障定位的需求,通常被归类为根因分析(RCA,Root Cause Analysis)。当然,RCA 可不止故障定位一个用途,性能优化的过程通常也是 RCA 的一种。
归因分析之 Oculus 模块
和异常检测一样,做 RCA 同样是可以统计学和机器学习方法并行的~我们还是从统计学的角度开始。依然是 Etsy 的 kale 系统,其中除了做异常检测的 skyline 以外,还有另外一部分,叫 Oculus。而且在 Etsy 重构 kale 2.0 的时候,Oculus 被认为是1.0 最成功的部分,完整保留下来了。
Oculus 的思路,用一句话描述,就是:如果一个监控指标的时间趋势图走势,跟另一个监控指标的趋势图长得比较像,那它们很可能是被同一个根因影响的。那么,如果整体 IT 环境内的时间同步是可靠的,且监控指标的颗粒度比较细的情况下,我们就可能近似的推断:跟一个告警比较像的最早的那个监控指标,应该就是需要重点关注的根因了。
Oculus 截图如下:
这部分使用的 计算方式有两种:
欧式距离,就是不同时序数据,在相同时刻做对比。假如0分0秒,a和b相差1000,0分5秒,也相差1000,依次类推。
FastDTW,则加了一层偏移量,0分0秒的a和0分5秒的b相差1000,0分5秒的a和0分10秒的b也相差1000,依次类推。当然,算法在这个简单假设背后,是有很多降低计算复杂度的具体实现的,这里就不谈了。
唯一可惜的是 Etsy 当初实现 Oculus 是基于 ES 的 0.20 版本,后来该版本一直没有更新。现在停留在这么老版本的 ES 用户应该很少了。除了 Oculus,还有很多其他产品,采用不同的统计学原理,达到类似的效果。
归因分析之 Granger causality
Granger causality(格兰杰因果关系)是一种算法,简单来说它通过比较“已知上一时刻所有信息,这一时刻 X 的概率分布情况”和“已知上一时刻除 Y 以外的所有信息,这一时刻 X 的概率分布情况”,来判断 Y 对 X 是否存在因果关系。
可能有了解过一点机器学习信息的读者会很诧异了:不是说机器只能反应相关性,不能反应因果性的么?需要说明一下,这里的因果,是统计学意义上的因果,不是我们通常哲学意义上的因果。
统计学上的因果定义是:‘在宇宙中所有其他事件的发生情况固定不变的条件下,如果一个事件 A 的发生与不发生对于另一个事件 B 的发生的概率有影响,并且这两个事件在时间上有先后顺序(A 前 B 后),那么我们便可以说 A 是 B 的原因。’
归因分析之皮尔逊系数
另一个常用的算法是皮尔逊系数。下图是某 ITOM 软件的实现:
我们可以看到,其主要元素和采用 FastDTW 算法的 Oculus 类似:correlation 表示相关性的评分、lead/lag 表示不同时序数据在时间轴上的偏移量。
皮尔逊系数在 R 语言里可以特别简单的做到。比如我们拿到同时间段的访问量和服务器 CPU 使用率:
然后运行如下命令:
acc_count<-scale(acc$acc_count,center=T,scale=T)
cpu<-scale(acc$cpuload5,center=T,scale=T)
cor.test(acc_count,cpu)
可以看到如下结果输出:
对应的可视化图形如下:
这就说明网站数据访问量和 CPU 存在弱相关,同时从散点图上看两者为非线性关系。因此访问量上升不一定会真正影响 CPU 消耗。
其实 R 语言不太适合嵌入到现有的运维系统中。那这时候使用 Elasticsearch 的工程师就有福了。ES 在大家常用的 metric aggregation、bucket aggregation、pipeline aggregation 之外,还提供了一种 matrix aggregation,目前唯一支持的 matrix_stats 就是采用了皮尔逊系数的计算,接口文档见:
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-matrix-stats-aggregation.html
唯一需要注意的就是,要求计算相关性的两个字段必须同时存在于一个 event 里。所以没法直接从现成的 ES 数据中请求不同的 date_histogram,然后计算,需要自己手动整理一遍,转储回 ES 再计算。
饶琛琳,目前就职日志易,有十年运维工作经验。在微博担任系统架构师期间,负责带领11人的SRE团队。着有《网站运维技术与实践》、《ELKstack权威指南》,合译有《Puppet 3 Cookbook》、《Learning Puppet 4》。在众多技术大会上分享过自动化运维与数据分析相关主题。
④ 运维是做什么的工作
运维是指对大型组织已经建立好的网络软硬件的运行维护。那么具体运维是干什么的呢?下面就和我一起去看一下相关信息吧,希望可以给大家带来帮助。
运维是干什么的
运维,这里指互联网运维,通常属于技术部门,与研发、测试、系统管理同为互联网产品技术支撑的4大部门,这个划分在国内和国外以及大小公司间都会多少有一些不同。
一个互联网产品的生成一般经历的过程是:产品经理、需求分析、研发部门开发、测试部门测试、运维部门部署发布以及长期的运行维护。
运维,本质上是对网络、服务器、服务的生命周期各个阶段的运营与维护,在成本、稳定性、效率上达成一致可接受的状态。
运维工程师是做什么的
1、问题发现:设计并开发高效的监控平台和告警平台,使用机器学习、大数据分析等方法对系统中的大量监控数据进行汇总分析,以及在系统出现异常的时候可以快速的发现问题和判断故障的影响。
2、问题处理:设计并开发高效的问题处理平台和工具,在系统出现扮困缓异常的时候可以快速/自动决策并触发相关止损预案,快速尺旅恢复服务。
3、问题跟踪:通过分析问题发生时系统的各种表现(日志、变更、监控)确定问题发生的根本原因,制定并开发预案工具。
4、变更管理:以可控的方式,尽可能高效的完成产品功能的迭代的变更工作。在这方面主要工作内容有:
5、配置管理:通过配置管理平台(自研、开源)管理服务涉及到的多个模块、多个版本的关系以及配置的准确性。
6、发布管理:通过构建自动化的平台确保每一次版本变更可以安全可控地发布到生产环境。
7、容量管理:在服务运行维护阶段,为了确保服务架构部署的合理性同时掌握服务整体的冗余,需要不断评估系统的承载能力,并不断优化之。在这方面主要工作内容有:
运维工程师一月多少钱
起薪多在8-10K,1-3年工作经验可达12-16K,3-5年工作经验可拿到年薪30-50W,被各大厂大量需要并且薪资不亚于程序员的互联网英雄。虽然互联网技术岗位更容易“月薪过万”,但是互联网的需求不再是会单一技能的运维,而是对运维+开发的人才由衷青睐,薪资也自然比普通运维更高。
在逐步的发展阶段中,注重总结反省的工程师会逐渐成长为高阶运维人员,通常他们会有比较体系化的服务运维理解。也有一部分工程师由于出色的项目管理规划能力,逐渐成为项目经理。再进一步的发展,高阶的运维人员对于产品的理解将非常的透彻,因而在这种情况下,高阶运维人员甚至可以成为产品的产品经理、产品研发的咨询顾问,在产品功能的设计与开发中起到至关重要的角色。
各个方向上的工程师发展到一定阶段后,没有明确的界限,需要同时具备较强的运维、架构、编程、算法等能力,是一厅模个要求很高要求的职业。以后运维工程师的素养会越来越高,规范也会越来越强。
⑤ 智能运维AIOps,主要比的是不是机器学习算法
智能运维AIOps,顾名思义,一定是跟智能和AI算法有关,但跟机器学习算法不能等同看待。
算法只是完成智能运维建设中的重要一环。就跟安卓系统一样,同样的系统和算法,当它基于的设备不同,其价值也大不相同。合适的算法只是智能运维产品的基础。
通常想要一个算法能产生更大的效应,在建模时也需要根据情况不断调参。此时有非常专业的工程师来调自然是最好,如果有操作方便的调参界面也行。调整界面的易用性,也是判断算法能否顺畅使用的一个标准。
有了合适的算法后,还得有贴合运维实际场景的功能设计、能处理大规模的实时数据 (嗯,早期也看到过因为流数据处理能力太差,该在大清早完成的跑批,无法顺利完成影响实际生产)。当这几种能力齐备后,机器学习算法才能真正为智能运维所用。
智能运维不等于机器学习算法
⑥ 运维工程师,工作内容有哪些
随着移动互联网、O2O、云计算、大数据的发展,一些大的互联网公司对服务可靠性的追求,也会转化为对运维工程师的技能和能力要求,这也是目前高端运维工程师十分稀缺的原因。
当然,想要成为一名优秀的运维工程师也不是一件简单的事情,需要学习信息安全、linux运维、windows运维、oracle、网络技术等等内容。当然,运维的发展还是有许多选择的,下面我们来看一看都有哪些岗位的运维工程师。
1、Linux运维工程师
Linux云计算运维工程师这个岗位,甚至到后期薪资会比开发高的多,做运维年薪50W的还是十分常见。想要成为优秀的Linux运维工程师,像linux系统、基础命令、shell脚本、MySQL都是运维工程师必需要学的内容。一般来说,大公司运维还要懂一些内核以及C编程之类知识。对于小公司而言技术要求能力要求并不是很高,基本也用不到多少开发的知识。
2、运维工程师/运维开发工程师:
运维工程师、运维开发工程师绝对是企业的核心职位之一。想要成为一名运维工程师或是运维开发工程师,需要非常丰富的实践经验。除了要熟练掌握产品线的运维工作,同时也需要学习开发镇携耐的能力,学习了解业务的痛点和问题。当然了,运维开发工隐激程师的长远发展是成为大型系统的架构师,其职业前途和薪资待遇自然不必多说。
3、数据库工程师:
数据库方向是运维技术中较为特殊的一个方向,由于业务的重要性通常需要专设岗位,业界在该方向也有深厚的研究和积累。想要成为数据库工程师,主要方向有数据库内核、云数据库等,工资待遇在一万左右,长远发展目标是数据库领域的技术专家,数据库架构师。
4、运维平台研发工程师:
专门研发运维相关通用平台和技术,需要有一定的产品线运维经验或从产品线中拿到运维需求。对研发能力有较高的要求,对系统的设计有较严格的标准,并且能够理解用户需求,做出适合服务运维和满足运维工程师使用体验的运维产品,长远的发展是成为各个技术纵向领域的技术专家。
5、运维经理:
想要成为一名优秀的运维经理,对协调和推进能力的要御春求比较高。所以一些技术深度还不错,协调和推进能力比较高的同学,非常适合转型管理职位。长远的发展和技术部门的管理职位一样,目标是CTO、CEO,年薪百万不是梦。
总体上看来,想要成为一名优秀的运维工程师,必须要有不断提升的学习态度,做到掌握多种技能,像是运维、架构、编程、算法等能力综合发展。在未来可以预见的是,运维工程师的素养和要求会越来越高,发展到一定阶段后,界限也会越来越模糊。
⑦ 杩愮淮宸ョ▼甯堟槸锅氢粈涔堢殑
杩愮淮宸ョ▼甯堟槸璐熻矗鍏鍙哥绣缁滃畨鍏ㄣ佹e父杩愯岀殑銆
杩愮淮宸ョ▼甯堬纴璐熻矗缁存姢骞剁‘淇濇暣涓链嶅姟镄勯珮鍙鐢ㄦэ纴钖屾椂涓嶆柇浼桦寲绯荤粺鏋舵瀯鎻愬崌閮ㄧ讲鏁堢巼銆佷紭鍖栬祫婧愬埄鐢ㄧ巼鎻愰珮鏁翠綋镄凴OI銆傝繍缁村伐绋嫔笀闱㈠圭殑链澶ф写鎴樻槸澶ц勬ā闆嗙兢镄勭$悊闂棰桡纴濡备綍绠$悊濂藉嚑鍗佷竾鍙版湇锷″櫒涓婄殑链嶅姟锛屽悓镞朵缭闅沧湇锷$殑楂桦彲鐢ㄦэ纴鏄杩愮淮宸ョ▼甯堥溃涓寸殑链澶ф写鎴樸
镞犺哄仛浠涔堣繍缁达纴杩愮淮宸ョ▼甯堟渶锘烘湰镄勮亴璐i兘鏄璐熻矗链嶅姟镄勭ǔ瀹氭э纴纭淇濇湇锷″彲浠24灏忔椂涓嶉棿鏂鍦颁负鐢ㄦ埛鎻愪緵链嶅姟銆傞渶瑕佺簿阃歴hell銆丳ython銆丳erl绛1镊2绉岖紪绋嬭瑷锛屼篃瑕佺啛缁冩帉鎻″父鐢ㄦ暟鎹缁撴瀯鍜岀畻娉曪纴骞惰兘𨱔垫椿杩愮敤銆
杩愮淮宸ョ▼甯埚伐浣滃唴瀹
1銆佷簨浠剁$悊锛氱洰镙囨槸鍦ㄦ湇锷″嚭鐜板纾甯告椂灏藉彲鑳藉揩阃熺殑鎭㈠嶆湇锷★纴浠庤屼缭闅沧湇锷$殑鍙鐢ㄦэ绂钖屾椂娣卞叆鍒嗘瀽鏁呴㱩浜х敓镄勫师锲狅纴鎺ㄥ姩骞朵慨澶嶆湇锷″瓨鍦ㄧ殑闂棰桡纴钖屾椂璁捐″苟寮鍙戠浉鍏崇殑棰勬堜互纭淇濇湇锷″嚭鐜版晠闅沧椂鍙浠ラ珮鏁堢殑姝㈡崯銆
2銆侀梾棰桦勭悊锛氲捐″苟寮鍙戦珮鏁堢殑闂棰桦勭悊骞冲彴鍜屽伐鍏凤纴鍦ㄧ郴缁熷嚭鐜板纾甯哥殑镞跺椤彲浠ュ揩阃/镊锷ㄥ喅绛栧苟瑙﹀彂鐩稿叧姝㈡崯棰勬堬纴蹇阃熸仮澶嶆湇锷°
3銆侀厤缃绠$悊锛氶氲繃閰岖疆绠$悊骞冲彴锛堣嚜镰斻佸紑婧愶级绠$悊链嶅姟娑夊强鍒扮殑澶氢釜妯″潡銆佸氢釜鐗堟湰镄勫叧绯讳互鍙婇厤缃镄勫嗳纭镐с
4銆佸归噺浼桦寲锛氩熀浜庡归噺璇勪及鏁版嵁锛屽垽鏂绯荤粺镄勭摱棰埚苟鎻愪緵瀹归噺浼桦寲镄勮В鍐虫柟妗堛傛瘆濡傞氲繃璋冩暣绯荤粺鍙傛暟銆佷紭鍖栨湇锷¢儴缃叉灦鏋勭瓑鏂规硶𨱒ラ珮鏁堢殑鎻愬崌绯荤粺瀹归噺銆
浠ヤ笂鍐呭瑰弬钥冿细锏惧害锏剧戋旇繍缁村伐绋嫔笀