一、spingcloud 集成 sleuth
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
然后在方法中打印日志 就可以看到下面的信息
2020-07-11 11:08:57.045 INFO [eureka-client-article-service,d83fdd5f69448a87,d83fdd5f69448a87,true] 7952 --- [nio-8082-exec-4] com.learn.controller.ArticleController : article/callhello2 consume
可以发现在日志的最前面加了一部分的内容,这部分内容是Sleuth为服务直接提供的链路信息。
appName:服务的名称,也就是spring.application.name的值
traceId:整个请求的唯一id,他不傲世整个请求的链路
spanId:基本的工作单元,发起一次远程调用就是一个span
exportable:决定是否导入数据到ZipKin
二、整合Zipkin
1. 下载并启动 zipkin
下载地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
2. 启动:
将jar包下载到本地后,使用 java-jar 启动jar包,当看到下面的情况就说明启动成功了
启动访问 http://localhost:9411/ 可以看到下面的界面
3. 项目中集成 Zipkin
a. 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
b. 在配置文件中加入下面的配置
spring.zipkin.base-url=http://127.0.0.1:9411
这时访问接口会在 zipkin的界面看到请求信息
点击红框中的信息会看到下面的界面
点击红框中的信息会看到请求的详细信息
4. 配置抽样采集数据
spring.sleuth.sampler.probability=1.0
5.手动标记信息
TracingFilter 是负责处理请求和响应的组件,我们可以通过注册自定义的 TracingFilter实例来实现一些扩展性的需求,代码实例如下
@Component
@Order(TraceWebServletAutoConfiguration.TRACING_FILTER_ORDER+1)
public class MyFilter extends GenericFilterBean {
private final Tracer tracer;
MyFilter(Tracer tracer) {
this.tracer = tracer;
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
Span span = this.tracer.currentSpan();
if(null == span){
filterChain.doFilter(servletRequest,servletResponse);
}
((HttpServletResponse) servletResponse).addHeader("ZIPKIN-TRACE-ID",span.context().traceIdString());
span.tag("custom","tag");
filterChain.doFilter(servletRequest,servletResponse);
}
}