Spring Cloud Zipkin服务端追踪服务

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等服务一起使用,以实现更好的分布式跟踪能力。

阅读剩余 64%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Cloud Zipkin服务端追踪服务 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • ios8.3完美越狱后删除apple watch详细图文教程

    iOS 8.3完美越狱后删除Apple Watch的详细图文教程 在进行iOS 8.3完美越狱之后,如果你想要删除已经连接的Apple Watch设备,你可以按照以下详细图文教程进行操作。 步骤一:进入Cydia软件管理器并找到MobileSubstrate 首先,我们需要进入已经安装好Cydia的设备上,并找到MobileSubstrate。MobileS…

    other 2023年6月27日
    00
  • Win10版本2004 Build19041.423更新补丁KB4568831正式推送

    Win10版本2004 Build19041.423更新补丁KB4568831正式推送攻略 Win10版本2004 Build19041.423更新补丁KB4568831是微软最新推送的补丁,旨在修复一些系统漏洞和提升系统性能。本攻略将详细介绍如何安装和应用该补丁。 步骤一:检查系统版本 首先,确保你的系统版本是Win10版本2004 Build19041.…

    other 2023年8月3日
    00
  • Python super( )函数用法总结

    下面是关于Python中super( )函数用法总结的完整攻略。 1. super( )函数是什么? super()函数是Python中用来调用父类(超类)的一个方法。它可以很好地帮助我们继承父类的属性和方法,并且支持多层继承时的调用。 super()函数的语法如下: super([type[, object-or-type]]) 其中,type参数用于指定…

    other 2023年6月26日
    00
  • opencv模板匹配函数matchtemplate详解

    OpenCV是一个流行的计算机视觉库,提供了许多图像处理和计算机视觉算法。其中之一是模板匹配,它可以在图像中查找特定的模式。在本攻略中,我们将介绍OpenCV中的模板匹配函数matchTemplate的细信息。 matchTemplate函数 matchTemplate函数是OpenCV中用于模板匹配的函数。它采用两个参数:源图像和模板像,并返回一个匹配结果…

    other 2023年5月7日
    00
  • swift指针及内存管理内存绑定实例详解

    Swift指针及内存管理内存绑定实例详解 指针概述 指针是一种用来存储内存地址的变量,它可以让我们直接访问和修改内存中的内容。在Swift中,指针可以通过特定的语法来实现。指针可用于高级数据结构实现、JNI交互、跟踪堆栈跟踪等用途。 Swift语言提供了4种类型的指针: 不可变指针:指针所指向的值不可变; 可变指针:指针所指向的值可以被修改; 野指针:指针所…

    other 2023年6月26日
    00
  • C++关于类结构体大小和构造顺序,析构顺序的测试详解

    C++关于类结构体大小和构造顺序,析构顺序的测试详解 概述 在C++中,类和结构体具有相同的定义方式,而它们的大小、内存分配方式,构造和析构顺序等等却有所不同。本文将从各个方面渐进式地介绍类和结构体之间的差异,希望能够帮助大家更好地理解和使用C++语言。 类和结构体的内存分配 在C++中,类和结构体可以直接定义成员变量和成员函数,并在其中定义多个类型的数据。…

    other 2023年6月26日
    00
  • c# 串口发送接收数据

    c# 串口发送接收数据 串口通信是一种常见的通信方式,它可以用于连接嵌入式设备、传感器、机器人等设备,实现数据的收发,并进行相应的处理。在 c# 开发中,串口通信通常使用 SerialPort 类实现,该类提供了一系列与串口通信相关的属性和方法,本文将介绍如何使用 SerialPort 类实现 c# 中的串口通信,包括串口的打开、发送和接收等操作。 打开串口…

    其他 2023年3月28日
    00
  • Java Bean的作用域,生命周期和注解

    Java Bean是一种可重用的Java组件,通过封装功能独立性强的成员变量和相应的get/set方法,使之成为一种与平台无关的可重用组件。Java Bean的作用域、生命周期和注解是Java Bean的三个重要方面,下面我们逐一讲解。 Java Bean的作用域 Java Bean有四种作用域:请求(request)、会话(session)、应用程序(ap…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部