`
大涛学长
  • 浏览: 104994 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

饿了么监控系统 EMonitor 与美团点评 CAT 的对比

阅读更多
背景介绍
====

**饿了么监控系统EMonitor**:是一款服务于饿了么所有技术部门的一站式监控系统,覆盖了系统监控、容器监控、网络监控、中间件监控、业务监控、接入层监控以及前端监控的数据存储与查询。每日处理总数据量近PB,每日写入指标数据量百T,每日指标查询量几千万,配置图表个数上万,看板个数上千。

**CAT**:是基于Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务

本文通过对比分析下2者所做的事情为契机讨论监控系统或许该有的面貌,以及浅谈下监控系统发展的各个阶段

CAT做的事情(开源版)
============

首先要强调的是这里我们只能拿到[github上开源版CAT](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2Fdianping%2Fcat)的最新版3.0.0,所以是基于此进行对比

接下来说说CAT做了哪些事情?

### 1 抽象出监控模型

抽象出Transaction、Event、Heartbeat、Metric 4种监控模型。

*   Transaction:用来记录一段代码的执行时间和次数
*   Event:用来记录一件事发生的次数
*   Heartbeat:表示程序内定期产生的统计信息, 如CPU利用率
*   Metric:用于记录业务指标,可以记录次数和总和

针对Transaction和Event都固定了2个维度,type和name,并且针对type和name进行分钟级聚合成报表并展示曲线。 
![1](https://yqfile.alicdn.com/97d4e0c1af81745aa4a2e4a4f14a023b9ab94afc.png)

### 2 采样链路

针对上述Transaction、Event的type和name分别有对应的分钟级的采样链路 
![2](https://yqfile.alicdn.com/ea35d6409a2e2ccd777812becd68543ae1c4aca2.png)

### 3 自定义的Metric打点

目前支持Counter和Timer类型的打点,支持tag,单机内单个Metric的tag组合数限制1000。 
并且有简单的监控看板,如下图所示: 
![3](https://yqfile.alicdn.com/8f8886ff84e75b86c3e8cf12e1c913e381cd2ec9.png)

### 4 与其他组件集成

比如和Mybatis集成,在客户端开启相关的sql执行统计,并将该统计划分到Transaction统计看板中的type=SQL的一栏下 
![4](https://yqfile.alicdn.com/28314cbf1d8a467e072e621247c446e89f3d2b70.png)

### 5 告警

可以针对上述的Transaction、Event等做一些简单的阈值告警

饿了么EMonitor和CAT的对比
==================

饿了么EMonitor借鉴了CAT的相关思想,同时又进行了改进。

### 1 引入Transaction、Event的概念

针对Transaction和Event都固定了2个维度,type和name,不同地方在于聚合用户发过来的数据

CAT的架构图如下所示: 
![5](https://yqfile.alicdn.com/fde2c1ec3b22f901e81d229af4b342a00b440717.png)

CAT的消费机需要做如下2件事情:

*   对Transaction、Event等消息模型按照type和name进行当前小时的聚合,历史小时的聚合数据写入到mysql中
*   将链路数据写入到本地文件或者远程HDFS上

EMonitor的架构图如下所示: 
![6](https://yqfile.alicdn.com/b6f0b912a7f6dc661881f869f60cfe14f43ad75b.png)

EMonitor分2路对数据进行隔离处理:

*   Real-Time Streaming Compute:对用户发过来的链路中的Transaction、Event等监控模型转变成指标数据并进行10s的预聚合,同时也对用户发过来的Metric数据进行10s预聚合。最后将10s预聚合的数据写入到[LinDB时序数据库](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2Flindb%2Flindb)(已开源,有兴趣的可以关注star下)中,以及kafka中,让告警模块watchdog去消费kafka做实时告警
*   Real-Time Data Writer:对用户发过来的链路数据构建链路索引、向HDFS和HBase写入索引和链路数据,同时会构建应用之间的依赖关系,将依赖关系写入到Neo4j中

所以EMonitor和CAT的一个很大不同点就在于对指标的处理上,EMonitor交给专业的时序数据库来做,而CAT自己做聚合就显得功能非常受限,如下所示:

*   CAT只能整小时的查看type和name数据,不能跨小时,即不能查看任意2个时间之间的报表数据,EMonitor没有此限制
*   CAT没法查看所有type汇总后的响应时间和QPS,EMonitor可以灵活的自由组合type和name进行聚合
*   CAT的type和name报表是分钟级的,EMonitor是10s级别的
*   CAT的type和name没能和历史报表曲线直接对比,EMonitor可以对比历史报表曲线,更容易发现问题
*   CAT的type和name列表首页展示了一堆数字,无法立即获取一些直观信息,比如给出了响应时间TP99 100ms这个到底是好还是坏,EMonitor有当前曲线和历史曲线,相对来说可以直接判断到底ok不ok
*   CAT的TP99、TP999基于单机内某个小时内的报表是准确的,除此之外多机或者多个小时的聚合TP99、TP999是用加权平均来计算的,准确性有待提高

但是CAT也有自己的优势:

*   CAT含有TP999、TP9999线(但是准确性还有些问题),EMonitor只能细到TP99
*   CAT的type和name可以按照机器维度进行过滤,EMonitor没有做到这么细粒度

### 2 采样链路

目前CAT和EMonitor都可以通过type和name来过滤采样链路,不同点在于

*   CAT的采样链路是分钟级别的,EMonitor是10s级别的
*   针对某一个type和name,CAT目前无法轻松找想要的链路,EMonitor可以轻松的找到某个时刻或者说某段时间内响应时间想要的链路(目前已经申请专利)

EMonitor的链路如下所示: 
![7](https://yqfile.alicdn.com/31e5b0f0b7f551f5e006f9cd8d5a6a805737e33d.png)

*   这张图是某个10s时刻、某个type和name过滤条件下的采样链路
*   第一行是这10s内的采样链路,按照响应时间进行了排序
*   可以随意点击某个响应时间来查看对应的链路详情

### 3 自定义的Metric打点

EMonitor支持Counter、Timer、Histogram、Payload、Gauge等等多种形式的打点方式,并且支持tag

*   Counter:计数累加类型
*   Timer:可以记录一段代码的耗时,包含执行次数、耗时最大值、最小值、平均值
*   Histogram:包含Timer的所有东西,同时支持计算TP99线,以及其他任意TP线(从0到100)
*   Payload:可以记录一个数据包的大小,包含数据包个数、包的最大值、最小值、平均值
*   Gauge:测量值,一般用于衡量队列大小、连接数、CPU、内存等等

也就是任意Metric打点都可以流经EMonitor进行处理了并输送到LinDB时序数据库中。至此,EMonitor就可以将任何监控指标统一在一起了,比如机器监控都可以通过EMonitor来保存了,这为一站式监控系统奠定了基础

#### 自定义Metric看板

CAT只有一个简易的Metric看板 
EMonitor针对Metric开发了一套可以媲美Grafana的指标看板,相比Grafana的优势:

*   有一套类似SQL的非常简单的配置指标的方式
*   跟公司人员组织架构集成,更加优雅的权限控制,不同的部门可以建属于自己的看板
*   指标和看板的收藏,当源指标或看板改动后,无需收藏人员再改动
*   alpha、beta、prod不同环境之间的一键同步指标和看板,无需配置多次
*   PC端和移动端的同步查看指标和看板

类SQL的配置查询指标方式如下所示: 
![8](https://yqfile.alicdn.com/9f585a46cc2dccaec6b24b5f558783b55d245092.png)

*   可以配置图表的展现形式
*   可以配置要查询的字段以及字段之间的加减乘除等丰富的表达式
*   可以配置多个任意tag的过滤条件
*   可以配置group by以及order by

看板整体如下所示: 
![9](https://yqfile.alicdn.com/94006762b3d746128487d7c6fa2dd2d01e7ba6da.png)

移动端显示如下: 
![10](https://yqfile.alicdn.com/162a372e41aaa62d84af4a80ade2209d3d609a4e.png)

### 4 与其他组件集成

![11](https://yqfile.alicdn.com/d05f3a3cae1cd3822291f8fa9cce1e08fd182304.png)

目前EMonitor已经打通了IaaS层、PaaS层、应用层的所有链路和指标的监控,再也不用在多个监控系统中切换来切换去了,如下所示

![12](https://yqfile.alicdn.com/2fa5fcb32eeab2541816bf7d4d4ecf4c5dbdf152.png)

*   1 IaaS层物理机、机房网络交换机等的监控指标
*   2 PaaS层中间件服务端的监控指标
*   3 应用层SOA、Exception、JVM、MQ等客户端的相关指标
*   4 应用层自定义的监控指标

以打通饿了么分库分表中间件DAL为例: 
![13](https://yqfile.alicdn.com/5ac57457713c3427de50da4ce18210eeb96e759c.png) 
![14](https://yqfile.alicdn.com/6d70d674e7b2af1c61a215fa432b15290366bc40.png)

*   可以根据机房、执行状态、表、操作类型(比如Insert、Update、Select等)进行过滤查看
*   左边列表给出每条SQL的执行的平均耗时
*   右边2个图表给出该条SQL在DAL中间件层面、DB层面的耗时以及调用QPS
*   可以给出该SQL打在后端DAL中间、DB上的分布情况,可以用于排查是否存在一些热点的情况
*   还有一些SQL查询结果的数据包大小的曲线、SQL被DAL限流的情况等等
*   可以查看任何时间点上该SQL的调用链路信息

再以打通饿了么SOA服务为例: 
![15](https://yqfile.alicdn.com/9ccf2497f0d686c0fc5b6e9182b5316c4209d861.png) 
![16](https://yqfile.alicdn.com/9c9b36c315452db868ba1c98f9d19bfb14f292b8.png)

*   可以根据机房和状态信息进行过滤
*   左边一栏列出该应用提供的SOA服务接口,同时给出平均响应时间以及和昨天的对比情况
*   右边的2个图表分别给出了对应服务接口的服务响应时间和QPS以及和昨天的对比情况,同时可以切换平均响应时间到TP99或者其他TP值,同时配有可以快速对相关曲线添加告警的跳转链接
*   可以切换到单机维度来查看每台机器该SOA接口的响应时间和QPS,用来定位某台机器的问题
*   可以给出该SOA接口调用在不同集群的分布占比
*   可以给出该SOA接口的所有调用方以及他们的QPS
*   可以查看任何时间点上该SOA接口的调用链路信息

### 5 告警

可以针对所有的监控指标配置如下告警方式:

*   阈值:简单的阈值告警,适用于CPU、内存等
*   同环比:与过去同期比较的告警
*   趋势:适合于相对平滑连续的无需阈值的智能告警
*   其他告警形式

浅谈监控系统的发展趋势
===========

### 1 日志监控阶段

本阶段实现方式:程序打日志,使用ELK来存储和查询程序的运行日志,ELK也能简单显示指标曲线

排障过程:一旦有问题,则去ELK中搜索可能的异常日志来进行分析排障

### 2 链路监控阶段

上一个阶段存在的问题:ELK只是基于一行一行日志进行聚合或者搜索分析,日志之间没有上下文关联。很难知道一次请求耗时较长究竟耗时在哪个阶段

本阶段实现方式:CAT横空出世,通过建模抽象出Transaction、Metric等监控模型,将链路分析和简单的报表带入了大家的视野

告警方式:针对报表可以进行阈值监控 
排障过程:一旦有告警,可以通过点击报表来详细定位到是哪个type或name有一定问题,顺便找到对应的链路,查看详细的信息

### 3 指标监控阶段

上一阶段存在的问题:CAT对自定义指标支持的比较弱,也无法实现或者展现更加多样的查询聚合需求

本阶段的实现方式:支持丰富的Metric指标,将链路上的一些报表数据也可以划分到指标中,交给专业的时序数据库来做指标的存储和查询,对接或者自研丰富的指标看板如Grafana

告警方式:针对指标进行更加丰富的告警策略 
排障过程:一旦有告警,可能需要到各个系统上查看指标看板,粗略定位根因,再结合链路总和分析

### 4 平台打通整合阶段

上一阶段存在的问题:系统监控、中间件和业务监控、部分业务监控、链路监控与指标监控都各搞一套数据收集、预处理、存储、查询、展现、告警流程,各个系统处理数据格式、使用方式不统一

本阶段的实现方式:打通从系统层面、容器层面、中间件层面、业务层面等等的可能的链路和指标监控,统一数据的处理流程,同时整合发布、变更、告警与监控曲线结合,成为一站式监控平台

告警方式:可以统一的针对各个层面的监控数据做统一化的告警 
排障过程:只需要在一个监控系统中就可以查看到所有的监控曲线和链路信息

目前我们EMonitor已完成这个阶段,将公司之前存在已久的3套独立的监控系统统一整合成现如今的一套监控系统

### 5 深度分析阶段

上一阶段存在的问题:

*   用户虽然可以在一个系统中看到所有各个层面的监控数据了,但是每次排障时仍然要花很多的时间去查看各个层面是否有问题,一旦漏看一项可能就错过了问题所在的根因
*   没有整个业务的全局监控视角,都停留在各自应用的角度

总之:之前的阶段都是去做一个监控平台,用户查询什么指标就展示相应的数据,监控平台并不去关心用户所存储数据的内容。现在呢就需要转变思路,监控平台需要主动去帮用户分析里面所存储的数据内容

本阶段的实现方式:所要做的就是把帮用户分析的过程抽象出来,为用户构建应用大盘和业务大盘,以及为大盘做相关的根因分析。

*   应用大盘:就是为当前应用构建上下游应用依赖的监控、当前应用所关联的机器监控、redis、MQ、database等等监控,可以时刻为应用做体检,来主动暴露出问题,而不是等用户去一个个查指标而后发现问题
*   业务大盘:就是根据业务来梳理或者利用链路来自动生产大盘,该大盘可以快速告诉用户是哪些业务环节出的问题

根因分析:一个大盘有很多的环节,每个环节绑定有很多的指标,每次某个告警出来有可能需要详细的分析下每个环节的指标,比如消费kafka的延迟上升,有各种各样的原因都可能导致,每次告警排查都需要将分析流程再全部人为分析排查下,非常累,所以需要将定位根因的过程通过建模抽象下,来进行统一解决

趋势报表分析:主动帮用户发现一些逐渐恶化的问题点,比如用户发布之后,接口耗时增加,很可能用户没有发现,虽然当前没有问题,但是很有可能在明天的高峰期就会暴露问题,这些都是已经实实在在发生的事故

要想做主动分析,还深度依赖指标下钻分析,即某个指标调用量下降了,能主动分析出是哪些tag维度组合导致的下降,这是上述很多智能分析的基础,这一块也不简单

告警方式:可以统一的针对各个层面的监控数据做统一化的告警 
排障过程:NOC根据业务指标或者业务大盘快速得知是哪些业务或者应用出先了问题,应用的owner通过应用大盘的体检得知相关的变动信息,比如是redis波动、database波动、上下游应用的某个方法波动等等,来达到快速定位问题目的,或者通过对大盘执行根因分析来定位到根因

再谈Logging、Tracing、Metrics
=========================

常见一张3者关系的图 
![17](https://yqfile.alicdn.com/b6695b0eff632c239c8158672f7bc14d178f44b9.png)

三者的确都不可或缺,相辅相成,但是我想说以下几点:

*   三者在监控排障中的所占比例却大不一样:Metrics占据大头,Tracing次之,Logging最后
*   Tracing含有重要的应用之间的依赖信息,Metrics有更多的可深度分析和挖掘的空间,所以未来必然是在Metrics上大做文章,再结合Tracing中的应用依赖来做更深度全局分析,即Metrics和Tracing两者结合发挥出更多的可能性

参考链接: 
CAT:[https://github.com/dianping/cat](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fgithub.com%2Fdianping%2Fcat) 
深度剖析开源分布式监控CAT:[https://tech.meituan.com/2018/11/01/cat-in-depth-java-application-monitoring.html](https://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Ftech.meituan.com%2F2018%2F11%2F01%2Fcat-in-depth-java-application-monitoring.html)

**作者信息:**李刚,网名乒乓狂魔,饿了么监控组研发专家,饿了么内部时序数据库LinDB项目负责人,目前致力于监控的智能分析领域。

 

 

 

 

[原文链接](https://yq.aliyun.com/articles/724601?utm_content=g_1000084812)

本文为云栖社区原创内容,未经允许不得转载
分享到:
评论

相关推荐

    饿了么监控系统EMonitor与CAT的对比1

    本文主要对比了饿了么的EMonitor和美团点评的CAT两个监控系统。 【CAT简介】 CAT(Cat-Client Application Trace)是一款由美团点评开发的实时应用监控平台,主要功能包括事务(Transaction)、事件(Event)、...

    监控管家EMonitor2.0.8.1快速入门指南(正式机).pdf

    监控管家 EMonitor 为硬件产品,在部署前,用户需要至监控管家服务官网 http://www.em4s.cn 注册,获取用户号,以便后续产品完成注册使用;同时后续产品有问题,用户可登录此网站提交问 题,后台会有运营人员处理...

    服务器设备监控监控emonitor214

    易石网络服务监测器(Easy Service Monitor)主要介绍: 网络监测软件,适用网管和商业用户使用。它可以24小时不间断地监测服务器上服务和其它硬件设备的情况,当发生故障时就及时地通知你,让你随时掌握当前网络...

    E_Mon_EMONITOR_

    这个系统,简称为"EMONITOR",是为实时监控和管理电子设备能耗而设计的。STM32F103是意法半导体(STMicroelectronics)生产的一款基于ARM Cortex-M3内核的微控制器,广泛应用在各种嵌入式系统中,以其高性能和低功耗...

    eMonitor 邮箱监控

    【eMonitor 邮箱监控】是一款基于C# 1.1版本开发的邮件监控程序,利用了JMail组件来实现邮件的收发与管理功能。对于初学者来说,这是一个非常实用的学习资源,可以帮助他们理解如何在实际项目中集成邮件服务。 首先...

    eMonitor:监控你的渲染

    在eMonitor中,Python用于构建程序的逻辑框架,处理数据,以及与系统进行交互。Python的库如`os`, `sys`, `threading`, 和 `socket`等,被广泛应用于实现跨平台的网络通信和多线程任务管理,这在监控多个并发渲染...

    北塔监控管家手册

    这样的手册对网络管理员和系统运维人员来说是十分必要的,因为它不仅能够指导他们正确安装和配置监控系统,而且能够帮助他们高效地对IT环境进行日常巡检和问题诊断,从而确保网络环境的稳定运行和业务系统的高可用性...

    Android端非侵入式数据采集框架.zip

    6. **插件化设计**:EMonitor采用插件化架构,允许开发者根据需求添加自定义的监控模块,增强了系统的可扩展性。 7. **低资源消耗**:由于非侵入式的特性,EMonitor在保证功能的同时,尽可能减少对系统资源的占用,...

    罗克韦尔 风能解决方案.pdf

    ### 罗克韦尔风能解决方案:状态监控系统应用 #### 技术案例概览 罗克韦尔自动化(Rockwell Automation)提供了一种针对风电行业的先进状态监控解决方案,旨在帮助风力涡轮机制造商提高设备可靠性和降低维护成本。...

    罗克韦尔自动化 Lube油液分析系统产品介绍(中文).pdf

    此外,系统支持与EMONITOR™Odyssey或EnlubePM等专业设备管理和维护软件接口,使得数据可以集中管理和共享,强化了整个设备维护工作的系统性和计划性。 在硬件方面,LubeLink台式油分析系统支持多功能电源,适合绝...

    罗克韦尔Dynamix状态监测宣传手册.pdf

    9. XMHMI:这应该是罗克韦尔的一个HMI系列,与FactoryTalk View共同使用,提供对复杂系统操作的直观控制和监控。 10. TechConnect和TeamSupport:这两项服务强调罗克韦尔提供的技术支持和团队协作,24小时全年无休...

    罗克韦尔自动化 DVA油液粘度分析系统产品介绍(英文).pdf

    罗克韦尔自动化推出的DVA油液粘度分析系统是一款先进的测试设备,它能够快速、可靠地测量油液粘度。在对润滑剂的物理特性进行分析时,粘度是最重要的参数之一,尤其在确保机械部件间运动与滑动表面之间保持适当间隙...

    罗克韦尔自动化 集成的状态监测解决方案(中文).pdf

    提及它们可能是说明罗克韦尔自动化的产品能够与遵循API670标准的设备兼容,并支持Active-X技术,以实现更广泛的系统集成。 综上所述,罗克韦尔自动化提供的集成状态监测解决方案可能包含一系列的硬件监测设备和软件...

    罗克韦尔 PLC 在状态监测应用的选型指南.pdf

    其中,XM系列智能I/O模块可以满足API670标准,适合于TSI(涡轮机械与发电机系统)机组监测及保护,以及VMS(振动监测系统)。通过网关,这些模块能够与罗克韦尔的集成架构相融合,实现更高效的状态监测解决方案。 ...

    罗克韦尔水泥行业解决方案

    4. **改善安全性和可持续性**:先进的监控系统和预防性维护策略减少了意外停机时间,提高了工作安全性,并有助于实现环境保护目标。 综上所述,罗克韦尔水泥行业解决方案不仅提供了先进的技术支撑,还通过实际案例...

    罗克韦尔自动化-Dynamix 2500数据采集器产品概述.pdf

    6. 集成的预测性维护方案:通过与EMONITOR软件的配套使用,Dynamix 2500数据采集器能够实现噪声和振动分析,为预测性维护提供有效的数据支持。 7. 数据采集与上传功能:数据采集器不仅能够独立作为分析仪器使用,还...

    罗克韦尔自动化-XM智能I_O模块简介.pdf

    集成状态检修(CbM)程序的关键在于XM系列模块能够作为独立系统使用,或与现有的自动化和控制系统集成。 **功能多样性**: XM系列智能I/O模块不仅适用于机器状态监测,也适用于机组保护应用。作为保护监视器,它们...

    状态监测选型指南

    这些系统通过网关可以实现与集成架构的融合。而基于ControlNet的XM-DYN模块组成的监测系统则为Logix用户提供了一个方便快捷且经济的集成监测解决方案。 选型指南中还提供了典型案例简介以及产品选型总览,以帮助...

    home-performance-charting:可视化您的家庭能源和温度数据

    我使用 eMonitor 和 HOBO 数据记录器来跟踪我的净零家庭性能。 需要以下 Javascript 库,未包含在此 repo 中: jquery-1.7.1.min.js — 我没有在更新的版本上测试过 jquery.cookie.js purl.js — v2.2.1 — 在...

Global site tag (gtag.js) - Google Analytics