-
Notifications
You must be signed in to change notification settings - Fork 5
Home
blueszhangsh edited this page Mar 25, 2016
·
1 revision
Kepler-Trace是基于Kepler框架之上的扩展,提供按条件打印RPC调用的入参、出参、耗时日志的功能。除了基本的调用信息外,还会输出trace id,用于将一次rpc请求中的上下游串联起来。下面举几个场景阐述该模块的实际应用:
- 比如某个用户的行为比较可疑,想知道这个调用具体传了哪些参数,可以通过指定uid==XXX的条件打印相关的调用,分析调用的行为;
- 再比如线上的服务监控发现某个服务的响应时间忽快忽慢,则可以指定响应时间大于某个阀值的条件打印相关的调用,分析这些调用的模式,找到服务的瓶颈。
-
在service端的pom.xml文件里添加响应的jar包
jackson包用来打印输入输出。
<dependency> <groupId>com.kepler</groupId> <artifactId>kepler-all</artifactId> <version>${maven.project.kepler.version}</version> </dependency> <dependency> <groupId>com.kepler</groupId> <artifactId>kepler-trace</artifactId> <version>${maven.project.kepler.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${maven.project.jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${maven.project.jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${maven.project.jackson.version}</version> </dependency> -
在客户端开启Tracer,以产生Trace ID
com.kepler.trace.trace.enabled=true com.kepler.header.headers.enabled=true -
在服务端开启 Tracer
com.kepler.config.profile.enabled=true com.kepler.trace.trace.enabled=true com.kepler.header.headers.enabled=true -
服务端spring配置
<import resource="classpath:kepler-trace-extension.xml" /> -
在服务实现类中,配置跟踪条件
- 例子:
@Autowired @TraceLogger(logger = "com.kepler.impl.PrinterImpl") public class PrinterImpl implements Printer { public String print(String kepler) throws Exception { return "Hello " + kepler; } @TraceEnabled(when="args[1] == 0") @Override public String print(String word, int printerType) throws Exception { return "[PrinterType: " + printerType + "] Hello " + word; } @TraceEnabled @TraceLogger(logger = "com.kepler.impl.PrinterImpl.getType") @Override public String getType() throws Exception { return "WOODEN"; } }- 说明:
- 在服务的实现类上打上TraceLogger标签,logger参数指定需要打印的Logger;
- 在需要开启Trace的方法上打上TraceEnabled标签。when参数用于指定跟踪条件,如果不填,默认为true,即所有的请求都会打出;
- 如果某个方法需要使用别的Logger打印,同样可以用TraceLogger标签进行配置。
-
跟踪条件指南
可以根据args、response、waiting和elapse设置跟踪条件;条件须是合法的SpEL表达式[@See SpEL表达式]
- args是服务定义的方法的参数数组,类型为Object[];
- response是服务定义的方法的返回值,类型为Object;
- waiting是RPC请求进入线程池后直到被调度执行的等待时间,类型为long;
- elapse是服务真正执行花费的时间,类型为long;
-
关于优化 Kepler-Trace在上传Trace的时候走的是RPC的方式。为了防止大量Trace造成的请求过大问题,Kepler-Trace提供了另一种序列化方式:Jackson + Snappy。该序列化方式会对请求和响应的报文进行压缩。
开启方式:在配置文件里加上
com.kepler.serial.serialid.dynamic=true。开启后该序列化方式不会影响到别的服务。