📅  最后修改于: 2023-12-03 15:36:37.619000             🧑  作者: Mango
Zipkin是一个开源的分布式跟踪系统,可用于协调跨越数十个微服务的请求。本文将为您介绍如何使用Zipkin进行分布式跟踪。
在微服务架构中,系统由许多互相依赖的微服务组成。当服务之间的调用链上出现问题时,我们需要一套工具来帮助我们追踪和调试这些问题,这就是分布式跟踪系统的用途。
Zipkin是一款开源分布式跟踪系统,可收集分布式系统中的时序数据,并以此展示各个分支之间的依赖。
Zipkin的核心理念是将请求上下文信息(例如TraceId和SpanId等),传递给各个微服务,这样就可以将一个完整的请求跟踪到每个微服务实例上。
我们可以从官网上下载可执行jar包:https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec
然后在命令行中执行以下命令即可安装:
$ java -jar zipkin-server-2.23.4-exec.jar
Zipkin Server 默认端口为9411,所以启动后可在浏览器中访问:http://localhost:9411/zipkin/ 查看Zipkin UI。
在应用中配置 Zipkin 需要使用 Zipkin 的客户端库来记录跟踪信息。下面假设您使用的是 SpringBoot。
首先您需要在 pom.xml 文件中添加 Zipkin 的客户端依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
在 application.properties
文件中添加以下配置,让您的微服务能够连接 Zipkin Server:
spring.zipkin.enabled=true
spring.zipkin.baseUrl=http://localhost:9411/
在启用了 Zipkin 客户端依赖,并配置了与 Zipkin Server 的连接之后,您只需要使用 @Slf4j
和 @Autowired Tracer
注解来跟踪您的应用程序。
下面展示一个简单的使用 Zipkin 进行分布式跟踪的示例:
@RestController
@Slf4j
public class DemoController {
@Autowired
private Tracer tracer;
@GetMapping("/foo")
public String foo() {
log.info("executing foo...");
String result = restTemplate.getForObject("http://localhost:8082/bar", String.class);
log.info("result: {}", result);
return result;
}
@GetMapping("/bar")
public String bar() {
log.info("executing bar...");
Span currentSpan = tracer.currentSpan();
currentSpan.tag("my-tag", "my-test-tag");
return "bar";
}
}
这里我们使用了 @Slf4j
和 @Autowired Tracer
注解来跟踪请求。在 foo()
方法中,我们发起了对另一个微服务的 HTTP 请求,bar()
方法中我们添加了一个自定义 tag,可以用来更方便地查询和检索跟踪结果。
本文介绍了如何使用 Zipkin 进行分布式跟踪。只需简单配置即可轻松地将 Zipkin 集成到您的微服务中,方便您追踪和排查问题。