微服务实践之全链路追踪(sleuth,zipkin)详解-springcloud(2021.0.x)-4(代码片段)

ShuSheng007 ShuSheng007     2022-11-21     406

关键词:

[版权申明] 非商业目的注明出处可自由转载
出自:shusheng007

文章目录

前言

本文将介绍微服务架构中关于链路追踪相关组件Sleuth与Zipkin的在SpringCloud入门使用。

链路追踪

为什么要进行链路追踪啊?为什么它在微服务架构中突然显得那么重要,以前怎么不太受重视啊? 看看下面这个图,只有5个服务以及他们互相调用方式,这但凡某个调用出了问题:请求都经过哪几个服务啦?先过的你还是它啊?那个服务耗时太长拉?等等你是不是半天都理不清,那要是50个微服务呢?很明显,我们需要链路追踪。

理论

目前流行的分布式链路追踪实现方案都是基于Google发布的Dapper相关的论文的,你要是感兴趣可以去看一下Dapper论文,这是中文翻译版:Dapper论文翻译版。论文肯定是比较晦涩难懂拉,但你应该大体明白里面的一些关键概念,例如Trace,Span, Annotations, Sampling(采样率)等

假设现在调用链路是 A-B-C

  • Trace

这一次调用是一个trace,以一个全局唯一的id来标识,这个就叫traceId

  • Span

A-B就是一个Span,B-C也是一个Span。以一个唯一id来标识,叫spanId

  • Annotations

链路的额外信息,例如 服务名称,Ip,调用起始结束时间等信息

  • Sampling

采样率,在高并发下,你不可能采集每次调用的信息,所以可以100个调用采集1个。

SpringCloud的实现方案

在SpringCloud中我们可以采用Sleuth加Zipkin来实现全链路追踪,Sleuth负责采集链路信息,Zipkin负责处理展示这些信息。

Zipkin服务

因为要使用Zipkin服务,肯定的需要安装Zipkin的服务,我们以docker的形式安装,以mysql来存储链路信息。

下面是安装的docker-compose文件的一部分,完整部分可以在文章末尾的源码中找到。

...
  # 数据库
  ms_mariadb:
    image: mariadb:10.6.5
    container_name: ms_mariadb
    ports:
      - 3306:3306
    volumes:
      - ~/software/database/ms_mariadb/config:/etc/mysql/conf.d
      - ~/software/database/ms_mariadb/data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
    networks:
      ms_network:
        ipv4_address: 172.171.1.11
  # 链路追踪
  ms_zipkin:
    image: openzipkin/zipkin
    container_name: ms_zipkin
    ports:
      - 9411:9411
    environment:
      - STORAGE_TYPE=mysql
      # Point the zipkin at the storage backend
      - MYSQL_DB=zipkin
      - MYSQL_USER=root
      - MYSQL_PASS=root
      - MYSQL_HOST=ms_mariadb
      - MYSQL_TCP_PORT=3306
    networks:
      ms_network:
        ipv4_address: 172.171.1.12
    depends_on:
      - ms_mariadb

当安装了数据库后,还需要执行zipkin的sql脚本来创建其需要的表,脚本也在文后源码中。

引入依赖

pom文件中引入sleuth的依赖:

  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-sleuth</artifactId>
  </dependency>

pom文件中引入zipkin的依赖:

 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-sleuth-zipkin</artifactId>
 </dependency>

配置

spring:
  zipkin:
    enabled: true
    baseUrl: http://localhost:9411
  sleuth:
    sampler:
      rate: 100

上面配置了zipkin的服务地址,以及采样率,这里为了测试将采样率设置为100%。

注意每个服务都要配置哦,这样才能完成全链路的追踪。

使用

当我们引入sleuth的starter后,其就自动为我们的调用织入了追踪信息,例如我们这里使用的OpenFeign,此外它还可以为rabbitmq,kafka等消息队列织入追踪信息。

当我们的order-service这个服务的接口/order/payment被调用时就会输出如下的日志:

2022-10-22 09:04:10.263 DEBUG [order-service,9c759536a9740bb8,fd458cf91ce56f44] 81008 --- [nio-7002-exec-4] o.s.web.servlet.DispatcherServlet        : POST "/order/payment", parameters=

查看日志中[order-service,9c759536a9740bb8,fd458cf91ce56f44] 这部分,后面的两个id,分别是traceId和spanId,sleuth会把这些信息传递给zipkin。

接下来我们登录zipkin后台来看下

  • 登录

浏览器访问 http://localhost:9411

如下图所示,红框tab表示你要查询的链路,可以点击那个+号红色按钮来添加条件查询。蓝框是全局展示调用链路的依赖图,这个特别棒,有了它你再也不用担心请求时怎么走的了。

  • 查找链路

你可以通过各种条件来查询链路,例如直接从api-gateway来查,查到的是最全的。

然后点击右边的Show按钮,就会展示此trace的详情。


从上面的图,你已经可以清晰的看到调用链,以及每个span所花费的时间。例如从上图可知,最后一个logistics-service耗时最久,达到了2秒多,导致整个请求的响应时间达到2秒多,所以找到了最慢的点,然后进行优化。

我们这里出现了redis服务,那是因为网关使用了Redis限流器,所以所有流经gateway的请求都走了redis。

  • 查看链路依赖

如果你已经查到了traceId,那么直接在右上角使用traceId结合时间来查询即可。

图中清晰的展示了各个此链路的各个节点,实际上zipkin展示的是动态图,你会看到不断有小圆点从一个服务跑到另一个服务,特别棒

总结

在SpringCloud中如何进行链路追踪就至此链路追踪就介绍完了,只是介绍了入门使用,更复杂的还是要在实际工作中慢慢总结,毕竟万事开头难,入门后就靠后天发展了…

源码

一如既往,你可以在Github上找到本文的源代码:master-microservice

kubnernetes集群部署zipkin+kafka+elasticsearch实现链路追踪(代码片段)

...目录方案设计环境准备部署ZipkinServer部署Zipkin-Dependencies微服务应用配置测试查看链路信息方案设计SpringCloud微服务使用Sleuth+Zipkin的应用架构实现链路追踪的逻辑图如下:从架构图中可以看到:我们构建了一个服务网关... 查看详情

kubnernetes集群部署zipkin+kafka+elasticsearch实现链路追踪(代码片段)

...目录方案设计环境准备部署ZipkinServer部署Zipkin-Dependencies微服务应用配置测试查看链路信息方案设计SpringCloud微服务使用Sleuth+Zipkin的应用架构实现链路追踪的逻辑图如下:从架构图中可以看到:我们构建了一个服务网关... 查看详情

sleuth+zipkin实现springcloud链路追踪(代码片段)

...入客户端2、配置文件3、运行效果七、小结一、前言在全链路监控:方案概述与比较一文中,我们有详细介绍过分布式链路跟踪的实现理论基础。我们看到 查看详情

sleuth+zipkin服务链路追踪(代码片段)

...d-sleuth/2.1.3.RELEASE/single/spring-cloud-sleuth.html一、为什么要用链路追踪微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多& 查看详情

sleuth+zipkin服务链路追踪(代码片段)

...d-sleuth/2.1.3.RELEASE/single/spring-cloud-sleuth.html一、为什么要用链路追踪微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多& 查看详情

全链路追踪spring-cloud-sleuth-zipkin

...架构下多个服务之间相互调用,在解决问题的时候,请求链路的追踪是十分有必要的,鉴于项目中采用的springcloud架构,所以为了方便使用,便于接入等项目中采用了springcloudsleuth+zipkin。现总结如下:   springcloudsleuth+z... 查看详情

springcloud链路追踪sleuth+twitterzipkin中zipkin服务

2021年5月15日随笔springboot2.2.x版本以上,不建议自己写服务了,我尝试了很多方法没有成功,各种问题,所以需要下载它的jar包然后执行 下载地址:https://repo1.maven.org/maven2/io/zipkin/zipkin-server/2.23.2/zipkin-server-2.23.2-exec.jar下载完... 查看详情

springcloud整合分布式链路追踪系统sleuth和zipkin实战,分析系统瓶颈

...,来分析一下微服务架构中系统调用的瓶颈问题~SpringCloud链路追踪组件Sleuth实战官网  主要功能:做日志埋点什么是Sleuth  专门用于追踪每个请求的完整调用链路。  例如:【order-service,f674cc8 查看详情

springcloud(16)——链路追踪工具sleuth(代码片段)

追踪工具SleuthSpringCloudSleuth可以用来追踪微服务请求中的整个请求,通过它可以记录各个请求之间的耗时、异常等情况。使用SpringCloudSleuth时一般会跟Zipkin一起使用。SpringCloudSleuth收集到的一些跟踪信息可以发送给Zipkin,Zipkin提供... 查看详情

day441.sleuth链路追踪+zipkin分析-谷粒商城(代码片段)

Sleuth链路追踪+Zipkin分析一、为什么要用微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂程度不同,如果出现了错误和异常&#... 查看详情

链路追踪zipkin+sleuth解决illegalcharacterinschemenameatindex0:192.168.100.130:9411/xxx/xx(代码片段)

链路追踪Zipkin+Sleuth解决Illegalcharacterinschemenameatindex0:192.168.100.130:9411/xxx/xx1.出现问题日志中出现如下警告这是访问url时,出现Illegalcharacterinschemenameatindex0:192.168.100.130:9411/xxx/xx问题2.解决方法更改application.properties或application.yml配... 查看详情

sleuth+zipkin链路追踪示例(代码片段)

ZipKin简介中文文档:https://www.bookstack.cn/read/dyingbleed-zipkin/326d459d6b9268be.md文档2:ttps://www.springcloud.cc/spring-cloud-greenwich.html#_spring_cloud_sleuthZipkinisadistributedtracingsystem.Ithelpsgathertimingdataneededtotroubleshootlatencyproblemsinservicearchitectur... 查看详情

链路追踪(zipkin+sleuth+kafka+mysql+elk+filebeats)(代码片段)

链路追踪一、基础环境准备1.ELK+filebeat日志收集搜索2.zipkin+sleuth链路追踪3.OCP环境mysql数据持久化4.dev环境kafka数据发送5.整体架构图二、启动ElasticSearch[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传... 查看详情

kubnernetes集群部署zipkin+kafka+elasticsearch实现链路追踪(代码片段)

...目录方案设计环境准备部署ZipkinServer部署Zipkin-Dependencies微服务应用配置测试查看链路信息方案设计SpringCloud微服务使用Sleuth+Zipkin的应用架构实现链路追踪的逻辑图如下:从架构图中可以看到:我们构建了一个服务网关... 查看详情

springcloud系列微服务的链路追踪(代码片段)

微服务的链路追踪概述1、微服务架构下的问题2、Sleuth概述2.1、Sleuth简介2.2、相关概念2.3、链路追踪Sleuth入门3、Zipkin的概述3.1、ZipkinServer的部署和配置4、客户端Zipkin+Sleuth整合5、基于消息中间件收集数据5.1、RabbitMQ的安装与启... 查看详情

java之springcloud微服务的链路追踪sleuth和zipkin(第三个阶段)springboot项目实现商品服务器端是调用(代码片段)

Java之SpringCloud微服务的链路追踪Sleuth和Zipkin(第三个阶段)【三】【SpringBoot项目实现商品服务器端是调用】一、微服务的链路追踪概述1、微服务架构下的问题2、Sleuth概述(1)简介(2)相关概念3、链路追... 查看详情

sleuth+zipkin实现springcloud链路追踪(代码片段)

...入客户端2、配置文件3、运行效果七、小结一、前言在全链路监控:方案概述与比较一文中,我们有详细介绍过分布式链路跟踪的实现理论基础。我们看到上图,知道在微服务架构下,系统的功能是由大量的微服... 查看详情

springcloudh版sleuth+zipkin服务链路监控与追踪(代码片段)

一、分布式链路监控与追踪上篇文章中我们讲解了SpringCloudStream消息驱动,本篇文章我们介绍喜爱Sleuth+Zipkin的服务链路监控与追踪。上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/122026591在微服务系统中,随... 查看详情