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_慕课手记

相关文章
|
16天前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
129 68
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
2月前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
70 2
|
13天前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
140 13
Spring Cloud Alibaba:一站式微服务解决方案
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
115 62
|
20天前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
64 5
|
20天前
|
Prometheus 监控 Java
如何全面监控所有的 Spring Boot 微服务
如何全面监控所有的 Spring Boot 微服务
32 3
|
1月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
24天前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
36 1
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
80 2
|
2月前
|
自然语言处理 Java API
Spring Boot 接入大模型实战:通义千问赋能智能应用快速构建
【10月更文挑战第23天】在人工智能(AI)技术飞速发展的今天,大模型如通义千问(阿里云推出的生成式对话引擎)等已成为推动智能应用创新的重要力量。然而,对于许多开发者而言,如何高效、便捷地接入这些大模型并构建出功能丰富的智能应用仍是一个挑战。
227 6
下一篇
DataWorks