Zipkin 是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper 的论文设计而来,由 Twitter 公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据,用来追踪微服务架构下的系统延时问题。
Brave 是用来装备 Java 程序的类库,提供了面向 Standard Servlet、Spring MVC、Http Client、JAX RS、Jersey、Resteasy 和 MySQL 等接口的装备能力,可以通过编写简单的配置和代码,让基于这些框架构建的应用可以向 Zipkin 报告数据。同时 Brave 也提供了非常简单且标准化的接口,在以上封装无法满足要求的时候可以方便扩展与定制(下篇会讲)。
有关zipkin与Brave的详细介绍:http://www.tuicool.com/articles/f2qAZnZ
客户端发起请求到接收到服务端回应,先后经过四个阶段:客户端/消费者发起请求(cs)、服务端/生产者接收到请求(sr)、服务端/生产者发送应答(ss)和客户端/消费者接收到应答(cr)。Brave为Spring提供的Servlet拦截器(ServletHandlerInterceptor)及Rest(BraveClientHttpRequestInterceptor)模板的拦截器,向zipkin报告监控数据,其中,BraveClientHttpRequestInterceptor负责cs与cr的处理,ServletHandlerInterceptor负责sr与ss的处理。
git项目地址:https://github.com/blacklau/brave-webmvc-example (forked from openzipkin/brave-webmvc-example ,请忽略README.md说明)、
io.zipkin.brave
brave
5.0.0
io.zipkin.brave
brave-spring-beans
5.0.0
io.zipkin.brave
brave-context-log4j12
5.0.0
io.zipkin.brave
brave-context-slf4j
5.0.0
io.zipkin.brave
brave-instrumentation-spring-web
5.0.0
io.zipkin.brave
brave-instrumentation-httpclient
5.0.0
io.zipkin.brave
brave-instrumentation-spring-webmvc
5.0.0
io.zipkin.reporter2
zipkin-sender-okhttp3
2.7.6
io.zipkin.reporter2
zipkin-sender-amqp-client
2.7.6
user-name
log4j.properties修改日志输出格式:
log4j.appender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%X{traceId},%X{spanId}] [%t] %c.%M:%L - %m%n
logback.xml修改日志输出格式:
%d{yyyy-MM-dd HH:mm:ss.SSS} %level [%X{traceId},%X{spanId}] [%thread] [%c.%M:%L] - %message%n
作为请求方系统,需要使用注入的SpringMVC的restTemplate发送http post请求:
@Autowired
private static RestTemplate restTemplate;
.......
HttpEntity formEntity = new HttpEntity(jsonObj.toString(), headers);
String result = restTemplate.postForObject(url, formEntity, String.class);
.......
或者使用注入的HttpClient发送http post请求:
public static HttpClient httpClient;
@Autowired
public void setHttpClient(HttpClient httpClient) {
HttpUtil.httpClient = httpClient;
}
.......
httpClient.executeMethod(post);
.......
filter>
tracingFilter
brave.spring.webmvc.DelegatingTracingFilter
tracingFilter
/*