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