如何用AI技术降噪? QCon 广州“音视频架构实践”专场给你答案! 了解详情
写点什么

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

  • 2019 年 12 月 04 日
  • 本文字数:2568 字

    阅读完需:约 8 分钟

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

本文由 dbaplus 社群授权转载。


大家好!很荣幸有这样的机会和大家交流,今天分享的主题为《饿了么监控体系的演进》。


我差不多是 2015 年中加入饿了么,主要是负责饿了么整个监控平台的搭建,从 0 开始搭建这套监控系统。


今天主要从以下四块给大家讲一下,整个过程我们遇到了哪些问题,怎么来解决这些问题,以及用怎么样的设计来支撑起这个系统。


一、背景

其实整个饿了么监控系统在演进过程中主要分为如下 3 个阶段:



  • 第一阶段:主要由 Statsd/Graphite/Grafana 负责业务层的监控,ETrace 负责全链路监控,Zabbix 负责服务器层面的监控,ELog 负责分布式日志搜索;

  • 第二阶段:整个饿了么也从单 IDC 演进成异地多活架构,所以对监控也提出了更高的要求,基于这个我们也自研 LinDB,以支持多活架构下的监控,Zabbix 慢慢被 ESM/InfluxDB/Grafana 所替换,使用 ELK 替换原来的日志方案;

  • 第三阶段:主要做一个减法,即把原来 StatsD/Graphite/ETrace/ESM/InfluxDB 统一到了 EMonitor+LinDB 这样的平台,以提供给用户一套统一的监控平台,日志开始使用阿里云的 SLS;


二、遇到的问题

在这过程中我们主要遇到了哪些问题,然后我们怎么去解决这些问题。



之前也介绍了原来有多套监控系统,当出现问题的时候,需要从多套监控系统里面回来切换,其实这种上下文的切换是很影响定位问题的时间,一旦故障时间很长的话就意味着故障的影响范围也会变大。


那我们怎么来解决这个问题呢?


我们希望有这么样一套系统能针对于任何人员快速上手。围绕着快速发现问题和快速定位问题这两个点,来构建这套系统。



其实监控也可以像业务架构一下进行分层,如上图,可以分为,业务监控,应用监控,PaaS 层监控及 IaaS 层监控。


不同用户在每一层的视角是不一样的,但是如何把各层的数据串联起来是一个关键点。


再结合 Logging/Tracing/Metric 三者的关系,我们是通过 Tracing 把上面各层的关系给串联起来。



最终,我们提供了一套一站式的监控平台,同时支持 PC 和 Mobile 2 个平台。



三、场景化


首先,我们来看一下业务监控,很多公司的业务监控都是用 Grafana 来做可视化,饿了么原来也一直用 Grafana,现在已经全部使用 EMonitor。


相比 Grafana,EMonitor 会更多的与别的监控集成,如一个业务监控有问题,点击一下有问题的曲线就可以到相关的应用监控,也可以比较方便的也报警配置集成。同时所有的 Dashboard 都与具体的业务线有关。


同时系统也是自动的集成发布及报警事件,如果与相关曲线有关的应用有报警或者变更,就会直接在图上画上红线(报警)和绿线(变更),这些使用都不需要额外的操作,都是系统自动完成的。


40%~50%的事故都是与变更有关系,这样当有变更导致的问题可以直接在监控上看到,马上回滚解决问题。



说完业务监控,我们再来看一下应用层监控,这块主要依托于全链路监控,主要用于问题的定位。


大家可以看到,这块基本上覆盖了整个应用所有内部及依赖的监控,而且这些基本上都使用方是透明的,使用方只需要使用我们部门提供的基础服务就可以了,会在这些基础的 SDK 进行监控埋点。


同时,有时直接放一个当前的监控数据,很难反应问题,因为不知道相比之前是变好了,还是变差了,所以我们会对所有的监控曲线都做同比和环比,这样就可以直观的反应问题。


接下来我以几个日常排障中使用比较多的功能介绍一下。



首先来看一下,错误异常。


基本上当出问题的时候,大家都会上来看一下有没有报异常什么的,针对于异常我们也增加了当某个异常出现的时候,到底影响了哪些接口的请求,以方便业务方做判断。



再来看一下 SOA 相关的监控,SOA 会反应当一个服务有问题的时候,是自身有问题还是依赖的服务有问题,可以看到一个服务的 RT,成功率,及哪些调用方等。


那么当应用所依赖的基础设施有问题的时候,怎么办呢?


其实这部分可以分两部分来看,一部分是 Client 是不是有问题,还有一部分是 Server 端有没有问题,因为有了 Client 的访问数据,所以就可以很方便的知道这个应用使用了哪些基础设施,这些基础设施有没有问题。



这里主要讲一下数据库,因为日常来说业务开发跟数据库打交道是非常多的,所以我们在 DAL 这层做了很多监控,基本上做到了针对每条 SQL 都做了监控,可以看到每条 SQL 的 RT,成功率等。主库怎么样、从库怎么样。


针对 IaaS 层的监控,我们自研了一套监控系统,来采集服务器 CPU/Memory/Network 等数据,同时也支持使用方根据自己的需求来写自己的 Plugin 来采集数据,如怎么来监控 Redis/MySQL 等。



说了这么多,基本上都是监控图表,那么怎么来查看日志呢?


其实这个是整个系统的另外一个亮点,应该所有的这些图表都是可以支持下钻的,如发现有问题,只要鼠标点击一下就可以看到对应的日志。





四、系统设计


  • 系统从原来的 Pipeline 慢慢演进成类似 Lambda 架构;

  • 支持多 IDC,每个 IDC 都会部署红色框里面的组件;

  • 全量日志,通过指标+采样的方式;

  • 支持 Java/Golang/Python/PHP/C++/Node.js;

  • 所有监控数据计算窗口为 10S;

  • 自研+开源组件构建了整套系统。


针对于数据的处理计算,我们自研了一套计算平台 Shaka 也支持所有监控数据的清洗及计算。




  • 基于 CEP(Esper) 实现类 SQL 的计算;

  • 非结构化的数据转换成结构化数据;

  • UDF 处理异常数据分析及采样。


最后介绍一下,支撑起所有监控数据存储的自研时序数据库 - LinDB。



  • 采用 Metric + Tags + Fields 方式;

  • 基于 Series Sharding,支持水平扩展;

  • 自动的 Rollup,s->m->h->d;

  • 高可靠性,支持多副本,支持跨机房;

  • 自监控,数据治理;

  • 列式存储,具有时序特性的 LSM 存储结构;

  • 倒排索引。


目前的数据量如下:


  • 36 台服务器,分不同集群;

  • 每天增量写入 140T;

  • 高峰 TPS: 750W DPS/s;

  • 10S 存 30 天,历史可查 2 年以上;

  • 磁盘占用 50T (压缩率在 60 倍左右);

  • 查询 P99:500ms ~ 1s。


这块我们目前也在做开源版本,如果对这块有兴趣可以关注我们:



今天的分享就到这里,最后为一直在监控领域奋战的同学打一下气,做监控真的很有意思,接触的面也很多,面对大数据量冲击的同时,还需要考虑产品层的沉淀。


作者介绍


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


原文链接


https://mp.weixin.qq.com/s/BSUkygEgCT8OJy62UXsefg


2019 年 12 月 04 日 08:003585

评论

发布
暂无评论
发现更多内容

Android老司机教你如何快速突击大厂面试,快恶补这些知识点,成功必看

android 程序员 移动开发

Android菜鸟进字节跳动,居然是看了这个,干货分享

android 程序员 移动开发

Android程序员经常遇到的算法问题,七大常用的算法,小白看完都会了

android 程序员 移动开发

Android老油条都知道的7个Gradle实用奇技淫巧,Android开发面试解答之Handler

android 程序员 移动开发

Android自动化页面测速在美团的实践,android蓝牙开发框架

android 程序员 移动开发

Android猿面试(附视频),flutter下拉选择

android 程序员 移动开发

Android菜鸡手撕523页PDF高级面试题,成功“挤掉,android编程基础班

android 程序员 移动开发

Android系统联系人全特效实现(下),字母表快速滚动,android开发网上购物app

android 程序员 移动开发

Android知识图谱:我们到底需要学习哪些Android知识?,android开发平台的框架原理

android 程序员 移动开发

Android研发大厂面试记:阿里,字节,安卓内存监控悬浮窗

android 程序员 移动开发

Android跨进程通信导论,极致干货

android 程序员 移动开发

Android进阶——解密笔记,flutter人脸识别模块

android 程序员 移动开发

Android生命周期组件Lifecycle使用详解,android音视频开发方向

android 程序员 移动开发

Android程序媛:文科转码,记录我在字节跳动这一年,android5.0升级包下载

android 程序员 移动开发

Android自定义控件进阶篇,自定义LayoutManager,深入剖析

android 程序员 移动开发

Android程序员;裸辞2个月找不到工作,我该怎么办,看完直接怼产品经理

android 程序员 移动开发

Android组件化——SXRecyclerView,android实现选择题模式

android 程序员 移动开发

Android自定义View之游戏摇杆键盘实现(一),二本学渣考研失败

android 程序员 移动开发

Android组件内核之组件间通信方案(四)上篇,文末有彩蛋

android 程序员 移动开发

Android程序员:“作为字节跳动面试官,androidapp开发工具

android 程序员 移动开发

Android程序性能优化——ANR,android热更新流程

android 程序员 移动开发

Android系统-包管理机制(一)PMS服务启动,腾讯大牛教你自己写Android第三方库

android 程序员 移动开发

Android组件化:stitch框架,音视频开发书籍

android 程序员 移动开发

【Flutter 专题】18 易忽略的【小而巧】的技术点汇总 (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

Android自定义View:MeasureSpec的真正意义与View大小控制

android 程序员 移动开发

Android自定义轮播效果,flutter开发环境

android 程序员 移动开发

Android程序员面试字节跳动,准备好这些算法面试题准过!

android 程序员 移动开发

Android要凉?字节跳动7年Android老鸟,写给1-5年程序员的几点建议

android 程序员 移动开发

Android进阶——解密笔记(1),分享一些行业经验

android 程序员 移动开发

Android进阶难题:普通公司的程序员跟BAT大公司的技术差距在哪?该如何选择

android 程序员 移动开发

Android自定义轮播效果(1),kotlin编译器安卓版

android 程序员 移动开发

「云智公开课」百度沧海·存储

「云智公开课」百度沧海·存储

饿了么监控体系:从架构的减法中演进而来_架构_dbaplus社群_InfoQ精选文章