本文概要:
前面《CAT监控功能介绍》已经介绍了CAT监控系统是什么、能做什么;
而本文主要是基于自己编写的CAT采集端埋点SDK,来说明CAT埋点方案,以及项目中如何接入CAT监控。
说明:
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
WINDOWS环境下:
同样的,在程序运行盘下创建盘下的/data/appdatas/cat目录,目录中配置client.xml。
注意:如果tomcat安装D盘,eclipse安装F盘,在eclipse中用tomcat运行程序,应该创建F:/data/appdatas/cat
配置可以加入CAT的开关,用于关闭CAT消息发送,将enabled改为false,如下表示将gc-pay这个项目关闭:
说明:
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提供的公有云仓库配置:
说明:
也就是应用的名称,当有监控数据上传到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
在Spring容器能扫描到的地方配置注解@EnableCatClient,开启CAT监控。
如Spring Boot程序,可以在如下配置:
@SpringBootApplication
@EnableCatClient
public class ServiceRibbonApplication {
......
}
CAT监控延时初始化说明:
@EnableCatClient默认禁用CAT监控延时初始化,即在程序启动时初始化。
因为延时初始化可能会在第一次监控请求时触发初始化,导致该请求响应时间大大增加。
建议保持默认禁用该功能。
如果启用请配置:
@EnableCatClient(lazyInit=true)
@EnableCatClient开启CAT监控后,会有跨服务全链路跟踪功能。
暂时支持该功能的通信组件如下:
Spring Cloud Ribbon、Spring Cloud Feign(不兼容Sleuth)、Dubbo RPC
@EnableCatClient开启CAT监控后,默认启用对Servlet容器(Tomcat)的HTTP URL访问监控功能。
用来记录外部的URL访问。
禁用配置:
建议默认开启该功能。
如果没有用到Servlet容器(如tomcat)运行应用程序,或应用程序对外不提供URL访问,可以禁用该功能,只需要配置:
@EnableCatClient(enableCatFilter=false)
@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)
从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)配置方式
3、Mybitas SqlSessionFactory配置方式
如果没有mybatis-conf.xml配置文件,可以把插件配置到Mybitas SqlSessionFactory里。
XML配置如下:
......(dataSource配置等等)
Java配置如下:
@Bean
public SqlSessionFactoryBean createSqlSessionFactory() {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
......(dataSource配置等等)
// CAT监控插件
Interceptor[] plugins = { new CatMybatisSqlMonitorPlugin() };
sqlSessionFactoryBean.setPlugins( plugins );
return sqlSessionFactoryBean;
}
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文件配置方式:
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文件配置方式:
对项目进行了以上配置,部署(测试)后就会有监控数据上传到我们的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监控功能介绍》。