Cat学习篇 | CAT跨语言服务链监控(一) CAT简介与部署

(一) CAT简介与部署
    介绍
    背景介绍
    Cat系统的特性
    消息树
    CAT部署
    
(二) CAT服务端初始化
    Cat模块
    Cat-servlet初始化
    plexus - IOC容器
    模块的加载 - 模型模式
    cat-home的setup
    TcpSocketReceiver--- netty reactor 模式的应用
    消息的解码
    
(三) CAT客户端原理
    cat客户端部分核心类
    消息的组织 - 消息树
    客户端的初始化
    消息生产 -- 入栈
    Context 线程本地变量
    Transaction事务的开启
    其他类型消息组合
    消息的完成-出栈
    消息的发送-队列化
    消息的序列化
    MessageId的设计
    
(四) 服务端消息分发
    分发架构
    分析管理器的初始化
    消费者与周期管理器的初始化
    什么是周期?
    周期任务-任务队列
    消息分发
    周期策略
    
(五) 配置与数据库操作
    CAT配置
    代码自动生成
    数据库操作
    数据库连接管理
    
(六) 消息分析器与报表(一)
    消息分析器的构建
    TopAnalyzer
    EventAnalyzer - 事件发生次数分析
    MetricAnalyzer - 业务分析
    ProblemAnalyzer -异常分析
    TransactionAnalyzer - 事务分析
    
(七)消息分析器与报表(二)
    CrossAnalyzer-调用链分析
    StorageAnalyzer  --数据库/缓存分析
    StateAnalyzer
    HeartbeatAnalyzer
    DumpAnalyzer -- 原始消息LogView存储
    自定义分析器与报表
    
(八) 报表持久化
    周期结束
    分析器的结束 -- 报表持久化
    报表预处理
    报表的文件存储 -- 重入锁
    报表的数据库存储
    定时任务
    
(九) 管理平台MVC框架
    Servlet容器与请求生命周期
    页面路由初始化
    请求处理流程
    
(十)与JAVA框架的集成
    与Spring MVC集成
    与Spring Boot 集成
    与Spring Cloud 集成
    与dubbo集成
    与MyBatis集成
    与Log4j集成
    
(十一) 其他语言支持
    PHP语言
    C++语言
    LUA语言
    Go语言
    Node.js语言
    Android埋点
    Object  C -- IOS 埋点

(十二) 报警与监控提醒

    短信通知

    邮件通知

(十三) CAT与实时计算
    hadoop模块

    spark实时计算模块


介绍:

    大众点评CAT系统原型和理念来源于eBay的CAL的系统,CAT系统第一代设计者吴其敏在eBay工作长达十几年,对CAL系统有深刻的理解。CAT不仅增强了CAL系统核心模型,还添加了更丰富的报表。自2014年开源以来,CAT在携程、陆金所、猎聘网、找钢网等多家互联网公司生产环境应用。

    CAT是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,除了与点评RPC组件融合的很好之外,他将会能与Spring、MyBatis、Dubbo 等框架以及Log4j 等结合,不久将会支持PHP、C++、Go等多语言应用,基本接入了美团点评上海侧所有核心应用。目前在中间件(MVC、RPC、数据库、缓存等)框架中得到广泛应用,为美团点评各业务线提供系统的性能指标、健康状况、监控告警等,在微服务监控领域也是非常有用的一套组件。

    本文会对CAT整体设计、客户端、服务端等的一些设计思路做详细深入的介绍。

    在详细了解CAT的整体设计细节之后,我们可以在CAT基础之上轻松扩展我们自己的监控和数据收集模块。

    CAT项目的开源地址: https://github.com/dianping/cat


扫描二维码关注公众号,回复: 2407663 查看本文章

背景介绍

    CAT整个产品研发是从2011年底开始的,当时正是大众点评App Net迁移Java的核心起步阶段。当初大众点评App已经有核心的基础中间件、RPC组件Pigeon、统一配置组件lion。整体Java迁移已经在服务化的路上。随着服务化的深入,整体Java在线上部署规模逐渐变多,同时,暴露的问题也越来越多。典型的问题有:

  • 大量报错,特别是核心服务,需要花很久时间才能定位。

  • 异常日志都需要线上权限登陆线上机器排查,排错时间长。

  • 有些简单的错误定位都非常困难(一次将线上的库配置到了Beta,花了整个通宵排错)。

  • 很多不了了之的问题怀疑是网络问题(从现在看,内网真的很少出问题)。

    虽然那时候也有一些简单的监控工具(比如Zabbix,自己研发的Hawk系统等),可能单个工具在某方面的功能还不错,但整体服务化水平参差不齐、扩展能力相对较弱,监控工具间不能互通互联,使得查找问题根源基本都需要在多个系统之间切换,有时候真的是靠“人品”才能找出根源。适逢吴其敏从eBay加入大众点评成为首席架构师,eBay的CAL系统在内部非常成功,就在这样天时地利与人和的情况下,我们开始研发了大众点评App第一代监控系统——CAT。

   

Cat系统的特性

  • 实时处理:信息的价值会随时间锐减,尤其是事故处理过程中。
  • 全量数据:最开始的设计目标就是全量采集,全量的好处有很多。
  • 高可用:所有应用都倒下了,需要监控还站着,并告诉工程师发生了什么,做到故障还原和问题定位。
  • 故障容忍:CAT本身故障不应该影响业务正常运转,CAT挂了,应用不该受影响,只是监控能力暂时减弱。
  • 高吞吐:要想还原真相,需要全方位地监控和度量,必须要有超强的处理吞吐能力。
  • 可扩展:支持分布式、跨IDC部署,横向扩展的监控系统。
  • 不保证可靠:允许消息丢失,这是一个很重要的trade-off,目前CAT服务端可以做到4个9的可靠性,可靠系统和不可靠性系统的设计差别非常大。

目前现状:
        15台CAT物理监控集群
        单台机器15w qps
       2000+ 业务应用(包括部分.net以及Job)

 7000+ 应用服务器

 50TB 消息,~450亿消息(每天)

CAT支持的监控消息类型包括:
  • Transaction 适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控,Transaction用来记录一段代码的执行时间和次数。
  • Event 用来记录一件事发生的次数,比如记录系统异常,它和transaction相比缺少了时间的统计,开销比transaction要小。
  • Heartbeat 表示程序内定期产生的统计信息, 如CPU%, MEM%, 连接池状态, 系统负载等。
  • Metric 用于记录业务指标、指标可能包含对一个指标记录次数、记录平均值、记录总和,业务指标最低统计粒度为1分钟。
  • Trace 用于记录基本的trace信息,类似于log4j的info信息,这些信息仅用于查看一些相关信息

消息树

    CAT监控系统将每次URL、Service的请求内部执行情况都封装为一个完整的消息树、消息树可能包括Transaction、Event、Heartbeat、Metric和Trace信息。

完整的消息树

Alt text可视化消息树

Alt text

分布式消息树【一台机器调用另外一台机器】

Alt text


CAT部署

所需环境

  • Linux 2.6以及之上(2.6内核才可以支持epoll),Mac以及Windows环境可以作为开发环境
  • Java 6,7,8
  • Maven 3.2.3+
  • MySQL 5.6

我司的环境配置如下

  1. Distributor ID: CentOS
  2. Description: CentOS release 6.5 ( Final)
  3. Release: 6.5
  4. Codename: Final
  5. Server version: Apache Tomcat/ 8.0 .30
  6. Server built: Dec 1 2015 22: 30: 46 UTC
  7. Server number: 8.0 .30 .0
  8. OS Name: Linux
  9. OS Version: 2.6 .32 -431.el6.x86_64
  10. Architecture: amd64
  11. JVM Version: 1.8 .0_111-b14
  12. JVM Vendor: Oracle Corporation
  13. Maven 3.3 .3
  14. Mysql 5.6
  15. tomcat 7.0 .70 建议使用此版本,修改中文乱码 tomcat conf 目录下 server.xml
  16. <Connector port= "8080" protocol= "HTTP/1.1"
  17. URIEncoding= "utf-8" connectionTimeout= "20000"
  18. redirectPort= "8443" /> 增加 URIEncoding= "utf-8"

 1、将分支mvn-repo下的jar包复制到本机maven仓库,cat一些依赖的jar存放于mvn-repo分支

  1. 1、git clone https: //github.com/dianping/cat.git
  2. 2、cd cat
  3. 3、git checkout mvn-repo
  4. 4、cp -R * ~ /.m2/repository
  5. 5、git checkout master
  6. 6、mvn clean install -DskipTests

如果下载有问题,可以尝试翻墙后下载

2、在CAT目录下,用maven构建项目

       mvn clean install -DskipTests

3、配置CAT的运行需要配置信息
mvn cat:install

Note: 

  • Linux\Mac 需要对/data/appdatas/cat和/data/applogs/cat有读写权限
  • Windows 则是对系统运行盘下的/data/appdatas/cat和/data/applogs/cat有读写权限,如果cat服务运行在e盘的tomcat中,则需要对e:/data/appdatas/cat和e:/data/applogs/cat有读写权限
  •   此步骤是自动配置一些cat启动需要的基本数据库配置以及配置文件,如果发现此步骤有问题,可以直接使用第五步,手工方式安装。
    
4、(Optional)如果安装了hadoop集群,需到/data/appdatas/cat/server.xml中配置对应hadoop信息。将localmode设置为false,默认情况下,CAT在开发模式(localmode=true)下工作。推荐大部分公司使用单机模式,不需要搭建hdfs,部署cat的服务端使用一个大磁盘的机器,比如1TB,这样可以省去很多事情。

================如果上述自动化程序出现问题,可以使用如下部署进行尝试,这步骤其实就是上述自动化程序做的事情==========================

5、启动的cat单机版本基本步骤
  • 检查下/data/appdatas/cat/ 下面需要的需要的配置文件,配置文件在源码script,请修改对应的datasources.xml 以及 client.xml 里面对应的IP、PSW部分。注意cat服务端的数据上报端口是2280,cat的http端口默认是tomcat的端口8080。
  • 修改server.xml 部分,注意修改server.xml 里面的remote-servers的端口设定,如果是tomcat,一般是8080。
  • 建立一个mysql的数据库,数据库的安装文件在script文件下的Cat.sql,可以导入到数据库中。
  • 在cat目录下执行 mvn install -DskipTests
  • cat-home打包出来的war包,重新命名为cat.war, 并放入tomcat的webapps
  • 启动tomcat
  • 访问 http://localhost:8080/cat/r
  • 具体详细的还可以参考,这里面的步骤更加傻瓜一些, http://unidal.org/cat/r/home?op=view&docName=deploy
6、导入eclipse发现找不到类
  • 请先执行mvn eclipse:eclipse 会自动生成相关的类文件
  • 作为普通项目导入eclipse,不要用作为maven项目导入eclipse
7、可以参考script目录下详细资料

猜你喜欢

转载自blog.csdn.net/michael_hm/article/details/80917844
cat