CAT分布式监控系统(二):CAT埋点方案  项目接入CAT监控说明

本文概要:

             前面《CAT监控功能介绍》已经介绍了CAT监控系统是什么、能做什么;

             而本文主要是基于自己编写的CAT采集端埋点SDK,来说明CAT埋点方案,以及项目中如何接入CAT监控。

1、配置/data/appdatas/cat/client.xml

说明:
            client.xml是配置CAT服务端地址的,这样监控数据才能发送到服务端。

如果该配置文件不存在,(就算配置了后面的配置项)CAT监控不会启用,会打印出warn级别的日志:

CAT Monitor Disabled: CAT client configuration file does not exist!

LINUX环境下:
            创建目录,并分配权限:
                    [root@tjy ~]# mkdir -p /data/appdatas/cat
                    [root@tjy ~]# chmod 777 /data/ -R
            配置client.xml文件:
                    [root@tjy ~]# ll /data/appdatas/cat/client.xml 
                    -rw-r--r-- 1 root root 360 7月  26 16:06 /data/appdatas/cat/client.xml
                    [root@tjy ~]#
                    [root@tjy ~]# cat !$
                    cat /data/appdatas/cat/client.xml
                    <?xml version="1.0" encoding="utf-8"?>

<config mode="client" xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="config.xsd">
                        <servers>
                            <server ip="cat.xxx.cn" port="2250" http-port="8250"/>
                            <server ip="cat.xxx.cn" port="2251" http-port="8251"/>
                            <server ip="cat.xxx.cn" port="2252" http-port="8252"/>
                        </servers>
                    </config>
    
    WINDOWS环境下:
            同样的,在程序运行盘下创建盘下的/data/appdatas/cat目录,目录中配置client.xml。
            注意:如果tomcat安装D盘,eclipse安装F盘,在eclipse中用tomcat运行程序,应该创建F:/data/appdatas/cat
    
    配置可以加入CAT的开关,用于关闭CAT消息发送,将enabled改为false,如下表示将gc-pay这个项目关闭:
          <config mode="client">
            <servers>
                <server ip="cat.xxx.cn" port="2250" http-port="8250"/>
                <server ip="cat.xxx.cn" port="2251" http-port="8251"/>
                <server ip="cat.xxx.cn" port="2252" http-port="8252"/>
            </servers>
            <domain id="gc-pay" enabled="false"/>
        </config>

2、pom.xml引入CAT客户端SDK依赖

<dependency>
              <groupId>com.tjy</groupId>
              <artifactId>my-cat-client</artifactId>
              <version>1.1.0</version>
            </dependency>
    
    说明:
            my-cat-client是我们自己编写的SDK,版本可能会变化,查看最新版本:
                     my-cat-client版本说明
            
            my-cat-client SDK依赖了原CAT客户端cat-client,关于cat-client下载仓库:
                    公司私有仓库已有:Index of /groups/public/com/dianping/cat/cat-client/2.0.0
                            cat-client-2.0.0.jar
                            是基于Build-Jdk: 1.7.0_71
                            
                    如需要公有云仓库,cat提供的公有云仓库配置:
                          <repositories>
                            <repository>
                               <id>central</id>
                               <name>Maven2 Central Repository</name>
                               <layout>default</layout>
                               <url>http://repo1.maven.org/maven2</url>
                            </repository>
                            <repository>
                               <id>unidal.releases</id>
                               <url>http://unidal.org/nexus/content/repositories/releases/</url>
                            </repository>
                         </repositories>
                         <pluginRepositories>
                            <pluginRepository>
                               <id>central</id>
                               <url>http://repo1.maven.org/maven2</url>
                            </pluginRepository>
                            <pluginRepository>
                               <id>unidal.releases</id>
                               <url>http://unidal.org/nexus/content/repositories/releases/</url>
                            </pluginRepository>
                         </pluginRepositories>

3、配置domain

说明:
            也就是应用的名称,当有监控数据上传到CAT后,一会就可以在CAT页面上看到该名称的应用。
            当在CAT页面选择该应用后,就可以看到该应用所有服务实例的监控数据。
            因为跟踪ID的前缀就是配置的domain。
    
    配置:
          在项目工程里resources资源文件META-INF下,注意是src/main/resources/META-INF/文件夹,而不是webapps下的那个META-INF,添加app.properties文件;
          app.properties文件里配置domain,如:
                    app.name=my-project-name

4、开启CAT监控–@EnableCatClient

在Spring容器能扫描到的地方配置注解@EnableCatClient,开启CAT监控。
        如Spring Boot程序,可以在如下配置:
                @SpringBootApplication
                @EnableCatClient
                public class ServiceRibbonApplication {
                    ......
                }
        
        CAT监控延时初始化说明:
                @EnableCatClient默认禁用CAT监控延时初始化,即在程序启动时初始化。
                因为延时初始化可能会在第一次监控请求时触发初始化,导致该请求响应时间大大增加。
                
                建议保持默认禁用该功能。
                如果启用请配置:
                        @EnableCatClient(lazyInit=true)

5、跨服务全链路跟踪功能

@EnableCatClient开启CAT监控后,会有跨服务全链路跟踪功能。
        暂时支持该功能的通信组件如下:
                Spring Cloud Ribbon、Spring Cloud Feign(不兼容Sleuth)、Dubbo RPC

6、Servlet容器HTTP访问监控功能

@EnableCatClient开启CAT监控后,默认启用对Servlet容器(Tomcat)的HTTP URL访问监控功能。
        用来记录外部的URL访问。
        
        禁用配置:
            建议默认开启该功能。
            如果没有用到Servlet容器(如tomcat)运行应用程序,或应用程序对外不提供URL访问,可以禁用该功能,只需要配置:
                    @EnableCatClient(enableCatFilter=false)

7、方法调用监控

@EnableCatClient开启CAT监控后,可以用以下两种方法来指定需要监控的方法调用。

7-1、包路径方法监控

@EnableCatClient提供methodMonitorPackages参数来设置包路径方法监控。
                可设置多个包路径,如:
                        @EnableCatClient(methodMonitorPackages={"com.tjy.test.web", "com.tjy.test.service"})
                        
                        "com.tjy.test.web"和"com.tjy.test.service"包路径及其子包路径中的所有公开(public)方法将获得监控。
                
                默认值为一个无效的包路径,即默认不设置的情况下,不监控任何方法。

另外,方法调用异常时,仅记录异常状态(名称),不记录详细的异常信息。

如果需要记录异常堆栈信息,可以用下面的注解方法监控。

7-2、注解方法监控

@CatMethodMonitor注解可标识指定目标方法进行监控。
                @CatMethodMonitor可以标注在实现类上,或实现类的方法上;暂时不支持标注在接口及其方法上的监控。
                
                @CatMethodMonitor有一个参数isRecordException,用来指示是否记录方法抛出的异常堆栈信息。
                默认仅记录异常状态(名称),不记录详细的异常信息。
                如果不配置Servlet容器HTTP访问监控功能的情况下,建议在外部访问的Controller层启用该参数,以记录抛出的异常堆栈信息:
                        @CatMethodMonitor(isRecordException=true)

8、SQL执行监控

从my-cat-client V1.0.0版本开始支持Mybatis3执行SQL(时间、异常)情况的监控。

只要配置提供的Mybtis插件:

com.tjy.monitor.catclient.mybatis.CatMybatisSqlMonitorPlugin

配置参考:

1、Spring Boot方式(Java配置)

推荐使用这种集成方式:

Spring Boot + Mybatis + Druid(数据库连接池)

注意:

这种方式必须引用mybatis-spring-boot-starter,才能使用下面的配置类直接返回插件拦截器,否则不生效。

这种方式可以不用配置Mybitas SqlSessionFactory;

也可以不配置DataSource,但建议另外引用配置Druid。

配置类:

@Configuration

public class CatMonitorConfiguration {

@Bean

public Interceptor paginationInterceptor() {

CatMybatisSqlMonitorPlugin plugin = new CatMybatisSqlMonitorPlugin();

return plugin;

}

}

2、XML文件(mybatis-conf.xml)配置方式

<!-- CAT监控插件 -->

<plugins>

<plugin interceptor="com.tjy.monitor.catclient.mybatis.CatMybatisSqlMonitorPlugin">

</plugin>

</plugins>

3、Mybitas SqlSessionFactory配置方式

如果没有mybatis-conf.xml配置文件,可以把插件配置到Mybitas SqlSessionFactory里。

XML配置如下:

<!-- 配置mybitas SqlSessionFactory Bean -->

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

......(dataSource配置等等)

<!-- CAT监控插件 -->

<property name="plugins">

<array>

<bean class="com.tjy.monitor.catclient.mybatis.CatMybatisSqlMonitorPlugin">

</bean>

</array>

</property>

</bean>

Java配置如下:

@Bean

public SqlSessionFactoryBean createSqlSessionFactory() {

SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

......(dataSource配置等等)

// CAT监控插件

Interceptor[] plugins = { new CatMybatisSqlMonitorPlugin() };

sqlSessionFactoryBean.setPlugins( plugins );

return sqlSessionFactoryBean;

}

9、配置日志框架

CAT支持Log4j、Log4j2、Logback的集成。
        属于可选功能,即对logger.xxx()有效,不影响CAT埋点API。
        
        功能说明:
                    1、仅上传包含异常的ERROR级别日志
                            ERROR级别,且需要包含异常堆栈信息,即Throwable对象,否则CAT不上传;
                            如这API打印的错误信息:
                                   org.slf4j.Logger.error(String msg, Throwable t)                
                          
                    
                    2、在一个messageTree内部,cat内部会针对同样的异常,如果连续调用两次logError(e),仅仅会上报第一份exception。
                            注意框架打印了一个Exception,如果业务包装此异常为new BizException(e),这样仍旧算两次异常,上报两份。        
                    
        测试:
                    如下在启动时打印日志测试:
                            logger.error("produce-01 error test...", new RuntimeException("need ThrowableInformation"));
                            Cat.getManager().setTraceMode(true);
                            logger.info("produce-01 starting...");
                    
                    CAT页面会看到如下信息
                            t10:19:26.145    System    MergeTree        
                              E10:19:26.145    RuntimeException    java.lang.RuntimeException    ERROR    produce-01 error test... java.lang.RuntimeException: need ThrowableInformation
                                                                                                                                                                    at com.test.producer.Produce1.main(Produce1.java:19)
                            T10:19:26.155    System    MergeTree         10ms

9-1、Log4j集成

说明:
                    cat-client提供继承了Log4j.AppenderSkeleton的CatAppender,用来监控上传程序中log4j打印的日志。
            
            配置:            
                    在Log4j的配置文件中配置CatAppender;
                    
                    如上面说明中,没有开启traceMode的情况下,只记录包含异常堆栈信息的ERROR级别日志;
                    这样的话,建议在Root节点中添加此Appendar,业务程序的所有异常都通过记录到CAT中,方便看到业务程序的问题。
                    
                    如果需要info/warn级别的日志(开启traceMode),或需要控制ERROR日志;
                    可自定义细粒度控制,把catAppender添加到具体路径即可,下面只作参考。
                    
                    xml文件配置方式:
                        <appender name="catAppender" class="com.dianping.cat.log4j.CatAppender"></appender>
                            
                            <!--细粒度控制包的日志级别(参考) -->
                            <logger name="com.test" additivity="false">
                                <level value="debug" />
                                <appender-ref ref="log.console" />
                                <appender-ref ref="catAppender" />
                            </logger>
                            
                            <!--全局日志(参考) -->
                            <root>
                                <level value="info" />
                                <appender-ref ref="log.console" />
                                <appender-ref ref="catAppender"/>
                            </root>     
                    
                    properties文件配置方式:
                            log4j.appender.catAppender = com.dianping.cat.log4j.CatAppender
                            
                            #参考
                            log4j.logger.com.tjy.service = info,catAppender

9-2、Logback集成

说明:
                    cat-client 2.0.0版本并没有支持,需要用master代码来编译;
                    但现在master代码的CatLogbackAppender,和log4j的CatAppender行为不一致(行为是指上面的"说明")。

所以,应该使用我们自己封装的SDK(gc-cat-client) 里的CatLogbackAppender,以获得一致的行为,类名如下:
                            com.tjy.monitor.catclient.logback.CatLogbackAppender
            
            配置:
                    有关说明同log4j。
                    
                    xml文件配置方式:
                        <appender name="CatAppender" class="com.tjy.monitor.catclient.logback.CatLogbackAppender"></appender>

<root level="info">
                            <appender-ref ref="CatAppender" />
                        </root>

10、页面配置

对项目进行了以上配置,部署(测试)后就会有监控数据上传到我们的CAT服务器集群。
        这时需要对CAT服务页面上进行一些配置,以便我们能看到自己项目的监控数据、报表。
        
        访问地址:
                实时:http://192.168.1.52:8888/cat/r/t
                文档:http://192.168.1.52:8888/cat/r/home
                配置(帐号/密码都为admin):http://192.168.1.52:8888/cat/s/config
                全局报表:http://192.168.1.52:8888/cat/r/overload

10-1、“项目基本信息”配置

前面"配置domain"也说过,当项目刚开始接入有监控数据上传到CAT后,会在CAT“项目基本信息”配置页面上看到该名称的应用。
                “项目基本信息”配置页面配置页面:http://192.168.1.52:8888/cat/s/config?op=projects
                    注意:
                            直接在搜索框输入配置的项目domain的前面几个字符,应该可以在下拉框看到完整的项目domain,直接选择就可以了。
                            如果下拉框没有出现项目domain,说明接入配置有问题。

如下图所示:

“项目基本信息”配置可以按页面上的说明填写,后期也可以更改的。

10-2、“项目分组配置”配置

这里需要添加配置好的项目,否则在后面的“应用监控配置”-》“业务监控配置”页面就没无法选择自己的项目进行配置了。

10-3、其他配置

其他配置就看着配置吧,不太重要。
        
        页面配置好后,进入实时数据页面:http://192.168.1.52:8888/cat/r/t
        点击最上面的“全部”按键,出现的下拉框就会看到配置的所有项目。(也可以在输入框直接输入项目名称)

如下图所示:

当在选择自己的项目后,就可以看到该项目所有服务实例的监控数据了。
        更多功能说明请参考前面的《CAT监控功能介绍》。

CAT分布式监控系统(二):CAT埋点方案 项目接入CAT监控说明相关推荐

  1. Spark Streaming 实时计算在甜橙金融监控系统中的应用、性能优化、任务监控

    1 写在前面 目前公司对实时性计算的需要及应用越来越多,本文选取了其中之一的 Spark Streaming 来介绍如何实现高吞吐量并具备容错机制的实时流应用.在甜橙金融监控系统项目中,需要对每天亿万 ...

  2. 余压监控系统在住宅小区的应用方案

    安科瑞 华楠 [摘要]: 本文分析了火灾发生时人员伤亡的主要原因--烟雾,并针对该原因提供切实可靠的系统应用解决方案,并通过具体案例,从设计依据.产品选型.系统组网.现场安装等方式介绍余压监控系统,希 ...

  3. 服务器监控系统哪家性价比高,伊利智能安防监控系统哪家专业

    伊利智能安防监控系统哪家专业 由于IT基础设施,运维监控特性,这种方式被广泛应用.一般对时序数据进行建模分为三个部分,分别是:主体,时间点和测量值.通过这个例子来看一下,时序数据库的数学模型,例如:需 ...

  4. 监控系统或者网站服务器的报警及复位,机房监控系统标准和常见故障

    原标题:机房监控系统标准和常见故障 一.系统概况和说明 为提升信息中心机房动力环境设备.网络设备及其他设备安全管理水平.增强设备运行的稳定性.及时发现设备故障隐患.提高管理效率.减轻工作压力,特建立机 ...

  5. 机房动环监控系统有哪些告警功能,机房动环监控系统是什么?

    事实上,通环监控系统经常被问到是什么.事实上,通信机房动环监控系统是用来保证机房运转的.传统的机房运行维护方法是通过人工检查和发现问题来处理.这种运行维护方法效率低,处理问题的及时性低. 机房异常警告 ...

  6. Acrel-2000型电力监控系统实现10kV变电所配电回路用电的实时监控和管理

    1  系统结构描述 本监控系统主要实现中鑫汽配(张家港)有限公司10kV变电所的配电系统进行用电监控与管理:监控范围为高低压进出线柜进行远程实时监控和管理.该系统总计有8台安科瑞AM3系列综保.34台 ...

  7. 道路监控系统java代码_使用Java实现简单的监控系统

    本文只是简单介绍了下监控系统实现的思路,具体还需根据自己需求实现. 前言: 目前存在一个后台服务系统,此时需要配套一个监控系统,对这个后台服务系统进行监控.下面会涉及到两个系统,后台服务系统(这是已经 ...

  8. 埋点是什么意思_(一百二十二)埋点方案举例,如何做埋点方案

    通过一个简单的例子,来进行埋点方案的设计,在设计的过程中,你会了解我们是如何制定分析思路的. 这是一个简单注册表单.只有两个字段,姓名.邮箱,我们只需要收集这两个字段即可. 我们需要知道姓名输入次数, ...

  9. 腾讯 监控系统服务器数据采集,腾讯天津数据中心机房监控项目

    >>系统概述 云服务是目前IT行业的一个重要利润增长点,是各大IT巨头争相争夺的焦点.腾讯"云战略"正是在这种行业背景下应运而生,数据中心机房为云战略提供数据的采集与存 ...

最新文章

  1. MySQL三大范式详解(小白也能懂哦)
  2. 十、深入Java字符串(下篇)
  3. html之引入独立js方便维护jq代码
  4. No.3 - CSS transition 和 CSS transform 配合制作动画
  5. 使Eclipse下支持编写HTML/JS/CSS/JSP页面的自动提示。
  6. 江苏一女子给程序员老公买假发,看到其后脑勺后,网友们哭笑不得
  7. python java正则表达式_java 正则表达式
  8. 【渝粤题库】广东开放大学 大学生创业基础 形成性考核
  9. 尔雅通识课题库【1】
  10. Mac用Homebrew安装libimobiledevice
  11. 桌面在计算机哪个文件,计算机中win7系统桌面文件在c盘哪个文件夹
  12. 谷歌SEO长尾关键词挖掘方法
  13. 全新织梦DEDE CMS模板-精仿qq技术导航网站源码
  14. 【转】虚拟 IO 服务器(VIOS)和 IBM i
  15. uos应用_终极指标(UOS)应用法则
  16. jQuery入门与实战
  17. 桌面的此电脑图标变成了快捷方式如何解决?
  18. 字符集编码(四):UTF
  19. java 前端模板_前端模板引擎入门
  20. 红黑树详解及代码实现(C++)

热门文章

  1. 大数据解决方案都有哪些?
  2. springMVC中URL中文乱码问题
  3. 园林绿化app开发功能
  4. 一刻相册全/批量下载相册到电脑
  5. 道听途说:Cadence与Synopsys后端工具非正规比较
  6. 【增减维度】numpy和torch中的squeeze、unsqueeze理解
  7. layui单击一行直接选中
  8. 微信朋友圈里的大数据
  9. 质量管理(学习总结)
  10. mysql 转字符串类型