Spring Cloud Sleuth+Zipkin构建微服务链路跟踪

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: Spring Cloud Sleuth+Zipkin构建微服务链路跟踪

正文


一、产生背景


在微服务系统中,随着业务的发展,系统会变得越来越大,那么各个服务之间的调用关系也就变得越来越复杂。一个 HTTP 请求会调用多个不同的微服务来处理返回最后的结果,在这个调用过程中,可能会因为某个服务出现网络延迟或发送错误导致请求失败,这个时候,对请求调用的监控就显得尤为重要了。Spring Cloud Sleuth+zipkin 提供了分布式服务链路监控的解决方案。


二、Sleuth&zipkin介绍


Sleuth


1、基本术语


Span:基本工作单元,发送一个远程调度任务 就会产生一个Span,Span是一个64位ID唯一标识的,Trace是用另一个64位ID唯一标识的,Span还有其他数据信息,比如摘要、时间戳事件、Span的ID、以及进度ID。例如在微服务中我们的一个服务。

root span:开始一个 Trace 的初始Span,root span的ID的值等于trace ID。

Trace:一系列Span组成的一个树状结构。请求一个微服务系统的API接口,这个API接口,需要调用多个微服务,调用每个微服务都会产生一个新的Span,所有由这个请求产生的Span组成了这个Trace。可以理解为就是微服务中的一条请求链,如订单服务→支付服务→积分服务就是一个trace,其中的每个服务都可以是一个span。

Annotation:用来及时记录一个事件的,一些核心注解用来定义一个请求的开始和结束 。这些注解包括以下:

cs - Client Sent -客户端发送一个请求,这个注解描述了这个Span的开始。

sr - Server Received -服务端获得请求并准备开始处理它,如果将其sr减去cs时间戳便可得到网络传输的时间。

ss - Server Sent (服务端发送响应)–该注解表明请求处理的完成(当请求返回客户端),如果ss的时间戳减去sr时间戳,就可以得到服务器请求的时间。

cr - Client Received (客户端接收响应)-此时Span的结束,如果cr的时间戳减去cs时间戳便可以得到整个请求所消耗的时间。


2、微服务间传递跟踪信息


当一个请求被跟踪时,在传播中会添加spanid或者traceid到请求头header。比如spanId,traceId等,但是不会传输详细信息,比如操作名称,传输数据。


在请求头信息中多了 4 个属性:


x-b3-spanid:一个工作单元(rpc 调用)的唯一标识。

x-b3-parentspanid:当前工作单元的上一个工作单元,Root Span(请求链路的第一个工作单元)的值为空。

x-b3-traceid:一条请求链条(trace) 的唯一标识。

x-b3-sampled:是否被抽样被导出(采样)的标志,1 为需要被导出,0 为不需要被导出。


Zipkin


Zipkin是Twitter的一个开源项目,我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的API接口来辅助查询跟踪数据,或者通过UI组件可视化地展示服务调用链路中各个服务节点的是否异常和处理耗时。


111.png


Reporter: 应用程序中向zipkin发送跟踪数据的组件。

Transport: Reporter发送数据给zipkin收集器的传输方式,三种主要传输方式:HTTP、Kafka 和 Scribe

Storage:zipkin将跟踪数据保存至Storage中。

API 将查询存储以向UI提供数据。

zipkin的4个组件:


Collector(收集器组件):主要负责收集外部系统跟踪信息,跟踪数据到达Zipkin收集器守护进程后,将对其进行验证、存储和索引,以便Zipkin收集器进行查找。

Storage(存储组件):主要负责收到的跟踪信息的存储,默认为存储在内存中,同时支持存储到Mysql、Cassandra以及ElasticSearch。

API(Query): 负责查询Storage中存储的数据,提供简单的JSON API获取数据,这个API主要提供给web UI使用。

Web UI(展示组件):提供简单的web界面,方便进行跟踪信息的查看以及查询,同时进行相关的分析。


工作流程


111.png


更多内容请看官网OpenZipkin · A distributed tracing system 


三、安装


下载jar包然后启动


java -jar zipkin.jar


java -jar zipkin.jar

下载地址


链接:https://pan.baidu.com/s/1ohHc_7ybNy0V41MpBRcibw

提取码:r9tm


访问地址 your ip :9411


四、整合springboot


maven依赖


         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
            <version>3.0.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-sleuth-zipkin -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-sleuth-zipkin</artifactId>
            <version>3.0.5</version>
        </dependency>


application.yml配置


server:
  port: 8085
spring:
  application:
    name: xiaojie-sso
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        enabled: true
  zipkin:
    base-url: http://127.0.0.1:9411  #一定要加前面的http
    sender:
      type: web #以http形式发送
    service:
      name: xiaojie-sso
  sleuth:
    sampler:
      probability: 1.0 #采集所有
      rate: 10 #每秒采集数量

完整demo参考spring-boot: Springboot整合redis、消息中间件等相关代码 中zipkin模块


五、简单使用


执行查询可以查看调用的服务,然后有路径,调用服务消耗时间,报错信息等


111.png


还有支持下载具体的json数据如下面这个样子。


[{
  "traceId": "2751e7f7bb8c2a11",
  "parentId": "2751e7f7bb8c2a11",
  "id": "c06891d9b13ebd18",
  "kind": "SERVER",
  "name": "get /send/{name}",
  "timestamp": 1651306249672816,
  "duration": 27835,
  "localEndpoint": {
    "serviceName": "xiaojie-message",
    "ipv4": "192.168.1.3"
  },
  "remoteEndpoint": {
    "ipv4": "192.168.1.3",
    "port": 55399
  },
  "tags": {
    "http.method": "GET",
    "http.path": "/send/admin",
    "mvc.controller.class": "MessageServiceImpl",
    "mvc.controller.method": "send"
  },
  "shared": true
}, {
  "traceId": "2751e7f7bb8c2a11",
  "parentId": "2751e7f7bb8c2a11",
  "id": "c06891d9b13ebd18",
  "kind": "CLIENT",
  "name": "get",
  "timestamp": 1651306249618939,
  "duration": 90664,
  "localEndpoint": {
    "serviceName": "xiaojie-sso",
    "ipv4": "192.168.1.3"
  },
  "tags": {
    "http.method": "GET",
    "http.path": "/send/admin"
  }
}, {
  "traceId": "2751e7f7bb8c2a11",
  "id": "2751e7f7bb8c2a11",
  "kind": "SERVER",
  "name": "get /login",
  "timestamp": 1651306249533616,
  "duration": 197531,
  "localEndpoint": {
    "serviceName": "xiaojie-sso",
    "ipv4": "192.168.1.3"
  },
  "remoteEndpoint": {
    "ipv4": "127.0.0.1",
    "port": 57738
  },
  "tags": {
    "http.method": "GET",
    "http.path": "/login",
    "mvc.controller.class": "LoginServiceImpl",
    "mvc.controller.method": "login"
  }
}]


参考 : SpringCloud-07-sleuth+zipkin_慕课手记

相关文章
|
2月前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
66 2
|
2月前
|
存储 数据可视化 Java
基于MicrometerTracing门面和Zipkin实现集成springcloud2023的服务追踪
Sleuth将会停止维护,Sleuth最新版本也只支持springboot2。作为替代可以使用MicrometerTracing在微服务中作为服务追踪的工具。
115 1
|
3月前
|
Java 对象存储 开发者
解析Spring Cloud与Netflix OSS:微服务架构中的左右手如何协同作战
Spring Cloud与Netflix OSS不仅是现代微服务架构中不可或缺的一部分,它们还通过不断的技术创新和社区贡献推动了整个行业的发展。无论是对于初创企业还是大型组织来说,掌握并合理运用这两套工具,都能极大地提升软件系统的灵活性、可扩展性以及整体性能。随着云计算和容器化技术的进一步普及,Spring Cloud与Netflix OSS将继续引领微服务技术的发展潮流。
62 0
|
4天前
|
Prometheus 监控 Java
如何全面监控所有的 Spring Boot 微服务
如何全面监控所有的 Spring Boot 微服务
19 3
|
2月前
|
Java 数据库 数据安全/隐私保护
Spring 微服务提示:使用环境变量抽象数据库主机名
Spring 微服务提示:使用环境变量抽象数据库主机名
45 1
|
2月前
|
监控 Java 对象存储
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
45 1
|
2月前
|
安全 Java 对象存储
安全性考量:Spring Security与Netflix OSS在微服务安全中的作用
安全性考量:Spring Security与Netflix OSS在微服务安全中的作用
43 1
|
3月前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
127 5
|
3月前
|
Java 对象存储 开发者
微服务世界的双雄争霸:Spring Cloud与Netflix OSS——谁将引领下一次企业级应用变革的风暴?
Spring Cloud与Netflix OSS是微服务架构的核心组件集,分别以其与Spring Boot的紧密集成及为大规模分布式系统设计的特性,在Java开发社区中广受青睐。前者通过Eureka提供服务发现机制,简化服务注册与定位;后者借助Hystrix增强系统弹性和可靠性,避免雪崩效应。此外,二者还包含负载均衡(Ribbon)、声明式HTTP客户端(Feign)及API网关(Zuul)等功能,共同构建强大微服务体系,助力开发者聚焦业务逻辑,提升系统灵活性与性能。
48 0
|
3月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。