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監控功能介紹》。              

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章