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

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 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_慕课手记

相关文章
|
10天前
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
|
1月前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
101 17
|
1月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
1月前
|
Java 关系型数据库 数据库
微服务SpringCloud分布式事务之Seata
SpringCloud+SpringCloudAlibaba的Seata实现分布式事务,步骤超详细,附带视频教程
77 1
|
2月前
|
JSON Java API
利用Spring Cloud Gateway Predicate优化微服务路由策略
Spring Cloud Gateway 的路由配置中,`predicates`​(断言)用于定义哪些请求应该匹配特定的路由规则。 断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
184 69
利用Spring Cloud Gateway Predicate优化微服务路由策略
|
2月前
|
Java 关系型数据库 Nacos
微服务SpringCloud链路追踪之Micrometer+Zipkin
SpringCloud+Openfeign远程调用,并用Mircrometer+Zipkin进行链路追踪
323 20
|
2月前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
459 13
Spring Cloud Alibaba:一站式微服务解决方案
|
2月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
302 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
2月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
209 5
|
4月前
|
JSON Java 数据格式
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
195 1