阿里智能运维实践|阿里巴巴 DevOps 实践指南
编者按:本文源自阿里云云效团队出品的《阿里巴巴 DevOps 实践指南》,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电子书,了解阿里十年 DevOps 实践经验。
阿里巴巴的运维团队致力于打造无人值守的运维平台,用智能化推动高效率、低成本的应用运维。智能运维是运维平台实现信息化和数字化之后的自然发展,利用扎实的技术基础,把机器学习、优化算法和各个专业领域方面的知识完美结合起来,针对具体运维场景提供令人满意的解决方案。
智能运维( AIOps )是依托于阿里巴巴 DevOps 经验沉淀而来的智能化运维平台,通过运维大数据的积累,以及算法团队多种算法的校对,我们将运维提升到新的高度,通过 AI 来帮我们查看数据、判断异常、决策运维操作,形成监、管、控一体化的运维平台。
运维体系面临的挑战
DevOps 运维时代,阿里巴巴运维体系面临如下挑战:
第一,规模化。阿里巴巴的基础设施规模呈指数级增长,在服务器数量是千级别、万级别的时候还勉强可以通过人为操作来运维,但发展到百万级别的时候,任何一个步骤依赖纯人为操作都是不现实的。服务器规模百万级的时候,如何保证整体运维安全、高效的进行是第一个挑战。
第二,高复杂。阿里巴巴业务的多样性及高速发展也对系统稳定性提出了更高的要求,对运维体系带来更大的挑战。曾经我们考核系统可用率 7 个 9,存储方面达到 6 个 9 就很好,但是盒马鲜生这样的业务是要求 100%可用。作为线下业务,在盒马店有半小时不能支付是无法接受。我们要从全链路视角出发,关注每个环节的稳定性建设。
第三,成本优化。成本是门槛,做不到一定的门槛,进入这个市场的机会都没有。除了固定资产投入,运营成本也是很重要的一部分。利用技术进行流程优化,降低各个部分的成本,是提高业务的核心竞争力的关键。
第四,安全。云计算最关心的是安全。系统越来越大,变化越来越快,所面临的内部和外部的风险也越来越大。每天无数变更升级同时进行,如何在系统变更时保持稳定,是需要面对的另一个巨大挑战。
阿里巴巴基础设施的体量和复杂性,显然都超过了人脑的处理能力,需要从新的视角,应用机器智能来解决这些复杂的问题。
智能运维实践
基于上面的挑战,我们在阿里巴巴集团各个业务场景落地了无人值守发布、无人介入运维的解决方案。
无人值守发布 (Unmanned Deploy)
全新一代发布平台支持滚动、蓝绿、金丝雀等多种发布模式。通过算法,机器学习方法对应用发布过程进行异常检测,从而避免由于代码变更导致的故障。基于大量监控数据、日志数据的积累,并有算法的加持,我们推出了无人值守发布系统。
无人值守发布 riskfree 系统上线以来,从探索到实现再到优化经历了将近三年的时间。目前业务范围定义在应用发布时故障预防。接入无人值守发布的应用在提交发布单后,系统会对整个发布过程中的监控数据进行分析,如果有异常会自动暂停发布,并提示异常指标和拦截原因,开发确认有问题则可以选择关闭或回滚,没有问题则继续发布。
线上发布之痛
以往线上发布的时候,工程师们一般做了如下“精心”工作:
发布前
测试人员对代码进行全方位的单元测试、集成测试,如果发现 Bug,会让开发人员返工。这里有两个问题:第一,有些业务团队由于人员问题,根本就没有测试人员,自己既是开发也是测试;第二,不是所有的 Bug 都能通过测试发现,难免有漏网之鱼。
发布中
进行预发、灰度、分批发布、金丝雀发布。在每一个环境缓慢发布过程中,要到监控平台,查看各个监控,甚至登录到机器上“刷”日志,通过自己的“火眼金睛”,期望能在众多的日志中,找到某个特殊模式的异常日志;另外,如果是多方依赖的应用,还要查看上下游的应用监控有没有问题。
发布后
检查一下应用的机器是否都正常启动,将失败的机器下线或者置换掉,看看故障系统有没有报警,看看上下游团队有没有“叫”起来,如果有,得马上回滚。总之,这个过程是既耗时又耗力,而且还不能保证没有漏掉一处细节,并且不同发布人员的经验不一样,熟手和新手对一个发布的稳定性保障程度有巨大差别。
我们的解法
我们设计了一套无人值守发布系统
系统分为两大部分:
在线分析,无人值守发布系统会对系统监控、业务监控、日志监控、调用链路等维度进行异常检测,检测到异常后,会对发布单进行拦截或回滚。当用户认为无异常时,会进行反馈,继续发布。
离线分析,在第一步中用户反馈后,这个反馈数据对我们的算法非常有用,可以对我们的算法进行自动的调整。当反馈数据积累一段时间之后,异常检测的准确率就非常高。
算法平台
在发布的过程中,系统会采集各个监控源的数据,对数据的采集、清洗、存储要求很高,我们设计了算法平台来承接各个平台的数据源、算法检测、算法验证、算法上线等流程,系统架构如下图所示。
主要包含三大部分:
数据采集存储:对各个监控数据源的数据进行采集,包含系统监控、业务监控、中间件监控、日志监控、数据库监控、云监控等。数据采集后,根据不同数据的特性,存在时序数据库或者关系数据库中。
算法结果存储:对于每次检测的结果都会进行存储,以方便结果排查和效果评估。
数据打标:对每次异常检测结果,都可以打标,利用打标数据来重新训练算法,形成正向循环,检测的结果也可以通过邮件、钉钉实时通知给发布者,且可以自动对接前面介绍的运维编排自愈流程,比如,将异常的机器直接自动置换掉。
智能算法
在上面的算法平台中,我们设计了众多异常检测算法。异常检测在无人值守发布系统中有着举足轻重的地位,主要分为三个部分:
数据采集:我们综合了各个维度的监控数据、调用链路分析等,在观测的广度上是人工盯屏所不能相比的。
异常检测:我们精心调校的异常检测算法,完全不依赖于传统的基于阈值、3Sigma 等检测算法,全部自动判定,泛化能力好,支持单指标检测、多指标检测、前后对比检测、已发布未发布对比检测等多种模式,检测算法包含 ArimaKSigma、BoxplotDetect 方法(Tukey 方法)、GrubbsTest 方法、Donat 等。
排除正常波动:通过历史数据、用户反馈数据,精准过滤正常的波动,让用户得到精准的异常检测结果,示意图如下:
实践效果
无人值守发布自上线以来,覆盖了阿里巴巴集团所有的应用发布过程,为发布的安全稳定保驾护航,异常检测结果如下图所示:
至此,接入无人值守发布后,开发可以在点击发布后专注别的事情,不需要时时关注发布过程。如果发布过程出现异常,系统会通过钉钉消息、邮件通知到开发,再介入即可,如果过程是机器异常则自动替换异常机器,开发无需人工介入,发布将继续。
简单总结一下,无人值守发布是一个智能化变更故障检测和异常推荐系统。通过对变更执行过程中的多维度监控数据进行分析,判断当前变更是否会造成故障,在发布出现异常的情况下进行拦截和智能推荐。
无人介入运维-ChatOps (Unmanned Operations)
日常运维有很多类别,目前我们专注于其中两类运维工作的“无人介入”:1. 用户接到告警或事件而发起的运维操作;2. 日常运维答疑或咨询。
针对第一种情况,通过“运维诊断”,给应用来一次 360 度全方位“体检”,找到异常点并一键修复;针对第二种情况我们发布了 ChatOps 机器人来加强 DevOps 之间沟通与合作,帮助研发完成一些“脏活”、“累活”、“机械式”任务,目标是达到“0”人工介入的咨询和答疑。
ChatOps 简介
运维小蜜(简称“维蜜”),是 chatbot 在运维领域的实践,也是 ChatOps 的具体实现,是 DevOps 的重要工具。维蜜的定位是面向应用的智能 DevOps 服务助理,那么摊开来讲:
面向应用:将应用的开发、测试、运维的同学集合起来,加强沟通与合作,缩短产品上线时间,降低人力成本,在产品出现问题时能够快速检测并修复,减少甚至消灭产品服务中断可能性,保证开发和运维的同学时刻处于同一个上下文中,时刻了解应用所处的状态。
DevOps:强调快速迭代,持续交付,力求信息共享、技术学习与合作、加快信息反馈周期。
智能:理解用户输入的指令,根据命令槽位的元信息和用户自身的信息确定命令各个参数的值,通过自然语言处理和理解用户指令。
维蜜就是希望通过一触即达,秒级响应的体验,把服务做到极致,让研发、测试、运维同学幸福地工作,是我们的终极目标。
ChatOps 优势
我们再来看运维小蜜有哪些价值:
第一,从员工个人的角度来看,能够提升员工的工作效率。运维小蜜可以帮助用户处理简单、重复、枯燥的工作,例如日志查看、命令执行、开关报警、查看机器状态、查看监控、运维事件推送等。
第二,从团队沟通的角度来看,能够降低协作成本。在团队内部,ChatOps 是一种透明、合作、会话驱动的开发模式,群里所有人都知道 what/when happening & who/how fixing it ,也就实现了事件发生场景完整、透明,事件解决过程共享、可查询、可记录,便于其他同学对同类事件处理的学习参考,即所谓“Teachby doing”。
ChatOps 也是一种会话驱动的运维模式,通过聊天机器人对接各种系统后台,将软件开发、交付过程中涉及的开发、测试、运维人员、工具、环境、自动化进程等串联起来,使得聊天室里的所有人能够围绕某个特定话题进行信息共享、技术学习与合作,加快应用的测试、发布、监控、诊断,整个工作的展开全员可见。
运维机器人带来的好处包括:
方便,把很多系统的常用操作聚合到机器,就不用登陆多个系统找信息。
协作,事件发生的全部信息推送至聊天室,所有成员均能够了解你这儿发生了什么。
快速,定位问题时,能够让大家都看到所有的信息,不必让每个人重复的搜索资料。
ChatOps 实现
我们再来看运维小蜜的实现架构图:
主要包含三个模块, 分别是 dialogue manager 、nlp tools 和 intent dispatcher manager 。其中 dialogue manager 用于判断用户的 utterance 的意图是什么, 是发起一轮新的对话还是承接上面已有的意图, 它调用 nlp tools 的处理器辅助判断。intent dispatcher manager 负责对接具体的业务系统, dialogue manager 处理后的结果传到它调用具体的业务逻辑触发任务的执行。
ChatOps 实践
我们再来看运维小蜜在阿里巴巴集团的几个落地场景:1、 智能问答
2、 查询应用的监控信息
3、 机器置换
总之,ChatOps 可以帮助我们提升开发效率,提升开发幸福感。
总结
随着智能化算法的成熟和大量运维数据的积累,智能化在运维场景的落地也会越来越多,阿里巴巴运维从阿里集团大量研发场景出发,打磨出一系列智能化运维产品,并赋能中小企业。我们的理念是把复杂留给自己,把简单留给用户。智能化是运维的终极状态,未来我们将在自动化、无人化和智能化上做更大的投入,打造世界级的智能运维平台。
【关于云效】
云效,云原生时代一站式BizDevOps平台。支持公共云、专有云和混合云多种部署形态,通过云原生新技术和研发新模式,助力创新创业和数字化转型企业快速实现研发敏捷和组织敏捷,打造“双敏”组织,实现 10 倍效能提升。
版权声明: 本文为 InfoQ 作者【阿里云云效】的原创文章。
原文链接:【http://xie.infoq.cn/article/e9b45e413c715123bfd521532】。文章转载请联系作者。
评论