002_阿里监控平台的“打怪升级”之路

阿里巴巴监控平台经过了这么多年的发展,与时俱进从最开始的简单自动化到现在的人工智能的系统运维。在这个人叫做容器下的 AIOps论坛上面,阿里巴巴集团监控负责人进行了精彩的演讲,主题是自动化到智能化的阿里监控发展之路。这次演讲主要分三部分分别是打怪升级、修炼内功、仰望星空。

打怪升级

和大多数的公司一样,阿里巴巴最初也采用的是 Nagios+Cacti 的开源模式。

这个组合的最大问题是:不能规模化,一旦数据量达到规模级别之后,就会出现各式各样的问题。

另外,由于我们对该开源的组合未做深入研究,因此无法对它们进行定制与修改。到了 2009 年,我们决定废弃该组合,准备自己做一套监控系统。

如上图所示,这个系统支撑了阿里巴巴后续的五年发展,有一部分到现在还在用。

由于引入了域的概念,即:Monitor Domain。该监控系统的亮点是解决了数据量的问题,并能够支持水平扩展。在数据库方面,由于当时尚无 HBase 和 NoSQL 等解决方案,因此我们采用的是 MySQL。但是众所周知,MySQL 对于监控方面的支持并不好。

后来,在 HBase 成熟之后,我们就把整个数据库切换到了 HBase 之上。这对开发团队而言,带来了许多便利,同时整个系统的监控质量也提升了不少。

上图是阿里巴巴如今最新的一代、也是最重要的监控平台 Sunfire。在存储方面,我们之前用的是 HBase,现在则转为 HiTSDB(High-Performance Time Series Database,高性能时间序列数据库)。另外在数据采集方面,原来采用是在机器上安装 Agent 的方式,而现在的系统则主要采集的是日志,包括:业务方的日志、系统的日志、消息队列的日志等。

通过对接 SQL,我们将数据接入层抽象出来,同时保持上层的不变,此举的好处在于体现了“租户”的概念。

和许多采用推(Push)数据方式的监控系统不同,我们的这套架构是从上往下进行拉(Pull)数据的。

这一点,我们和普罗米修斯系统(Prometheus,它支持多维度的指标数据模型,服务端通过 HTTP 协议定时拉取数据的方式,灵活进行查询,从而实现监控目的)有着相似之处,不过我们在后台上会略强一些。

这套系统当前的规模反映在如下方面:

  • 内部租户数为 90 多个。这里的租户是指:天猫、淘宝、盒马、优酷、高德等应用系统。
  • 机器数为 4000 多台。这是去年双十一时的数量,其中后台并非纯粹是物理机,而是大多数为 4 核 8G 的虚拟机。
  • 应用数为 11000 多个。
  • 处理能力为每分钟大概 2 个 T 的数据量。当然,这同样也是去年双十一的数值。

修炼内功

下面我们来看看阿里巴巴现役监控系统的具体特征和能够解决的业务痛点:

Zero-Copy

因此我们通过优化,让各台受监控主机上的 Agent,不再调用任何业务资源、也不做任何处理,直接将原始数据汇聚并“拉”到中心节点。“用带宽换CPU”这就是我们在设计监控系统的 Agent 时的一个原则。

根据过往的监控经历,当业务方发现采集到的 CPU 抖动指标居然是监控系统所致的话,他们会宁可不要监控系统。而且,我们甚至都不会对日志进行压缩,因为压缩操作同样也会用到各个主机的 CPU。

Light-Akka

在框架方面,考虑到 Akka 先进的设计理念和不错的性能,我们曾使用它来进行构建。

但是后来发现由于它是用 Scala 语言编写的,消息不能“有且只有一次”进行传递,即无法保证 100% 可达。因此我们将自己最需要的部分抽取出来,用 Java 重新予以了实现。

Full-Asynchronous

由于数据量比较大,监控系统在运行的时候,任何一个节点一旦出现阻塞都是致命的。

我们通过将任务下发到 RegisterMapper,来“异步化”该架构的关键核心链路。

为了使得监控系统的全链路都实现“异步化”核心操作,我们可以使用网络传输中的 Unity和 Java 的异步 Http Client 等技术。大家只要稍作修改,便可达到全异步的效果。

LowPower-Agent

由于 Agent 的主要任务就是获取日志,因此我们通过不断地猜测日志的周期,根据上一次日志所记录的“游标”,以时序的方式记住它们,便可大幅减少 CPU 的消耗,从而实现低功耗的 Agent。

上图中 MQL 和 Self-Ops 也是两个重要的方面,我们来继续深入讨论:

由于各种服务的功能众多,需要监控的数据量巨大,而且数据种类与格式也都比较复杂,因此大家异曲同工地采用了各种 API 的调用方式。

对于阿里巴巴而言,我们在内部按照标准的 SQL 语法,做了一套监控数据的查询语言:Monitor Query Language–MQL。它可以统一不同种类的需求,进而实现对所有监控系统的查询。

从理论上说,无论请求有多复杂,MQL 都可以用一种 SQL 语言来表达。而且语法是由我们自行定义的,如上图中白色文字所示。

上图的下方是一个真实的例子,它查询的是从 1 小时前开始,时间窗口为 5 分钟间隔的 CPU 数据。

可见它实现起来非常简单,大家一目了然。熟悉 SQL 的人基本上不学都会写。

上图是 Self-Ops 的界面,由于它是我们内部自用的,因此略显有些粗糙。

对于每天 4000 台机器的运维工作量,虽然不同的业务系统都有各自不同的监控工具,但是我们觉得有必要将自己的监控做成一个可自运维的系统。

因此,我们从机器的管理角度出发,自行建立了内部的 CMDB,其中包括软件版本控制、发布打包等功能。

籍此,我们不再依赖于各种中间件等组件,同时也奠定了监控系统的整体稳定性。另外,该系统也给我们带来了一些额外的好处。

例如:阿里巴巴可以通过它很容易地“走出去”,接管那些海外收购公司(如 Lazada)的系统。

众所周知,监控系统一般是在业务系统之后才建立起来的,不同的业务有着不同种类的日志,而日志中的相同特征也会有不尽相同的格式表示。

因此,我们在 Agent 上下了不少的功夫,让自己的系统能够兼容各种可能性。例如:对于一个日期的表达,不同的系统就有着非常多的可能性。

所以我们在此兼容了七种常用和不常用的日期格式。同时,我们也能兼容不同的日志目录的写法。

可见,大家在准备 Agent 时,不要老想着让业务方来适应自己,而是要通过适应业务,来体现整套监控系统的核心价值。

如前所述,我们实现了自己的 MQL,而后端却仍使用的是 HBase。虽然 HBase 非常稳定,但是在面对进一步开发时,就有些“乏力”了。它对于二级缓存的支持十分费劲,更别提各种维度的聚合了。

因此,为了让 MQL 发挥作用,我们就需要切换到阿里巴巴内部基于 OpenTSDB 规范所实现的一种 TSDB 数据库 HiTSDB 之上。

为了适应大规模的监控,我们如今正在努力不断地去优化 HiTSDB,并预计能在今年的双十一之前完成。

上面就是一个整体的框架图,我们的监控平台位于其中上部。当然在阿里巴巴的内部实际上有着多套不同的监控系统,它们在自己的垂直领域都有其独特的价值。

鉴于我们的这套系统体量最大,因此我们希望将监控平台下面的各种技术组件都统一起来。

如图中红色的“计算框架”部分所示,它在整个结构中的占比非常大,因此我们将容灾、性能监控、以及异步化等全都做到了里面。

阿里巴巴如今已经出现了某个单应用涉及到超过一万台虚拟机的情况,那么我们负责收集日志事件的几千台监控机,在收集到该应用的指标之后,又将如何进行 Map,以及直接存入 HBase 中呢?

如今有了 HiTSDB 的解决方案,我们就只要做一次 Map,将日志数据转换成为 Key/Value,然后直接扔进 HiTSDB 之中便可,因此也就不再需要 Reduce 层了。总结起来叫做:“把前面做轻,把后面做重”。这也是我们在架构上的一项巨变。

就现在的交易模式而言,每一条交易都会产生一行日志。我们在一分钟之内会采集到海量的日志信息。为了将它们最终转变成交易数字,大家通常做法是像 Hadoop 的“两步走”那样在 Map 层把数字抽取出来,然后在 Reduce 层进行聚合。

上图是普罗米修斯的架构图,它与我们的 Sunfire 大同小异,操作理念都是“拉”的方式。过去那种原封不动地拉取日志的模式,既消耗带宽资源,又耗费中心计算的成本。如今根据普罗米修斯的概念则是:统计值,即它只统计单位时间的交易量,因此数据在总量上减少了许多。

对于报警与通知层面,我们通过“切出”的尝试,实现了如下两方面的效果:

  • 粗剪掉报警和通知里的误报。
  • 抑制报警和通知的爆发,避免出现报警风暴。

仰望星空

我们希望通过全方位、全链路的图表将各个系统关联起来。我认为业务的链路并非自动化产生的。

如上图所反映的就是应用与机器之间的关系。但是由于该图过于复杂、细节化、且没有分层,因此大多数的应用开发人员都不喜欢使用这张图。

于是,我们请来业务方人员进行人工绘制,详略得反映出了他们的关注点。根据他们给出的手绘图,我们再去做了上面的 Demo 图。在今年的 618 大促时,我们就是跟据此图实施的各种系统监控。

虽然我们从事监控工作的,多数出身于原来在运维中做开发、写脚本的人员,但是大家不要局限于仅解决眼前的各种运维问题,而应当多关心一些业务的方面。

去年阿里巴巴拆掉了整个运维团队,并将运维融入了开发之中。通过 DevOps,我们将各个平台层面、工具层面、自动化、智能等方面都追加了上来。

而在纵向上则包括:网络质量、应用、线路指标、APM、网络本身、IDC、以及数据。而这张图就能起到很好的“串联”作用。

说到 AI,我认为我们还处在“弱智能”的阶段,而且是不能直接一步迈到强 AI 状态的。

有一种说法是:“如今弱智能其实比强智能的需求更多”,可见我们需要有一个过渡的阶段。

如果我们将前一页图中的那些小方块的下方点击开来的话,就会看到出现这张图(当然真实场景会比该图更为复杂)。该图反映了业务指标和系统指标,而右侧是做出的智能分析。

在前面“全方位全链路”的图中,曾出现了一张红色的定单。在传统模式下,开发人员会在自己的脑子中产生一个排障的流程:从某个指标入手进行检查,如果它显示为正常的话,则迅速切换到下一个指标,以此类推下去。

那么,我们的系统就应该能够帮助开发人员,将其脑子里针对某个问题的所有可能性,即上图中各个相关的指标或框图,按照我们既定的算法扫描一遍,以检索出故障点。

此举虽然简单,甚至称不上智能,但着实有效。这也就是我所称之为的“弱智能”,而且今年我们将会大规模地上线该服务。

可见,此处体现出了“弱智能”比“强智能”更为重要的特点,这也是 AI 在监控领域落地的一个实例。

最后,我希望大家在日常脚踏实地从事开发与运维工作的同时,也能够抬头仰望星空。

在此,我给大家准备了一张图,它是从一幅巨大,巨细的总图中截取出来的。我曾用它向老板汇报 CMDB 的价值所在,且十分有效。

如图所示,你可以假设自己是一个企业的老板,试着从老板的角度思考对于企业来说,特别是对 IT 而言,如何拉高营收和降低成本。

在一般情况下,监控是不会在阿里云上产生直接价值的,这体现的就是营收的维度。而我们要度量的成本还会包括额外成本,即图中所显示的“EX成本”。因此,“仰望星空”的“观测点”可从图中的三个绿色的点出发,即 MTTR(平均故障恢复时间)、预防和度量。

原文地址:https://www.cnblogs.com/itcomputer/p/9597739.html

时间: 2024-10-11 18:27:55

002_阿里监控平台的“打怪升级”之路的相关文章

【五年】Java打怪升级之路

之前写过一篇帖子,就是关于工作经验分享的,最近很多人私信我,所以博客这边再分享一次 这几年来,我最大的感想就是一句话:多看.多写.多想.多问.多分享.多优化.多运动... 1.[多看] 读万卷书,行万里路.多看书,多看别人写的代码,多看别人的问题,多看相关技术书,多看文档,多看.....  很多东西都需要我们用双眼来看,当然,很多人肯定会说,哪有那么多时间来做这些事,我只能回答:挤时间. 不管你是刚出校门正在迷茫,也不管你是工作几年,成就不菲,[多看]绝对试用任何一个阶段的人.有些人遇到问题不知

Flask连接数据库打怪升级之旅

前言 在初学 Flask 的时候,在数据库连接这部分也跟每个初学者一样.但是随着工作中项目接手的多了,代码写的多了,历练的多了也就有了自己的经验和技巧.在对这块儿代码不断的进行升级改造后,整理了自己在连接数据库这部分的的一个学习经验,也就是我们今天分享的连接数据库部分的打怪升级之旅.希望可以为大家在学习 Python 的路上提供一些参考. 初级阶段 首先安装 Mysql 扩展包 建立数据库链接 开启打怪升级之路 在日常开发中,连接数据库最多的应用场景就是,查询所有数据和查询单条数据.就以查询所有

阿里云平台A监控系统故障总结

阿里云平台监控系统显示pending 状态故障总结 各位网友,各位同行,大家好! 今天遇到了一个问题监控平台服务器显示pending的状态,显示蓝色,把自己解决问题的心得体 会,解决问题的小的思路和解决办法分享一下,如下所示描述: 问题描述1:A监控系统SLB负载均衡产品服务器显示pending蓝色的状态:(备注:正常的状态是 绿色位正常的状态: 解决思路和办法1:登陆负载均衡产品SLB服务器,查看配置文件目录cd /usr/alisys/dragoon/conf 查看是否有staragent.

一周集成行业智能监控应用,阿里云发布智能视频监控平台

在4月22-25日于上海举办的2019联通合作伙伴大会上,阿里云首次对外发布了智能视频监控平台,同时向参会的数千名伙伴及业界人士演示了一分钟视频监控上云系统,阐述了阿里云智能视频监控平台助力传统监控领域上云的优势和方法. 在视频监控领域,上云和AI是未来的趋势,阿里云智能视频监控解决方案无缝集成了视频监控产品和智能视觉产品.该平台依托遍布全球的边缘接入节点和出色的视频技术,面向监控设备提供统一开放的视频流接入.处理和分发服务.将传统的本地监控视频内容接入云端,进行存储.录制回看.全网分发,同时通

【转载】运维职业向!我是怎么入得运维行业?运维工程师入门必备技能以及打怪升级篇

前言:转载 陈浩一个从事安全运维向的前辈文章.写的很好.人非常nice,遇到了问题,qq上很快就回复了我. 大道三千 入门最难,凡事入了行,也就什么都好说了,好的自然不断努力奋斗修行,不好的自然很快就被淘汰.恭谨勤勉,时不我待~ ---------------------------------------------------------------------------------------------------------------------------------------

详解Linux运维工程师打怪升级篇

详解 Linux 运维工程师打怪升级篇 积累经验篇 做运维也快4年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师 是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化.如:今年大数据,人工智能比较火...(相对表示就是 python 比较火) 前面也讲了运维基础篇,发现对很多人收益挺大,接下来也写下关于这4年多的运维实践经验,从事了2年多游戏运维,1年多安全运维,1年大数据运维,相关行业信息不能

基于Spring4+SpringMVC4+Mybatis3+Hibernate4+Junit4框架构建高性能企业级的部标GPS监控平台

开发企业级的部标GPS监控平台,投入的开发力量很大,开发周期也很长,选择主流的开发语言以及成熟的开源技术框架来构建基础平台,是最恰当不过的事情,在设计之初就避免掉了技术选型的风险,避免以后在开发过程中,不断的填坑走弯路,以至于整个团队被坑埋掉.做GPS平台这么多年,以前就了解到一些开发团队过于关注某一种语言的优势,比如过于选用GO,Erlang,python,php等技术,最后团队熟悉这些技术的关键人员离职了,都没人接手,不能不说是个悲剧.所以说平台的技术架构选型要注重的是稳健,均衡而不是偏激,

edwin报警和监控平台近期的更新(python源码)

edwin从发布以来, 得到了不少关注, 获得了不少star. 最近又做了一些很有意义的改进, 同时完善了部分文档. 项目地址: https://github.com/harryliu/edwin , 欢迎fork或PR, 如果喜欢, 请打star. 再次介绍一下edwin项目 edwin是一个报警和监控平台, 可以使用它监控任意东西, 如有异常(分为警告级和严重级), 可以发出报警. 可以自定义报警的通知方式, 比如邮件/短信/电话. 另外, 它提供一个web UI, 能以dashboard形

转:鏖战双十一-阿里直播平台面临的技术挑战(webSocket, 敏感词过滤等很不错)

转自:http://www.infoq.com/cn/articles/alibaba-broadcast-platform-technology-challenges 鏖战双十一-阿里直播平台面临的技术挑战 作者 陈康贤 发布于 2016年1月28日 | 2 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件分享 稍后阅读 我的阅读清单 前言:一直以来双十一都是以交易为重心,今年当然也是如此,但是这并不妨碍万能的淘宝将双十一打造的让用户更欢乐.体验更丰富.玩法更多样.内容更有趣