转自:http://blog.csdn.net/szwandcj/article/details/51025669

Cat功能强大且多,光日志的报表和图表分析就有十几种,但文档却很少,寥寥无几找到一些粒度却还很粗而且都是偏功能性的介绍。此外cat的配置也特别丰富,但几乎所有的cat文档里却鲜少提及。这些都导致很多方面都是缺失的,尤其是对于使用者来说,缺失了这些可能就意味着后面会步入大坑。

大纲

大众点评Cat–整体架构
大众点评Cat–server架构分析

整体架构

Cat的定位是实时监控平台,但是与其说是监控平台,更像是个数据仓库,在数据仓库的基础上提供丰富的报表分析功能。

Cat分c端和s端,c使用cat接口向s上报统一格式的日志信息。Cat的c是产生日志的地方(一般来说就是被监控的应用,上图中的应用节点),相应的s则是接受日志、消费日志的地方(上图中的server节点),日志消费后生成会日志报表。

S分为job machine, alert machine和sender
machine,前者表示可以运行定时任务的节点,后者则代表可以进行告警任务的节点。定时任务将报表数据转换成图表数据;告警则基于一定规则对报表数据做筛选剔出相应的告警数据,还有种特殊的告警用于对第三方应用做ping(2次ping不通或者超时则告警),告警节点如果不同时是发送节点则只保存告警信息,如果是发送节点则发送消息提醒(微信,短信,邮箱)给相应的运维人员。

运维人员可以直接通过s端提供的web前台功能查看报表信息以及图表信息。

服务节点除了对日志做处理还提供rest服务–报表数据查询和基础数据查询及变更接口。Cat前台提供功能做配置变更和查询,用户也可以编程调用rest接口做变更和查询。Cat集群内部,不同节点之间数据交换都是通过rest服务来的,例如后面要介绍的应用节点到服务节点拉取路由信息查询以及告警节点向服务节点拉取报表信息等。

消息树结构


Cat使用消息树(MessageTree)组织日志,树的每个节点都是一个消息(Message),消息共有5种具体类型,分别是Transaction,
Trace, Event,Heartbeat和Metric。每个消息树都有一个唯一的messageId,且消息树之间有单父级关系。

Transaction可以理解为是一个事务,它分为三种–独立事务,分支事务以及标记事务。事务之间可以互相嵌套,事务还可以嵌套任意其他消息类型,也只有事务才可以嵌套消息。

分支事务是从当前事务里派生出的异步事务,当前事务不需要等待其完成。分支事务创建新的消息树,和主事务之间是平行的关系。主事务通过新建event记录与分支事务之间的关系(一种软连接关系),分支事务通过设置消息树的parentMessageId维护与主事务消息之间的关系。

标记事务和分支事务之间非常类似,但标记事务是当前事务的子事务而不是另一个平行事务。其他线程可以通过tag(标记)找到标记事务并进行绑定,标记事务创建新event记录绑定信息,每一次绑定对应一个event,event里记录绑定线程的事务信息;同时绑定线程会也通过parentMessageId维护与主事务消息之间的关系。

Event代表系统是在某个时间点发生的一次事件,例如新用户注册、登陆,系统异常等,理论上可以记录任何事情。

Trace记录debug或者info信息。

Metric记录一些指标信息,cat提供logMetricForSum, logMetricForCount以及logMetricForDuration对指标做简单的度量统计。

Heartbeat则是用来记录系统的心跳信息,例如cpu,内存等等。Cat默认收集c端(见上节c和s的区分)节点的心跳信息。对报文结构感兴趣的可以查看status.xsd。

关键配置的静态结构

Cat有三个重要配置,分别是ClientConfig, RouterConfig和ServerConfig,分别代表客户端信息,服务路由信息以及服务端配置信息。

每个客户端对应一组对服务器以及一个domain信息,客户端默认从这组服务中的一个节点上拉取路由配置信息。客户端的查询参数里带有domain信息,服务端的路由配置里如果有相应的domain则返回相应domain下的一组server信息,如果没有则返回default
servers。

返回的路由信息包含一组日志服务节点以及采样比例(sample),日志服务节点包含权重,socket端口号以及id(ip)。采样比例是指客户端的cat日志多少次里抽样发送1次,例如0.2则代表记录5次日志会忘服务端发送1次。

客户端拉取到router信息后,和router的日志server列表中第一个可用server之间建立netty channel,并启动一个线程对channel进行维护。对channel的维护主要包括:
1. 比较服务端路由信息和客户端上次抓取的是否一致,不一致则更新客户端router信息,并重新建立新channel
2. 判断当前channel状态,如果状态不正常,则从router的server列表里重新找出一个能用的server建立channel

客户端拉取不到router信息时,默认使用客户端下的server列表作为远程日志服务器组。

ServerConfig主要用于服务端节点的职能描述,主要有以下几类功能:
1. 定义服务节点职能,可以运行哪类任务,以及是否可以发送告警信息和是否是hdfs存储节点。
2. 通过consoleConfig定义相应报表数据的获取节点,一般用于告警节点远程拉取所有节点的报表数据进行筛选。
3. ConsumerConfig定义各种类型的事务时间阈值,从名字可以看出来分别定义url,sql以及cache类型的事务时间的阈值,超过这个时间会被认为是一个problem。

大众点评Cat--架构分析的更多相关文章

  1. 大众点评CAT开源监控系统剖析

    参考文档: 大众点评的实时监控系统分析(一) CAT_source_analyze 透过CAT,来看分布式实时监控系统的设计与实现 深度剖析开源分布式监控CAT [分布式监控CAT] Client端源 ...

  2. 【转】大众点评Cat--架构分析

    https://blog.csdn.net/szwandcj/article/details/51025669 Cat功能强大且多,光日志的报表和图表分析就有十几种,但文档却很少,寥寥无几找到一些粒度 ...

  3. 【转】大众点评CAT开源监控系统剖析

    https://www.cnblogs.com/yeahwell/p/cat.html 参考文档: 大众点评的实时监控系统分析(一) CAT_source_analyze 透过CAT,来看分布式实时监 ...

  4. 大众点评cat实时监控简介及部署

    简介 背景 CAT(Central Application Tracking)是由吴其敏(前大众点评首席架构师,现携程架构负责人)主导设计基于Java开发打造的实时应用监控平台,为大众点评网提供了全面 ...

  5. Centos 7部署大众点评CAT(一)——单服务器部署

    前一篇拙作上传的时间已经过去2个月了,中间并不是闲着...主要是忙着学习各种组件的安装,写了几篇安装心得存在硬盘里. 最近尝试了点评开源的CAT监控平台的安装,并且希望能够引入到工作中.在部署实践的过 ...

  6. 大众点评cat系统的搭建笔记

    项目地址:https://github.com/dianping/cat 编译步骤: 这个项目比较另类,把编译需要的jar包,单独放在git分支mvn-repo里了,而且官方文档里给了一个错误的命令提 ...

  7. Centos 7部署大众点评CAT(二)——双服务器部署

    在单机上部署CAT,只是在做实验,在生产环境则不可能只用单台服务器监控多个应用. 下面简单介绍一下双服务器的部署,各位有更多硬件资源作为监控服务端的朋友,如果对CAT集群有兴趣,可以参看这篇拙作. 资 ...

  8. 搭建大众点评CAT监控平台

    CAT(Central Application Tracking)是基于Java开发的实时应用监控平台,包括实时应用监控,业务监控.关于CAT的具体介绍可移步到CAT官网进行查阅. 1. 环境清单 C ...

  9. 大众点评cat监控平台搭建

    参考官方文档:https://github.com/dianping/cat/wiki/readme_server 1.数据库相关 (1)创建数据库cat,并执行以下sql创建相关表: CREATE ...

随机推荐

  1. ansible的playbook剧本

    一.playbook剧本介绍 1)playbook介绍 Playbooks是Ansible的配置,部署和编排语言.它们可以描述您希望远程系统执行的策略,或一般IT流程中的一组步骤. 如果说ansibl ...

  2. rails 新建user的phonenumber字段

    1.新建字段 //rails g migration add_字段名_to_表名 字段名:字段类型 rails g migration add_title_to_contents title:stri ...

  3. 2018.11.01 NOIP训练 木棒分组(搜索+剪枝)

    传送门 测试搜索的时候状态定义错了233. 我们把木棒从大到小排序. 然后保证每一组搜到的木棒出现的长度是从大到小递减的. 直接定义现在搜的木棒从什么位置开始,当前这一组的总长度,之前几组的总长度. ...

  4. [转]ajQuery的deferred对象详解

    来自:http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html 作者:  ...

  5. urllib — URL handling modules

    urllib is a package that collects several modules for working with URLs: •urllib.request for opening ...

  6. 证明2x2正交矩阵专置后还是正交矩阵

    [ x1  x2 y1   y2] x1^2+y1^2=1 x2^2 + y2^2=1 x1*x2  + y1*y2=0 如果专置后还是 x1^2 + x2^2=1 y1^2  +y2^2=1 x1* ...

  7. ip route 解释

    [root@localhost ~]# ip route default via 172.16.0.1 dev ens192 proto static metric 100 172.16.0.0/16 ...

  8. ajax实现

    AJAX是为了实现异步通信,提高用户体验度.JavaScript本身并不具有向服务器发送请求的功能(不使用NodeJs),要么使用window.open()方法重新打开一个页面向服务器发送请求,要么使 ...

  9. 理解-const

    c++ 中const和c中define的区别 (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. (2) 类型和安全检查不同 define宏没有类型,不 ...

  10. Redis集群命令行部署工具

    使用之前准备工作: 1)配置好与端口无关的公共redis.conf文件,和工具放在同一目录下 2)配置好与端口相关的模板redis-PORT.conf文件,也和工具放在同一目录下(部署时PORT会被替 ...