Spring Cloud Zipkin是一个分布式跟踪系统,用于提供跨越多个微服务的请求追踪解决方案。它基于Google Dapper的论文设计实现,通过收集和分析各个服务器之间的交互来提供微服务应用的链路跟踪支持。
以下是实现Spring Cloud Zipkin服务端追踪服务的攻略:
1. 添加依赖
首先,我们需要在Spring Boot应用的pom.xml文件中添加必要的Spring Cloud Zipkin依赖。具体如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
2. 启用Zipkin服务
Zipkin服务可以通过运行zipkin-server Jar(可以从Maven中央仓库中下载)开启。首先,需要从Zipkin官网下载zipkin-server Jar包并运行。下载地址:https://zipkin.io/pages/quickstart.html
可以通过以下命令来启动Zipkin注入类:
@SpringBootApplication
@EnableZipkinServer
public class ZipkinServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ZipkinServiceApplication.class, args);
}
}
可以通过访问从命令行输出的特定URL(http://localhost:9411/zipkin/)来访问Zipkin Web UI。
3. 启用二进制传输
默认情况下,Zipkin使用HTTP JSON提交跟踪数据。但是,它同时也支持使用Google Protobuf协议在二进制层面上传输跟踪数据,这样能够减少负载和延迟(HTTP JSON的大小和格式可能会占用更多的带宽和处理时间)。
可以通过添加以下依赖来启用Protobuf:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.9.1</version>
</dependency>
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-reporter-metrics-micrometer</artifactId>
<version>2.15.0</version>
</dependency>
然后,可以配置zipkin-sender-url为:
spring.zipkin.sender.type: com.github.kristofa.brave.http.DefaultSpanNameProvider
4. 将Zipkin与Spring Cloud Sleuth集成
Spring Cloud Sleuth提供了基于两个HTTP头信息(X-B3-TraceId和X-B3-SpanId)的追踪实现。此外,它还提供了一组注解,用于标记一些特殊的方法和过程,从而能够在具有繁忙线程的异步设置中进行跟踪。以下是集成Zipkin和Sleuth的详细步骤:
声明依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
配置服务名称和端口号
spring:
application:
name: zipkin-demo
server:
port: 9999
开启Zipkin和Sleuth的支持
@SpringBootApplication
@EnableZipkinStreamServer
@EnableBinding(Sink.class)
public class ZipkinStreamServer {
public static void main(String[] args) {
SpringApplication.run(ZipkinStreamServer.class, args);
}
@StreamListener(Sink.INPUT)
public void log(Span span) {
System.out.println("TraceId====>"+span.traceIdString()+"||SpanId====>"+span.id());
}
}
在以上代码中,@EnableZipkinStreamServer是用于启用Zipkin的Stream支持,这样可以使用canary版本的Zipkin。
启用注解
Sleuth提供了一些注解,可以用于跨越多个方法和过程进行Tracing。这些注解被定义在:org.springframework.cloud:spring-cloud-sleuth-core库中。在以下示例中,我们在示例Controller类中添加了@NewSpan注解,以将该请求标记为一个新的Span,然后分别执行两个方法,并在其中一个方法中添加了@ContinueSpan注解。
@RestController
public class TestController {
@Autowired RestTemplate restTemplate;
@GetMapping("/hello")
@NewSpan
public String hello() {
return "Hello";
}
@GetMapping("/world")
@ContinueSpan(log = "第二个方法")
public String world() {
return restTemplate.getForObject("http://localhost:8080/hello", String.class);
}
}
需要注意以下问题:
1. 新的Span是在“hello”方法中创建的,并且该Span将在“world”方法中继续(因为@ContinueSpan注解与“world”方法相关联)。
2. 在“world”方法中,我们使用RestTemplate发起了另一个HTTP请求,并从http://localhost:8080/hello服务返回了响应。
3. 另一个Span是从服务中返回的,并将在控制台日志中记录。
以上是关于Spring Cloud Zipkin服务端追踪服务的完整攻略。需要注意的是,还可以将Zipkin与Spring Cloud Config、Eureka等服务一起使用,以实现更好的分布式跟踪能力。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Cloud Zipkin服务端追踪服务 - Python技术站