📜  将微服务连接到Zipkin(1)

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

将微服务连接到Zipkin

在构建微服务应用程序时,您需要追踪和监视请求如何在整个应用程序中流动。为此,Zipkin是一个非常有用的工具,它提供分布式追踪功能。在本文中,我们将介绍如何将微服务连接到Zipkin,以便您可以监视和分析应用程序中的请求。

Zipkin是什么?

Zipkin是一种分布式追踪系统,用于监视和诊断微服务应用程序中的请求。它提供了一个非常酷的用户界面,您可以在该界面中查看请求流,并从视觉上了解请求如何流动和处理。

Zipkin的核心组件

Zipkin由许多组件组成,其中主要的组件是:

  • Zipkin Server: 接收来自客户端的跟踪数据,并提供一些API,以便您可以查询这些数据。
  • Zipkin Client Library: 用于将跟踪数据收集并发送到Zipkin Server。此库可用于各种编程语言和框架。
  • Zipkin User Interface: 可视化展示请求流、错误和其他有用信息。
在微服务中集成Zipkin

下面是我们应该采取的步骤将微服务连接到Zipkin:

  1. 首先需要引入Zipkin客户端库,组件如下:
<dependency>
    <groupId>io.zipkin.brave</groupId>
    <artifactId>brave-core</artifactId>
    <version>LATEST_VERSION</version>
</dependency>
<dependency>
    <groupId>io.zipkin.reporter</groupId>
    <artifactId>zipkin-reporter</artifactId>
    <version>LATEST_VERSION</version>
</dependency>
<dependency>
    <groupId>io.zipkin.reporter</groupId>
    <artifactId>zipkin-sender-urlconnection</artifactId>
    <version>LATEST_VERSION</version>
</dependency>
  1. 找到微服务入口绑定URL,添加以下代码初始化Zipkin:
import brave.Tracing;
import brave.opentracing.BraveTracer;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import zipkin2.reporter.AsyncReporter;
import zipkin2.reporter.okhttp3.OkHttpSender;

public static String addUser(String name, String email) {     
    // 初始化Zipkin
    ZipkinStart.init();

    // 继续正常的处理逻辑
    User user = new User();
    user.setName(name);
    user.setEmail(email);
    userRepository.save(user);
    return "User created successfully";
}

public class ZipkinStart {

    public static void init() {
        String zipkinUrl = "http://localhost:9411/api/v2/spans";
        OkHttpSender okHttpSender = OkHttpSender.create(zipkinUrl);
        AsyncReporter asyncReporter = AsyncReporter.builder(okHttpSender).build();
        Tracing braveTracer = Tracing.newBuilder()
                .localServiceName("userService")
                .spanReporter(asyncReporter)
                .build();
        BraveTracer braveTracerAdapter = BraveTracer.create(braveTracer);
        io.opentracing.Tracer tracerAdapter = braveTracerAdapter;
        GlobalTracer.register(tracerAdapter);
    }
}

此代码将初始化Zipkin跟踪器并将其进行注册,以便在整个应用程序中使用它。此代码片段将应用程序的服务名称命名为“userService”,但您可以将其更改为您选择的任何服务名称。

3.确保请求可以跨微服务传播。使用Spring Cloud Sleuth等工具进行跨服务传播。

// 例子中使用了Feign Client
@FeignClient(name = "user-service")
public interface UserServiceClient {
    @GetMapping("/{id}")
    User getUser(@PathVariable("id") Long id);
}
  1. 最后,启动Zipkin服务器并访问Zipkin界面以查看所有传入和传出请求的分布式跟踪数据。
java -jar zipkin-server-2.21.2-exec.jar

注:这里使用的是Zipkin 2.21.2版本

总结

使用Zipkin可以更好地理解应用程序中的请求流,及时发现可能出现的问题。通过引入Zipkin客户端库,跨微服务传递跟踪ID等操作,以及在Zipkin UI中查看发送请求的详细信息,您将能够更好地理解所有应用程序中的流程并提高应用程序的性能。