CAT使用总结

作者: 清歌笑染红尘 | 来源:发表于2018-01-29 13:45 被阅读2146次

    简介

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

    Logview


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

    可视化Logview


    [图片上传失败...(image-9b83ca-1517378766023)]

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


    [图片上传失败...(image-538c7d-1517378766023)]


    Transaction

    一段代码运行时间、次数,比如URL、Cache、SQL执行次数和响应时间

    Transaction实时报表

    • Type统计界面

    [图片上传失败...(image-f87703-1517378766023)]

    • Name统计界

    [图片上传失败...(image-c16591-1517378766023)]

    Transaction历史统计报表

    • Transaction\Event月报表支持每天的趋势图,以天为单位,如下图
      [图片上传失败...(image-289e1b-1517378766023)]
    • Transaction\Event报表日报表、周报表支持同比、环比对比,时间精度为5分钟
      [图片上传失败...(image-b3ed04-1517378766023)]

    Even

    一行代码运行次数,比如出现一个异常

    Event实时报表

    • Type统计界面
      [图片上传失败...(image-687c55-1517378766023)]

    • Name统计界面
      [图片上传失败...(image-ad3617-1517378766023)]

    • 一个小时内详细指标统计
      [图片上传失败...(image-d1697d-1517378766023)]

    Event历史报表

    • Transaction\Event月报表支持每天的趋势图,以天为单位,如下图
      [图片上传失败...(image-51d8ca-1517378766023)]
    • Transaction\Event报表日报表、周报表支持同比、环比对比,时间精度为5分钟
      [图片上传失败...(image-bf44fa-1517378766023)]

    Problem

    根据Transaction\Event数据分析出来系统可能出现的异常,包括访问较慢的程序,

    Problem实时报表

    Problem的类型如下:

    代码 详解
    error Log4j记录的错误异常
    call 表示在远程调用中transaction中出错
    sql 表示在数据库的调用中transaction中出错
    url 表示在url请求中调用transaction中出错
    failure 业务程序Transaction的失败(除了call\sql\url之外)
    heartbeat 心跳消息
    long-url 执行慢的url请求(可以进行进行时间筛选)
    long-service 执行慢的service请求(可以进行进行时间筛选)
    long-sql 执行慢的sql请求(可以进行进行时间筛选)

    [图片上传失败...(image-a87ac4-1517378766023)]

    点击机器IP,进入某一台机器出现的具体问题,这个包括了All中出现的所有错误统计之外,还增加了以分钟和线程为单位的错误分布图,具体如下:

    [图片上传失败...(image-8fda4d-1517378766023)]

    Problem历史报表

    • 在选择了特定的域、报表类型、时间和IP之后,点击[:: show ::] 查看某一Type下的Problem出现次数的分布图。(当前这一天、上一天、上周这一天)
      [图片上传失败...(image-8df6a1-1517378766023)]
    • 进一步,可以查看该Type下,某个Status的Problem出现次数的分布图。(当前这一天、上一天、上周这一天)
      [图片上传失败...(image-eec2c3-1517378766023)]

    Heartbeat实时报表

    JVM内部一些状态信息,Memory,Thread等

    • Thread信息包括
    名称 详细
    Active Thread 系统当前活动线程
    Daemon Thread 系统后台线程
    Total Started Thread 系统总共开启线程
    Started Thread 系统每分钟新启动的线程
    Cat Started Thread 系统中CAT客户端启动线程
    Pigeon Started Thread 系统中Pigeon客户端启动线程数
    • System Info信息包括
    名称 详细
    NewGc Count 新生代GC次数
    OldGc Count 旧生代GC次数
    System Load Average 系统Load详细信息
    • Memery Info信息包括
    名称 详细
    Memory Free 系统memoryFree情况
    Heap Usage Java虚拟机堆的使用情况
    None Heap Usage Java虚拟机Perm的使用情况
    • Disk Info信息包括

    详细|
    ---|---
    /根的使用情况|
    /data盘的使用情况|

    • Cat Info信息包括

    详细|
    ---|---
    Cat每分钟产生消息数|
    Cat每分钟丢掉的消息数|
    Cat每分钟产生消息大小|

    Dependency实时报表

    系统之间实时调用数据信息,包括远程服务、数据库、缓存等

    名称 详细
    时间统计粒度 分钟
    形状:圆形 SOA的一个服务或者一个Web
    形状:矩形 数据库一个实例
    形状:菱形 缓存一种集群(MemoryCached)
    状态:红色 Error
    状态:黄色 Warning
    状态:绿色 OK
    浮层 点击节点可以直接查询这一分钟内这个节点的详细状态

    [图片上传失败...(image-c91a1d-1517378766023)]

    • 应用监控大盘
      把所有核心项目用监控大盘方式展示,能全局看到项目目前问题。
      [图片上传失败...(image-f67934-1517378766023)]

    Metric实时报表

    公司核心业务指标监控

    “当前值”表示当前实际值,“基线值”表示根据历史趋势算出来当天的基准线

    [图片上传失败...(image-957773-1517378766023)]

    Matrix实时报表

    一次请求(URL、Service)中的调用链路统计,包括远程调用、sql调用、缓存调用

    • Ratio表示访问次数,Min是最少,Max是最大,Avg是平均
    • Cost表示时间消耗,Min是最少,Max是最大,Avg是平均
      [图片上传失败...(image-cd39f1-1517378766023)]

    调用链路排行

    包括远程调用、sql调用、缓存调用最多排行
    [图片上传失败...(image-1c669-1517378766023)]

    Cross实时报表

    SOA系统用关于RPC调用的报表(支持粒度服务、IP、方法)

    统计参数包括:访问量,错误量,响应时间,QPS

    客户端调用

    [图片上传失败...(image-3cd72e-1517378766023)]

    服务端调用

    [图片上传失败...(image-2e5d04-1517378766023)]

    Storage实时报表

    监控一段时间内数据库、Cache访问情况:各种操作访问次数、响应时间、错误次数、长时间访问量等等。

    长时间访问定义:操作响应时间超过1秒(数据库),操作响应时间超过50毫秒(cache)

    • 统计报表

      • 可以选择相应操作,查看该操作的各项访问指标。数据库默认操作:select,update,delete,insert;cache默认操作:add,get,mGet,remove
      • Domain是访问该数据库或cache的应用名,All是所有应用操作数据汇总
      • Count: 操作数;Long:长时间操作数;Avg:响应时间;Error:操作错误数
      • 点击查询可以在当前报表上过滤不同操作访问情况,方便分析数据
        [图片上传失败...(image-b90a6b-1517378766023)]
    • 统计曲线图

      • 图表展示当前应用操作数据库或cache情况
      • 图表展示的操作种类,与查询报表中的操作对应一致
        [图片上传失败...(image-bfe9a-1517378766023)]

    埋点方案

    spring-boot

    与spring-boot的整合就是在spring-boot的项目中添加一个配置类。配置类中配置的是由cat提供的过滤器

    以上的方案只能监控URL的执行情况,具体内部执行情况无法监控。

    mybatis

    对于mybatis的监控是通过编写mybatis插件,然后添加如下配置:

      <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource">
                <ref bean="dataSource" />
            </property>
            <property name="plugins">
                <array>
                    <bean class="com.mybatis.CatMybatisPlugins"></bean>
                </array>
            </property>
            <property name="mapperLocations">
                <list>
                    <value>classpath:com/mybatis/*.xml</value>
                </list>
            </property>
        </bean> 
    

    以上方案能够检测到sql的执行情况。

    Spring AOP ANNOTATION 监控方法执行时间

    NOTE : cat不推荐使用aop方法埋点,会有少量性能损耗,推荐使用api,这样type和name以及成功状态可以更加灵活。

    通过定义注解切面来监控方法执行时间。使用用例如下:

    public interface UserService {
    
        public void delete(Object entity);
        
        public void getAllObjects();
        
        public void save(Object entity);
        
        public void update(Object entity);
    }
    
    public class UserServiceImpl implements UserService {
    
        @Override
        @CatAnnotation
        public void delete(Object entity) {
            sleep(30);
            System.out.println("UserServiceImpl---删除方法:delete()---");
        }
    
        @Override
        @CatAnnotation
        public void getAllObjects() {
            sleep(40);
            System.out.println("UserServiceImpl---查找所有方法:getAllObjects()---");
        }
    
        @Override
        @CatAnnotation
        public void save(Object entity) {
            sleep(10);
            System.out.println("UserServiceImpl---保存方法:save()---");
        }
    
        private void sleep(int time) {
            try {
                Thread.sleep(time);
            } catch (Exception e) {
            }
        }
    
        @Override
        @CatAnnotation
        public void update(Object entity) {
            sleep(20);
            System.out.println("UserServiceImpl---更新方法:update()---");
        }
    
    }
    

    优缺点对比

    优点

    • 可扩展:支持分布式、跨IDC部署,横向扩展。
    • 高可用:所有应用都可以倒下了,需要监控还站着,告诉它们发生了什么。
    • 实时处理:信息的价值会随时间锐减,尤其是事故处理过程中。
    • 全量数据:小概率事件是常态,百万分之一的概率,碰到了就是100%。
    • 高吞吐:要想还原真相,需要全方位的监控和度量,必须要有超强的处理吞吐能力。
    • 故障容忍:CAT本身故障不应该影响业务正常运转,CAT挂了,应用不该受影响,只是监控能力暂时减弱。
    • 不保证可靠:允许消息丢失,这是一个很重要的trade-off,虽然目前CAT可以做到4个9的可靠性。

    缺点

    • 并不能直接识别应用系统框架服务,这款产品具有很强的侵入性,需要用户调用Cat API自定义监控打点以及监控纬度数据,侧重于业务监控 。

    相关文章

      网友评论

        本文标题:CAT使用总结

        本文链接:https://www.haomeiwen.com/subject/mmyxzxtx.html