写点什么

饿了么监控平台的架构设计与演进历程

2019 年 10 月 30 日

饿了么监控平台的架构设计与演进历程

运维行业流传着一句话:“无监控,不运维”,监控的重要程度可见一斑。


随着互联网行业的不断发展,各种监控工具多得不可胜数,如何利用这些工具构建一个完整好用的监控平台呢?在近期召开的QCon上海2019大会现场,InfoQ 记者采访了饿了么框架工具部、监控平台负责人黄杰,他和我们分享了随着业务和系统越来越复杂,饿了么的监控平台是如何不断演进的。


饿了么的监控痛点与架构设计


与其它行业相比,外卖行业最显著的特点就是它的高峰和低谷是非常明显的,一般集中在中午的 10 点到 12 点和晚上的 5 点到 8 点,这样的瞬时高峰对于整个系统的压力会非常大,监控系统也不例外。


据黄杰介绍整个饿了么的业务发展是超高速的:“我加入饿了么的第一年,当时每天采集的原始数据差不多是 10 个 T,第二年就增长到了 80 个 T,第三年变成了 200T,而现在每天采集的原始数据可以达到 800T。”


在技术层面,监控系统不仅要支撑这样快速发展的业务,同时还要兼顾稳定性。在稳定性方面,饿了么 CTO 雪峰对监控系统的要求是比饿了么整个系统可用性高一个 9,因为监控是整个系统的眼睛,如果眼睛出了问题,会影响很多判断。


而在用户层面,饿了么监控系统要解决两类人的问题,第一类是 GOC 的问题,当系统出来问题的时候,怎么快速发现并恢复问题;第二类是开发人员,需要做到的是快速定位问题。


目前饿了么的监控系统覆盖了所有应用及服务器,包括业务监控、全链路监控、PaaS、IaaS 等。如果分层来看的话,最上层是业务,理论上可以做到端到端,针对某些特定业务的监控,运维团队会与业务团队一起协作;第二层是应用,云数据中心和本地数据中心的应用都可以监控到;第三层是 PaaS,例如 MySQL、Redis;最底层是 IaaS,主要是关注应用跑在哪些机器上,容器、物理机还是虚拟机,服务器之间的机架、交换机,机房之间的专线等等。



整个监控平台每天的增量数据大约有 800TB,高峰计算事件 7000W/s,1W 多个报警规则。



最早,饿了么监控平台的架构类似于 Pipeline 的架构,消息采集之后放到队列里,然后去处理,处理之后再进行存储。这种架构的缺点是如果一个环节出现问题,那么整个平台都可能出现问题。除了稳定性,Pipeline 架构整体的开发效率也是一个问题,由于很多监控的逻辑需要去了解业务,再通过代码来实现,所以实现一个监控项的整个周期会比较长。


因此,饿了么团队把一些实时计算的逻辑抽象出来,放到自研的一个类 SQL 的实时计算平台上,把收集到的无结构化的日志转换成结构化的数据之后(例如把一条普通的日志转换成一条 SOA 调用的日志),再通过 SQL 的方式计算出 Metrics,整个架构也慢慢的从 Pipeline 变成类似于 Lambda 架构,然后计算出来的 Metric 再回溯到 Kafka 中,这些 Metric 又可以被别的系统使用,如流式报警等。


根据重要程度,饿了么团队又把集群分为关键和非关键集群,在非关键集群上做灰度上线,以保证整个升级过程对用户无感,如果有问题,可以在非关键集群上提早暴露。


另外,在 Collector 这层还做了数据的动态 Load Balance,即根据用户发送的数据类型提前 Sharding 到 Kafka 不同的 Partition 中,这样的好处是 Kafka 后面的 Consumer 只需要处理一小部分数据即可,理论上来说随着数据量的增加只需要水平增加机器就可以解决容量上的问题。


饿了么监控平台的演进历程


开始的时候,饿了么的监控是由不同团队负责的,直到 2017 年底,把原来 3 个团队负责的监控系统整合成一个团队来负责。“统一的好处还是很显示的”,黄杰表示:“之前几套监控系统还是比较割裂的,相互之间关联性比较低,用户需要在不同的监控系统中看不同维度的监控,有些新同学刚加入的时候,都不知道去哪里查看,而现在有故障出现,普通的开发人员就可以直接查看监控,定位到问题出现在哪里,相比之前,效率的提升还是很明显的。”


最早,饿了么一共维护了三套监控系统,去年把三套系统合并成了一套。为什么要这么做呢?黄杰表示主要原因是三套系统来回切换在定位问题时是很浪费时间的。但是合并之后,推行新系统也遇到了一些难题,一是团队内部的矛盾,因为之前三套系统采集的数据和后台处理都是类似的,如何来统一呢?二是推行时遇到的外部矛盾,大家已经习惯了通过 Grafana 来查看业务大屏,如何让用户切换到新的平台上是一个比较大的阻力,后来,饿了么团队启动了一个公司级项目来推进这个事情,花了半年左右的时间,把所有的监控都统一到了现在的平台上。


从技术角度来看,饿了么监控平台从单 IDC 到异地多活共经历了三个阶段。当开发和业务初具规模时,当时主要是使用 ETrace 来做全链路监控,使用 Statsd+Graphite+Grafana 做业务层监控,使用 Zabbix 来做运营团队的业务监控;第二阶段标志性的就是做了异地多活,引入 ELK 做日志检索,使用自研的 ESM 系统替换掉 Zabbix,同时引入了自研的时序数据库 LinDB;第三阶段就是集成,把三个系统整合成到 EMonitor 系统,日志系统使用了阿里云的 SLS 产品,所有的时序数据存储统一走 LinDB,目前 LinDB 也在做开源版本


在黄杰看来,整个监控平台在饿了么的发展和推行可以分为 3 个阶段:


  • 第一阶段主要是在卖产品,在接近一年的时间中,让内部的员工接受并使用该平台;

  • 第二阶段主要是查漏补缺,所有的监控不可能一蹴而就,肯定是有个过程的,所以这个阶段就是不断完善之前缺少的监控部分;

  • 第三阶段是建立信任,通过前两阶段,内部员工渐渐享受到了监控平台带来的好处,这时要做的就是提升监控准确率,加深他们对平台的信任感。


目前饿了么监控平台采取的是自研+开源的开发模式,其中自研占据了 70%,分阶段性只做 2-3 件很重要的事情,不断打基础的同时服务好用户。


饿了么监控平台的报警策略


报警策略是很多企业都会面临的挑战,报警太少,可能会遗漏重大的错误,而报警太多,则会浪费时间和经历。黄杰表示:“我们没有使用目前比较流行的机器学习或者人工智能,而是使用的比较传统的报警策略,针对不同的数据类型提供不同的报警策略给用户使用。”


饿了么的报警策略有以下三种:


  • 趋势型报警策略,主要的应用场景是业务大盘的(黄金指标)监控报警,因为外卖行业的数据特性还是非常强的,对于这类数据,饿了么团队会依据历史数据计算出一个基线数据,在计算基线数据的同时会去掉一些压测或者异常的数据,因为这些数据是噪音数据,再结合当前数据的趋势来预测将来的趋势应该是怎么样的,如果有偏离就会报警;

  • 缺失报警策略,上面也讲了整个报警是流式事件驱动性的,如果数据没有了,整个报警就会失效,所以针对这种场景增加了缺失,以应对流量突然掉底的场景;

  • 阈值报警策略,最基础的阈值报警,用户输入一个条件,高于或者低于就会报警。但建议用户把一些个数可以转换成比率,例如失败率>10%,比错误数>1000,更容易让人理解。


采访嘉宾介绍:


黄杰,饿了么框架工具部,监控平台负责人。2015 年加入饿了么,负责整个监控平台的构建及周边工具链的建设。整个监控也经历了饿了么异地多活地洗礼。之前曾在携程、eBao 等多家公司工作,在监控、消息系统及大数据等领域积累了丰富经验。


更多国内外一线技术大咖分享请持续关注 QCon 全球软件开发大会,访问官网与技术大咖面对面交流实践心得。


2019 年 10 月 30 日 09:482793
用户头像
田晓旭 InfoQ 编辑

发布了 422 篇内容, 共 195.6 次阅读, 收获喜欢 1269 次。

关注

评论

发布
暂无评论
  • 苏宁 OLAP 引擎发展之路

    演讲嘉宾现担任苏宁 OLAP 平台负责人,拥有 10 年以上相关领域经验,对多项大数据技术有着广泛使用经验和深刻的理解。目前负责苏宁 OLAP 引擎,Druid,ES 等大数据组件,主导并推进苏宁统一的基于 SQL 的 OLAP 引擎,Druid 服务化平台,ES 服务化平台的建设,极大的提升各项指标数据的开发时间,减少各项人力和硬件成本。内容介绍对于海量大数据进行即时的多维分析,没有任何银弹。为解决苏宁复杂业务场景下的通用指标分析查询场景,我们结合各项大数据技术建立苏宁 OLAP 引擎。支持单模型百亿条 TB 级别数据的实时汇总分析和明细查询,在建设过程中,也遇到了各种各样的挑战。如何将复杂业务场景抽象化,提供平台级能力支持,如何通过统一的 SQL 引擎来实现各种类型数据的统一查询;对于通用服务计算框架无法解决的问题,如何通过定制化实现来解决;对于通用查询引擎无法满足响应时间的场景,如何通过预计算方式来实现;如何通过 Cost 模型来对服务进行分级和隔离等等。本次深度揭秘苏宁建设 OLAP 引擎过程中如何运用各项技术解决问题的方案,以及过程中遇到的坑和优化方法。

    2019 年 7 月 24 日

  • 如何将运维的报警做成运营的报警

    做运维的同学都知道,运维一定离不开Zabbix、Nagios之类的监控软件。目前,类似的软件在监控和数据采集方面已经做到了极致,但是在报警处理上并没有很完美的解决方案,比方说,经常出现高质量报警湮没在海量报警之中等情况。本文不探讨监控系统的配置优化,只探讨监控系统按照它的逻辑发出报警之后我们该做点什么。

  • 【应用异常监控利器 Sentry 搭建与学习笔记】

    主要分享了针对服务或应用进行实时异常监控的开源平台Sentry的搭建与学习过程。

    2020 年 5 月 24 日

  • 饿了么监控体系:从架构的减法中演进而来

    本文介绍饿了么监控体系的演进。

  • dba+ 开源工具:面向开发的 MongoDB 图形可视化监控

    本文介绍MongoDB图形可视化监控dba+开源工具。

  • 好买中间件之监控:基于日志分析的端到端监控系统

    为什么要建这套监控平台,我们现状痛点是什么?

  • 为什么说 Prometheus 是足以取代 Zabbix 的监控神器?

    本文介绍Prometheus的优点。

  • MakeMyTrip 在监控大规模电子商务网站中的做法

    MakeMyTrip是一家在线提供旅游服务的企业。近期,MakeMyTrip团队在Medium上发表了一系列文章,介绍了企业实现大型电子商务网站监控的原理及架构设置。他们在实现对整个技术栈的监控中,主要使用了一种由开源工具构建的混合架构。

  • 饿了么监控体系的演进

    本次分享介绍饿了么如何从全链路监控开始,发展到业务监控/应用监控/PaaS/IaaS 各层打通,支撑起每年几倍数据量的增长,以及遇到的困难和解决方案。

  • 第 55 讲 | 用机器打造迭代机器:现代研发流程体系打造(二)

    构成自动化流程的大部分工具都是现成的、可以花合理价钱买到的,本文就将重点介绍研发流程里的各种工具们,以及不同场景下的具体选型。

    2018 年 7 月 18 日

  • 吉利汽车的监控平台建设之路

    吉利汽车监控平台是从2015年开始大范围去推广的,整个平台建设与其它公司类似,从底层到上层分别包括基础设施的监控、操作系统主机的监控、基于中间件的环境监控(例如在数据库层面的缓存、消息、中间件监控)、应用监控、面向用户和应用性能的监控。

  • AIOps 对报警架构的挑战

    监控报警是故障发现的重要一环,也是百度在 AIOps 方向的第一个切入方向,目前百度 AIOps 在监控报警方面已经孵化出两个应用场景:智能异常检测和智能报警合并。 如何支撑 AIOps 算法在监控告警系统的快速落地并产生业务价值,这对监控告警架构提出了很大的挑战!本次分享将重点介绍百度监控告警系统在落地 AIOps 过程中遇到的架构挑战以及相应的解决方案。讲师简介范月林 2014 年硕士毕业于北京邮电大学,随后加入 IBM,负责高性能计算中间件的研发工作。2017 年加入百度,负责 Noah 报警系统的研发设计工作,在报警事件管理、报警合并&渲染、故障Oncall等领域有丰富实战经验。

    2020 年 1 月 3 日

  • 微服务场景下监控的设计和实现 | InfoQ 公开课

    随着业务迅速扩张,越来越多后端团队采用微服务设计方案。系统基础设施提出更高要求。微服务场景下,后台服务数量迅速膨胀,各个服务技术选型多样化,涉及相关人员众多,对系统监控带来比较大挑战。

  • 弹性计算平台无服务器化实践

    演讲嘉宾 陈杰,腾讯架构平台部研发leader。 内容介绍 随着容器技术在微服务架构,研发/测试/运营流程优化及利用率提升等方向的落地及价值体现,容器化已成为一种趋势,逐步深入人心。但容器能持续满足业务发展的需求吗?未来基础设施架构最终会以什么样的形态呈现呢? 腾讯弹性计算平台收拢公司闲置资源统一调度,以容器方式再利用,实现算力共享,服务包括AI,音视频转码,图片压缩等多个场景。本文分享弹性计算建设过程中基于容器的无服务器化(Serverless)的一些思考,实践和经验。 演讲大纲 腾讯弹性计算平台简介; 容器化的一些困境与挑战; Serverless究竟是什么; Serverless对容器技术的新挑战; 容器平台如何走向Serverless; 腾讯Serverless的应用案例; Serverless建设过程中的经验教训。

    2018 年 9 月 12 日

  • 混沌工程:软件领域的反脆弱

    实际上,混沌工程采用了一种全新的思路,在系统中主动注入混沌进行实验,以此来发现潜在的真实世界的问题。

    2019 年 11 月 21 日

  • 大型系统如何做一体化监控?

    目前系统监控的手段比较多,大致可以分为三类:业务监控,应用监控和系统监控。

  • 架构如何做减法?

    本文转载自技术琐话公众号

  • 去哪儿网客户端无埋点监控与性能优化实践

    演讲嘉宾2014 年加入去哪儿网,主要负责客户端混合开发框架相关的工作,先后负责参与去哪儿网 Hybrid 框架、QRN 框架(基于 React Native)、热更新系统、客户端无埋点监控平台等的设计、开发、应用与实践工作,目前专注于 App 性能优化和无埋点监控方向的一体化解决方案。内容介绍在移动互联网的下半场,React Native、Hybrid 等跨平台框架在 Qunar 的应用也越来越广泛,框架方面的进化带来的成本节省已经没有以前那么明显,接下来,性能和体验成为了重点关注的点,希望能为用户提供更加流畅的服务体验。监控系统作为 App 性能等指标的仪表盘,变得也相对重要,但是我们也不希望开发者把大量的时间花在埋点上,所以如何提供一个方便准确的无埋点监控报警系统,并且在性能优化等方面有一定的作为,将会变得的很有价值。在 Qunar 我们已经有了完善的一套系统,希望给大家分享一些经验和心得。演讲提纲: 性能优化的必要性和遇到的痛点,需要一个方便的监控系统 Qunar 的无埋点监控系统介绍 实现过程中遇到的挑战和解决思路,包括 React Native 、 Hybrid 等方面 监控系统在性能优化方面的实践

    2019 年 7 月 24 日

  • 实时监控系统如何帮助 FreeWheel 支持超级赛事直播广告?

    深度了解FreeWheel实时监控平台

  • 文章:使用 Perf4J 进行性能分析和监控

    在本文中,Alex Devine阐述了Java开发人员如何利用开源工具Perf4J来添加计时代码、记录日志、分析和监控结果。他介绍了Perf4J的众多功能,例如与Log4J的集成、注解的使用、陷阱和最佳实践。<a href="http://www.infoq.com/cn/articles/perf4j" target="_blank">直接点击阅读完整文章</a>。

发现更多内容

Locust快速上手指南

行者AI

接口自动化测试的实现

行者AI

云原生应用开发框架Quarkus介绍

gaolk

云原生 Quarkus

Native 与 JS 的双向通信

Minar Kotonoha

如何从危机中提炼总结,做好2020年的复盘?

CECBC区块链专委会

复盘 经济

AOFEX交易所APP系统开发|AOFEX交易所软件开发

开發I852946OIIO

系统开发

双循环背景下的全球供应链机遇与挑战

CECBC区块链专委会

供应链物流

为什么要在以太坊上构建去中心化缓存层?到底要怎样做呢?

CECBC区块链专委会

以太坊

3面抖音犹如开挂,一周直接拿下offer,全靠这份啃了两个月「Java进阶手册」+[Java面试宝典]

云流

编程 程序员 计算机 java面试

规划算法

田维常

算法

观察者模式

soolaugust

设计模式 观察者模式 七日更

数字货币交易所系统开发,区块链交易所搭建

薇電13242772558

区块链 数字货币

我的 500 张技术配图是怎么画的?

小林coding

程序人生 画图软件

接口自动化传值处理

行者AI

jenkins实现接口自动化持续集成(python+pytest+ Allure+git)

行者AI

区块链商品溯源解决方案,区块链全程追溯系统

13530558032

排查指南 | mPaaS 小程序被卡在了三个蓝点

蚂蚁集团移动开发平台 mPaaS

小程序 问题排查 mPaaS

小程序市场的「App Store」来了!你准备好吃“螃蟹”了吗?

蚂蚁集团移动开发平台 mPaaS

小程序生态 mPaaS appstore

盘点 2020 |协作,是另外一种常态

Winfield

领域驱动设计 DDD 协作 远程协作 盘点2020

XDAG技术详解1

老五

浅谈数据仓库质量管理规范

数据社

数据仓库 数据质量管理 七日更

25道mybatis面试题,不要说你不会

田维常

mybatis

iOS面试基础知识 (五)

iOSer

ios 大厂面试 iOS面试 面试题总结 底层知识

json处理

Isuodut

浅谈 WebRTC 的 Audio 在进入 Encoder 之前的处理流程

阿里云视频云

WebRTC 音频技术 音视频算法 音频

5年Java高工经验,我是如何成功拿下滴滴D7Offer的?

Java架构追梦

Java 学习 架构 面试 滴滴

高光时刻!美团推出Spring源码进阶宝典:脑图+视频+文档

996小迁

spring 源码 架构 笔记

半个多月时间4面阿里,已经成功拿下offer,分享一下个人面经

Java成神之路

Java 程序员 架构 面试 编程语言

平安社区平台解决方案,智慧社区管理服务平台搭建

13530558032

便民服务多元化,智慧平安小区安防智能化建设

t13823115967

智慧城市

微警务平台搭建,智慧警务系统开发解决方案

t13823115967

智慧警务系统开发 微警务

饿了么监控平台的架构设计与演进历程-InfoQ