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

 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监控功能介绍》。              

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值