springcloudsleuth+zipkin实现服务追踪

     2022-04-11     146

关键词:

服务追踪

Spring Cloud Sleuth实现了一种分布式的服务链路跟踪解决方案,通过使用Sleuth可以让我们快速定位某个服务的问题。

官方文档地址如下:

http://cloud.spring.io/spring-cloud-static/spring-cloud-sleuth/2.0.1.RELEASE/single/spring-cloud-sleuth.html

一些概念:

  1. Span,Span是基本的工作单元。Span包括一个64位的唯一ID,一个64位trace码,描述信息,时间戳事件,key-value 注解(tags),span处理者的ID(通常为IP)。
    最开始的初始Span称为根span,此span中span id和 trace id值相同。

  2. Trance,包含一系列的span,它们组成了一个树型结构

  3. Annotation,用于及时记录存在的事件。常用的Annotation如下:
    • cs - Client Sent:客户端发送一个请求,表示span的开始
    • sr - Server Received:服务端接收请求并开始处理它。(sr-cs)等于网络的延迟
    • ss - Server Sent:服务端处理请求完成,开始返回结束给服务端。(sr-ss)表示服务端处理请求的时间
    • cr - Client Received:客户端完成接受返回结果,此时span结束。(cr-cs)表示客户端接收服务端数据的时间

如果一个服务的调用关系如下:
技术分享图片

那么此时将Span和Trace在一个系统中使用Zipkin注解的过程图形化如下:
技术分享图片

每个颜色的表明一个span(总计7个spans,从A到G),每个span有类似的信息

Trace Id = X
Span Id = D
Client Sent

此span表示span的Trance Id是X,Span Id是D,同时它发送一个Client Sent事件

spans 的parent/child关系图形化如下:
技术分享图片


了解完基本的一些概念后,我们来在订单服务和商品服务中,集成spring cloud sleuth以及zipkin。在两个服务的pom.xml文件中,增加如下依赖:

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

为了更详细的查看服务通信时的日志信息,我们将openfeign的日志级别设置为debug。在两个项目的配置文件中,加入如下内容即可:

logging:
  level:
    org.springframework.cloud.openfeign: debug

启动订单、商品服务项目,然后访问创建订单的接口,订单服务的控制台会输出一段这样的信息:

[order,6c8ecdeefb0fc723,cc4109a6e8e56d1c,false]

商品服务的控制台也会输出类似的信息,如下:

[product,6c8ecdeefb0fc723,40cdc34e745d59e7,false]

说明:

  • product: 看也知道是服务名称
  • 6c8ecdeefb0fc723: 是TranceId,一条链路中,只有一个TranceId
  • 40cdc34e745d59e7:则是spanId,链路中的基本工作单元id
  • false:表示是否将数据输出到其他服务,true则会把信息输出到其他可视化的服务上观察

通过这些信息,我们可以得知服务的链路,但是控制台始终是不太方便查看。所以我们需要一个图形化的工具,这时候就轮到zipkin出场了。

zipkin官网地址如下:

https://zipkin.io/

zipkin结构图:
技术分享图片

我们需要搭建zipkin服务器,我这里拿了一台线上的服务做实验,使用docker安装的zipkin,安装过程如下:

[[email protected] ~]# docker run -d -p 9411:9411 openzipkin/zipkin
Unable to find image ‘openzipkin/zipkin:latest‘ locally
latest: Pulling from openzipkin/zipkin
ff3a5c916c92: Pull complete 
a8906544047d: Pull complete 
590b87a38029: Pull complete 
5a45314016bd: Pull complete 
747e7e2c6558: Pull complete 
d010e5d815f5: Pull complete 
Digest: sha256:e130f6191ce6763f59250c44ca9a265ff9eca4c4b9a22c240403a8103123227e
Status: Downloaded newer image for openzipkin/zipkin:latest
e1fd796bc74175543ffce538b44cffcb013e75008acbc4248b4ec373a49df97f
[[email protected] ~]#

安装好后,使用浏览器访问9411端口,主页面如下所示:
技术分享图片

然后在订单服务中将之前的sleuth依赖替换成如下依赖:

<!-- 这个依赖包含了sleuth和zipkin -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

在配置文件中,增加zipkin相关的配置项。如下:

spring:
  ...
  zipkin:
    base-url: http://xxx.xx.xxx.xx:9411/  # zipkin服务器的地址
    sender:
      type: web  # 设置使用http的方式传输数据
  sleuth:
    sampler:
      probability: 1  # 设置抽样采集为100%,默认为0.1,即10%      

配置好后重启项目,并访问创建订单接口。下单成功后,到zipkin页面上就可以查看到order服务的链路信息了:
技术分享图片

会有红色的信息表示有错误,点击上图中的红色信息后,可以进入到服务链路的查看页面,在这里可以看到整条服务链路,并且可以看到每一个服务调用的耗时,也可以看到是哪一步调用发生了错误:
技术分享图片

点击每一行信息都可以查看其详情信息,例如我点击耗时46.236ms的那行信息,其详细信息如下:
技术分享图片

分布式追踪-springcloudsleuth

参考技术A随着现在系统的逐步分布式化、规模化、微服务的流行,系统之间的调用越来越复杂,那么有一个自上而下的追踪系统就尤为重要了,我们可以快速定位到系统的瓶颈并作出相应的调整。zipkin是一款开源的分布式实时... 查看详情

业余草springcloud教程|第九篇:服务链路追踪(springcloudsleuth)(finchley版本)

这篇文章主要讲述服务追踪组件zipkin,SpringCloudSleuth集成了zipkin组件。一、简介AddsleuthtotheclasspathofaSpringBootapplication(seebelowforMavenandGradleexamples),andyouwillseethecorrelationdatabeingcollectedinlogs,aslongasyou 查看详情

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

...gcloud架构,所以为了方便使用,便于接入等项目中采用了springcloudsleuth+zipkin。现总结如下:   springcloudsleuth+zipkin 总共分为几个角色:    1、信息上 查看详情

springcloudsleuth

  在微服务框架中,一个由客户端发起的请求在后端系统中会经过不同的服务节点调用来协同最后的请求结果,每一段请求都会形成一条复杂的分布式服务调用链路,链路中任何一个环节出现高延时或错误都会引起整个请求最... 查看详情

分布式链路追踪之springcloudsleuth+zipkin最全教程(代码片段)

今天这篇文章陈某介绍一下链路追踪相关的知识,以SpringCloudSleuth和zipkin这两个组件为主,后续文章介绍另外一种。文章的目录如下:为什么需要链路追踪?大型分布式微服务系统中,一个系统被拆分成N多个... 查看详情

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

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

分布式链路监控与追踪系统(代码片段)

1.分布式链路监控与追踪产生背景2.SpringCloudSleuth+Zipkin3.分布式服务追踪实现原理4.搭建Zipkin服务追踪系统5.搭建Zipkin集成RabbitMQ异步传输6.SpringCloud2.x新知识介绍7.发布SpringCloud2.0x百级完整超清视频教程含源码 分布式链路监控与... 查看详情

springcloudsleuth分布式请求链路跟踪

...何一环出现高延时或错误都会引起整个请求最后的失败。SpringCloudSleuth提供了一套完整的服务跟踪的解决方案,在分布式系统中提供追踪解决方案并且兼容支持了zipkin。官方文档地址:https://cloud.sp 查看详情

Spring cloud sleuth 没有与 Zipkin 一起运行

】Springcloudsleuth没有与Zipkin一起运行【英文标题】:SpringcloudsleuthdidnotrunwithZipkin【发布时间】:2019-02-0109:50:49【问题描述】:首先我对这门课有一个小问题brave.sampler.Sampler无法导入此类,仅在我添加此依赖项时导入<dependency>&... 查看详情

zipkin_slueth微服务链式追踪

Zipkin_Slueth微服务链式追踪一、SpringCloudSleuth介绍1.分布式服务跟踪必要性​现今互联网环境中,微服务系统越来越庞大、复杂,微服务间的调用关系也越加复杂。往往一个请求,会出发系统后台多个微服务协同工作得到最终结果... 查看详情

zipkin_slueth微服务链式追踪

Zipkin_Slueth微服务链式追踪一、SpringCloudSleuth介绍1.分布式服务跟踪必要性​现今互联网环境中,微服务系统越来越庞大、复杂,微服务间的调用关系也越加复杂。往往一个请求,会出发系统后台多个微服务协同工作得到最终结果... 查看详情

Spring cloud sleuth 注解:自动装配不起作用

】Springcloudsleuth注解:自动装配不起作用【英文标题】:SpringcloudsleuthAnnotations:Autowiringdoesn\'twork【发布时间】:2020-07-1310:21:14【问题描述】:我在我的应用程序中配置了Springcloudsleuth(还有zipkin)。我有一个调用服务的控制器,... 查看详情

javab2b2c电子商务平台分析之十二-----springcloudsleuth

一、简介SpringCloudSleuth主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了zipkin,你只需要在pom文件中引入相应的依赖即可。愿意了解源码的朋友直接求求交流分享技术:二一四七七七五六三三二、服务追踪分析微... 查看详情

javab2b2c电子商务平台分析之十二-----springcloudsleuth

一、简介SpringCloudSleuth主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了zipkin,你只需要在pom文件中引入相应的依赖即可。愿意了解源码的朋友直接求求交流分享技术:二一四七七七五六三三二、服务追踪分析微... 查看详情

分布式链路追踪(sleuthzipkin)(代码片段)

...久化。我们这里采用elasticsearch作为zipkin的数据存储器。SpringCloudSleuth一般而言,一个分布式服务追踪系统,主要有三部分组成:数据收集、数据存储和数据展示。SpringCloudSleuth为服务之间的调用提供链路追踪,通过Sleuth可以很清... 查看详情

32、springcloud服务跟踪总结

.../spring.io/projects/spring-cloud-sleuth有这么一段话:翻译过来:SpringCloudSleuth是SpringCloud实施分布式跟踪解决方案,大量借用Dapper,Zipkin和HTrace。对于大多数用户来说,侦探应该是隐形的,并且所有与外部系统的交互都应该自动进行检... 查看详情

32springcloud服务跟踪总结

.../spring.io/projects/spring-cloud-sleuth有这么一段话:翻译过来:SpringCloudSleuth是SpringCloud实施分布式跟踪解决方案,大量借用Dapper,Zipkin和HTrace。对于大多数用户来说,侦探应该是隐形的,并且所有与外部系统的交互都应该自动进行检... 查看详情

springcloud-sleuth分布式请求链路跟踪

...,链路的任何一个环节出了差错就会导致整个请求的失败SpringCloudSleuth提供了一套完整的服务跟踪的解决方案,并兼容支持了zipkin,为了方便监控,我们需要安装一下Zipkin安装Zipkin监控平台SpringCloud 查看详情