📜  使用Zipkin进行分布式跟踪(1)

📅  最后修改于: 2023-12-03 15:36:37.619000             🧑  作者: Mango

使用Zipkin进行分布式跟踪

Zipkin是一个开源的分布式跟踪系统,可用于协调跨越数十个微服务的请求。本文将为您介绍如何使用Zipkin进行分布式跟踪。

概述

在微服务架构中,系统由许多互相依赖的微服务组成。当服务之间的调用链上出现问题时,我们需要一套工具来帮助我们追踪和调试这些问题,这就是分布式跟踪系统的用途。

Zipkin是一款开源分布式跟踪系统,可收集分布式系统中的时序数据,并以此展示各个分支之间的依赖。

Zipkin

Zipkin的核心理念是将请求上下文信息(例如TraceId和SpanId等),传递给各个微服务,这样就可以将一个完整的请求跟踪到每个微服务实例上。

安装和配置
安装Zipkin Server

我们可以从官网上下载可执行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 集成到您的微服务中,方便您追踪和排查问题。