`
Taylorshirley
  • 浏览: 10244 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

跟我学SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

 
阅读更多

在分布式服务架构中,需要对分布式服务进行治理——在分布式服务协同向用户提供服务时,每个请求都被哪些服务处理?在遇到问题时,在调用哪个服务上发生了问题?在分析性能时,调用各个服务都花了多长时间?哪些调用可以并行执行?…… 为此,分布式服务平台就需要提供这样一种基础服务——可以记录每个请求的调用链;调用链上调用每个服务的时间;各个服务之间的拓扑关系…… 我们把这种行为称为“分布式服务跟踪”。

1. 背景

现今业界分布式服务跟踪的理论基础主要来自于 Google 的一篇论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,使用最为广泛的开源实现是 Twitter 的 Zipkin,为了实现平台无关、厂商无关的分布式服务跟踪,CNCF 发布了布式服务跟踪标准 Open Tracing。国内,淘宝的“鹰眼”、京东的“Hydra”、大众点评的“CAT”、新浪的“Watchman”、唯品会的“Microscope”、窝窝网的“Tracing”都是这样的系统。

2. Spring Cloud Sleuth

一般的,一个分布式服务跟踪系统,主要有三部分:数据收集、数据存储和数据展示。根据系统大小不同,每一部分的结构又有一定变化。譬如,对于大规模分布式系统,数据存储可分为实时数据和全量数据两部分,实时数据用于故障排查(troubleshooting),全量数据用于系统优化;数据收集除了支持平台无关和开发语言无关系统的数据收集,还包括异步数据收集(需要跟踪队列中的消息,保证调用的连贯性),以及确保更小的侵入性;数据展示又涉及到数据挖掘和分析。虽然每一部分都可能变得很复杂,但基本原理都类似。

 

跟我学SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
 

 

服务追踪的追踪单元是从客户发起请求(request)抵达被追踪系统的边界开始,到被追踪系统向客户返回响应(response)为止的过程,称为一个“trace”。每个 trace 中会调用若干个服务,为了记录调用了哪些服务,以及每次调用的消耗时间等信息,在每次调用服务时,埋入一个调用记录,称为一个“span”。这样,若干个有序的 span 就组成了一个 trace。在系统向外界提供服务的过程中,会不断地有请求和响应发生,也就会不断生成 trace,把这些带有span 的 trace 记录下来,就可以描绘出一幅系统的服务拓扑图。附带上 span 中的响应时间,以及请求成功与否等信息,就可以在发生问题的时候,找到异常的服务;根据历史数据,还可以从系统整体层面分析出哪里性能差,定位性能优化的目标。

 

跟我学SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
 

 

Spring Cloud Sleuth为服务之间调用提供链路追踪。通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长。从而让我们可以很方便的理清各微服务间的调用关系。此外Sleuth可以帮助我们:

  • 耗时分析: 通过Sleuth可以很方便的了解到每个采样请求的耗时,从而分析出哪些服务调用比较耗时;
  • 可视化错误: 对于程序未捕捉的异常,可以通过集成Zipkin服务界面上看到;
  • 链路优化: 对于调用比较频繁的服务,可以针对这些服务实施一些优化措施。

spring cloud sleuth可以结合zipkin,将信息发送到zipkin,利用zipkin的存储来存储信息,利用zipkin ui来展示数据。

2. ZipKin

Zipkin 是一个开放源代码分布式的跟踪系统,由Twitter公司开源,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。

每个服务向zipkin报告计时数据,zipkin会根据调用关系通过Zipkin UI生成依赖关系图,显示了多少跟踪请求通过每个服务,该系统让开发者可通过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈。

Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。接下来的测试为方便直接采用In-Memory方式进行存储,生产推荐Elasticsearch。

3. 快速上手

3.1 zipkin

3.1.1 zipkin下载

根据全球最大同性交友网站(github)搜索zipkin后发现,zipkin现在已经不在推荐使用maven引入jar的方式构建了,目前推荐的方案是直接down他们打好包的jar,用java -jar的方式启动,传送门在这里:https://github.com/openzipkin/zipkin

The quickest way to get started is to fetch the latest released server as a self-contained executable jar. Note that the Zipkin server requires minimum JRE 8. For example:

curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jarCOPY

You can also start Zipkin via Docker.

docker run -d -p 9411:9411 openzipkin/zipkinCOPY

Once the server is running, you can view traces with the Zipkin UI at http://your_host:9411/zipkin/.

If your applications aren’t sending traces, yet, configure them with Zipkin instrumentation or try one of our examples.
Check out the zipkin-server documentation for configuration details, or docker-zipkin for how to use docker-compose.

以上内容来自zipkin官方github摘录。简单解释就是可以使用https下载的方式下载zipkin.jar,并使用java -jar的方式启动,还有一种就是使用docker的方式进行启动。

具体搭建过程我这里就不在赘述,有不懂的可以私信或者关注公众号留言问我。

3.1.2 zipkin启动

zipkin的启动命令就比较谜了。

最简单的启动命令为:nohup java -jar zipkin.jar >zipkin.out 2>&1 &,这时,我们使用的是zipkin的In-Memory,含义是所有的数据都保存在内存中,一旦重启数据将全部清空,这肯定不是我们想要的,我们更想数据可以保存在磁盘中,可以被抽取到大数据平台上,方便我们后续的相关性能、服务状态分析、实时报警等功能。

这里我把使用mysql的启动语句分享出来,有关ES的启动语句基本相同:

STORAGE_TYPE=mysql MYSQL_DB=zipkin MYSQL_USER=name MYSQL_PASS=password MYSQL_HOST=172.19.237.44 MYSQL_TCP_PORT=3306 MYSQL_USE_SSL=false nohup java -jar zipkin.jar --zipkin.collector.rabbitmq.addresses=localhost --zipkin.collector.rabbitmq.username=username --zipkin.collector.rabbitmq.password=password --logging.level.zipkin2=DEBUG >zipkin.out 2>&1 &COPY

至此,zipkin服务应该已经搭建并完成,现在我们可以访问一下默认端口,看一下zipkin-ui具体长什么样子了。

 

跟我学SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
3.2 Spring Cloud Sleuth 使用

3.2.1 增加依赖:

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

在zuul-simple和producer两个项目中增加sleuth和rabbitmq的依赖。

3.2.2 配置文件

增加有关rabbitmq和sleuth的配置,这里我仅给出zuul的配置文件,producer的配置同理。

server:
  port: 8080
spring:
  application:
    name: spring-cloud-zuul
  rabbitmq:
    host: host
    port: port
    username: username
    password: password
  sleuth:
    sampler:
      probability: 1.0
zuul:
  FormBodyWrapperFilter:
    pre:
      disable: true
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
COPY
  • 注:spring.sleuth.sampler.probability的含义是链路追踪采样率,默认是0.1,我这里为了方便测试,将其改成1.0,意思是百分之百采样。

3.2.3 测试

这里我们依次启动Eureka、producer和zuul-simple。

打开浏览器,访问测试连接:http://localhost:8080/spring-cloud-producer/hello?name=spring&token=123

这时我们先看zuul的日志,如下图:

 

跟我学SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
 

 

2019-07-07 23:09:28.529  INFO [spring-cloud-zuul,0596a362d604fb01,0596a362d604fb01,true] 20648 --- [nio-8080-exec-1] c.s.zuulsimple.filter.TokenFilterCOPY
  • 注:这里的0596a362d604fb01就是这个请求的traceID,0596a362d604fb01是spanID。

我们打开zipkin-ui的界面,如下图:

 

跟我学SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
 

 

这里我们可以看到这个请求的整体耗时,点击这个请求,可以进入到详情页面,查看每个服务的耗时:

 

跟我学SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
 

 

点击对应的服务,我们可以看到相应的访问时间,http请求类型、路径、IP、tranceID、spanId等内容,如下图:

 

跟我学SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

 

分享到:
评论

相关推荐

    SpringCloud链路追踪-Spring Cloud Sleuth 和 Zipkin 介绍 & Windows 下使用初步

    通过 Spring Cloud Sleuth 和 Zipkin,我们可以有效地监控和调试分布式系统中的服务调用,找出性能瓶颈,提高系统的可维护性和稳定性。了解和掌握这两个工具,对于构建高可用的微服务架构至关重要。

    SpringCloudLearning_forezp.tar.gz

    史上最简单的SpringCloud教程 | 第十一篇:docker部署spring cloud项目 史上最简单的SpringCloud教程 | 第十二篇: 断路器监控(Hystrix Dashboard) 史上最简单的SpringCloud教程 | 第十三篇: 断路器聚合监控(Hystrix ...

    Spring Cloud Sleuth+RabbitMQ+Zipkin实现分布式链路追踪Demo程序

    Spring Cloud Sleuth、RabbitMQ 和 Zipkin 的组合为这一目标提供了强大的工具。在这个Demo程序中,我们将看到如何利用这些技术进行分布式链路追踪。 首先,Spring Cloud Sleuth 是 Spring Cloud 生态系统中的一个...

    09Spring Cloud Sleuth:分布式请求链路跟踪1

    Spring Cloud Sleuth:分布式请求链路跟踪 Spring Cloud Sleuth 是一种分布式系统中跟踪服务间调用的工具,它可以直观地展示出一次请求的调用过程。在大型分布式系统中,服务之间的调用关系非常复杂,使用 Spring ...

    SpringCloud——分布式跟踪(Sleuth)

    Spring Cloud Sleuth是Spring Cloud生态系统的一部分,它实现了分布式追踪的标准——OpenTracing和Zipkin。通过集成Sleuth,开发者可以在不修改代码的情况下,轻松地在微服务架构中实现请求的全链路追踪。 二、核心...

    史上最简单的SpringCloud教程 第九篇 服务链路追踪(Spring Cloud Sleuth).docx

    史上最简单的SpringCloud教程 第九篇 服务链路追踪(Spring Cloud Sleuth).docx史上最简单的SpringCloud教程 第九篇 服务链路追踪(Spring Cloud Sleuth).docx史上最简单的SpringCloud教程 第九篇 服务链路追踪(Spring...

    《最容易学懂的Spring Cloud教程源码》

    SpringCloud 2020版本教程4:使用spring cloud sleuth+zipkin实现仓库追踪 Spring Cloud 阿里巴巴教程 Spring Cloud阿里巴巴教程:使用Nacos作为服务注册发现组件 Spring Cloud阿里巴巴教程:使用Nacos作为配置中心 ...

    springCloud项目练习

    第二课: 服务消费者(rest+ribbon) ... 第十一课:docker部署spring cloud项目 第十二课: 断路器监控(Hystrix Dashboard) 第十三课: 断路器聚合监控(Hystrix Turbine) 第十四课: 服务注册(consul)

    毕业设计基于SpringCloud微服务分布式链路追踪项目源码.zip

    毕业设计基于SpringCloud微服务分布式链路追踪系统源码 追踪实现 使用zipkin+sleuth实现 这个是比较成熟的分布式链路追踪实现方案 拦截器自定义实现 基于Google Dapper 论文,进行自定义实现。 原理: traceId :...

    spring-cloud使用的各种示例

    - [springcloud(十二):使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪](http://www.ityouknow.com/springcloud/2018/02/02/spring-cloud-sleuth-zipkin.html) - [springcloud(十三):Spring Cloud Consul ...

    详解spring cloud分布式整合zipkin的链路跟踪

    Spring Cloud 分布式整合 Zipkin 的链路跟踪详解 知识点1:为什么使用 Zipkin? 在分布式系统中,服务之间的调用关系非常复杂,导致日志查找和调用关系追踪变得困难。Zipkin 可以解决这个问题,它可以将链路调用...

    springcloud微服务框架+服务模版

    Spring Cloud使用的各种示例,以最简单、...spring-cloud-sleuth-zipkin: 利用Sleuth、Zipkin对Spring Cloud应用进行服务追踪分析 spring-boot-admin-eureka: 使用Spring Boot Admin 对Spring Cloud集群进行监控示例

    springcloud 分布式框架搭建

    SpringCloud 是一个基于 Java 的微服务开发框架,用于简化分布式系统构建的一系列工具集合。它提供了包括服务发现、配置管理、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群...

    spring-cloud 整合zipkin实现链路追踪 Demo

    Spring Cloud Zipkin 是一个流行的链路追踪工具,它与 Spring Boot 和 Spring Cloud 结合使用,可以轻松地在微服务架构中实现分布式系统的可观测性。本教程将介绍如何整合 Spring Cloud 与 Zipkin 来实现链路追踪,...

    spring cloud视频教程

    Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具包,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)...

    spring-cloud项目_springcloud_springcloud项目_springcloud_spring-clou

    10. ** Sleuth 和 Zipkin**: Sleuth 是一个分布式追踪解决方案,它为 Spring Cloud 应用程序提供了分布式日志跟踪的能力。Zipkin 是一个收集和可视化这些追踪数据的工具,帮助我们理解微服务架构中的请求流程和性能...

    spring-cloud-examples

    Spring Cloud使用的各种示例,以最简单、...spring-cloud-sleuth-zipkin: 利用Sleuth、Zipkin对Spring Cloud应用进行服务追踪分析 spring-boot-admin-eureka: 使用Spring Boot Admin 对Spring Cloud集群进行监控示例

    2-分布式高级篇 _SpringCloud系统_spring_谷粒商城_分布式_分布式高级篇_

    RabbitMQ柔性事务方案、SpringCloud-Gateway网关、Feign远程调用、Sleuth+Zipkin链路追踪系统、Spring Cache缓存、SpringSession跨子域Session同步方案、基于ElasticSearch7全文检索、异步编排与线程池、压力测试...

    SpringCloud第二季脑图.rar

    11. **Spring Cloud Sleuth**:提供了分布式追踪解决方案,与Zipkin或ELK(Elasticsearch、Logstash、Kibana)集成,方便分析服务调用链路和性能瓶颈。 在"Document.xml"中可能包含了SpringCloud的详细文档,而"bin...

    7天学会spring cloud教程.pdf.zip

    2. Spring Cloud Sleuth与Zipkin:学习如何集成Sleuth进行分布式调用链追踪,通过Zipkin可视化分析调用链路。 第五天:Spring Cloud Stream与消息驱动 1. Spring Cloud Stream:理解消息驱动的设计模式,学习如何...

Global site tag (gtag.js) - Google Analytics