chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

分布式鏈路跟蹤Sleuth與Zipkin

jf_ro2CN3Fa ? 來(lái)源:芋道源碼 ? 2023-01-13 10:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

  • Spring Cloud Sleuth
  • Zipkin
  • 快速上手
    • 方式一、HTTP
    • 方式二、消息總線 RabbitMQ

隨著業(yè)務(wù)發(fā)展,系統(tǒng)拆分導(dǎo)致系統(tǒng)調(diào)用鏈路愈發(fā)復(fù)雜一個(gè)前端請(qǐng)求可能最終需要調(diào)用很多次后端服務(wù)才能完成,當(dāng)整個(gè)請(qǐng)求變慢或不可用時(shí),我們是無(wú)法得知該請(qǐng)求是由某個(gè)或某些后端服務(wù)引起的,這時(shí)就需要解決如何快讀定位服務(wù)故障點(diǎn),以對(duì)癥下藥。于是就有了分布式系統(tǒng)調(diào)用跟蹤的誕生。

現(xiàn)今業(yè)界分布式服務(wù)跟蹤的理論基礎(chǔ)主要來(lái)自于 Google 的一篇論文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,使用最為廣泛的開源實(shí)現(xiàn)是 Twitter 的 Zipkin,為了實(shí)現(xiàn)平臺(tái)無(wú)關(guān)、廠商無(wú)關(guān)的分布式服務(wù)跟蹤,CNCF 發(fā)布了布式服務(wù)跟蹤標(biāo)準(zhǔn) Open Tracing。國(guó)內(nèi),淘寶的 “鷹眼”、京東的 “Hydra”、大眾點(diǎn)評(píng)的 “CAT”、新浪的 “Watchman”、唯品會(huì)的 “Microscope”、窩窩網(wǎng)的 “Tracing” 都是這樣的系統(tǒng)。

Dapper, a Large-Scale Distributed Systems Tracing Infrastructure:

https://research.google.com/pubs/pub36356.html

Spring Cloud Sleuth 也為我們提供了一套完整的解決方案。在本章中,我們將詳細(xì)介紹如何使用 Spring Cloud Sleuth + Zipkin 來(lái)為我們的微服務(wù)架構(gòu)增加分布式服務(wù)跟蹤的能力。

Spring Cloud Sleuth

一般的,一個(gè)分布式服務(wù)跟蹤系統(tǒng)主要由三部分構(gòu)成:

  • 數(shù)據(jù)收集
  • 數(shù)據(jù)存儲(chǔ)
  • 數(shù)據(jù)展示

根據(jù)系統(tǒng)大小不同,每一部分的結(jié)構(gòu)又有一定變化。譬如,對(duì)于大規(guī)模分布式系統(tǒng),數(shù)據(jù)存儲(chǔ)可分為實(shí)時(shí)數(shù)據(jù)和全量數(shù)據(jù)兩部分,實(shí)時(shí)數(shù)據(jù)用于故障排查(Trouble Shooting),全量數(shù)據(jù)用于系統(tǒng)優(yōu)化;數(shù)據(jù)收集除了支持平臺(tái)無(wú)關(guān)和開發(fā)語(yǔ)言無(wú)關(guān)系統(tǒng)的數(shù)據(jù)收集,還包括異步數(shù)據(jù)收集(需要跟蹤隊(duì)列中的消息,保證調(diào)用的連貫性),以及確保更小的侵入性;數(shù)據(jù)展示又涉及到數(shù)據(jù)挖掘和分析。雖然每一部分都可能變得很復(fù)雜,但基本原理都類似。

2c6b6e30-92e3-11ed-bfe3-dac502259ad0.jpg

服務(wù)追蹤的追蹤單元是從客戶發(fā)起請(qǐng)求(request)抵達(dá)被追蹤系統(tǒng)的邊界開始,到被追蹤系統(tǒng)向客戶返回響應(yīng)(response)為止的過程,稱為一個(gè) trace 。每個(gè) trace 中會(huì)調(diào)用若干個(gè)服務(wù),為了記錄調(diào)用了哪些服務(wù),以及每次調(diào)用的消耗時(shí)間等信息,在每次調(diào)用服務(wù)時(shí),埋入一個(gè)調(diào)用記錄,稱為一個(gè) span 。這樣,若干個(gè)有序的 span 就組成了一個(gè) trace。在系統(tǒng)向外界提供服務(wù)的過程中,會(huì)不斷地有請(qǐng)求和響應(yīng)發(fā)生,也就會(huì)不斷生成 trace,把這些帶有 span 的 trace 記錄下來(lái),就可以描繪出一幅系統(tǒng)的服務(wù)拓?fù)鋱D。附帶上 span 中的響應(yīng)時(shí)間,以及請(qǐng)求成功與否等信息,就可以在發(fā)生問題的時(shí)候,找到異常的服務(wù);根據(jù)歷史數(shù)據(jù),還可以從系統(tǒng)整體層面分析出哪里性能差,定位性能優(yōu)化的目標(biāo)。

Spring Cloud Sleuth 為服務(wù)之間調(diào)用提供鏈路追蹤。通過 Sleuth 可以很清楚的了解到一個(gè)服務(wù)請(qǐng)求經(jīng)過了哪些服務(wù),每個(gè)服務(wù)處理花費(fèi)了多長(zhǎng)。從而讓我們可以很方便的理清各微服務(wù)間的調(diào)用關(guān)系。此外 Sleuth 可以幫助我們:

  • 耗時(shí)分析 :通過 Sleuth 可以很方便的了解到每個(gè)采樣請(qǐng)求的耗時(shí),從而分析出哪些服務(wù)調(diào)用比較耗時(shí);
  • 可視化錯(cuò)誤 :對(duì)于程序未捕捉的異常,可以通過集成 Zipkin 服務(wù)界面上看到;
  • 鏈路優(yōu)化 :對(duì)于調(diào)用比較頻繁的服務(wù),可以針對(duì)這些服務(wù)實(shí)施一些優(yōu)化措施。

Spring Cloud Sleuth 可以結(jié)合 Zipkin,將信息發(fā)送到 Zipkin,利用 Zipkin 的存儲(chǔ)來(lái)存儲(chǔ)信息,利用 Zipkin UI 來(lái)展示數(shù)據(jù)。

這是 Spring Cloud Sleuth 的概念圖:

2c9f7be4-92e3-11ed-bfe3-dac502259ad0.jpg

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

Zipkin

Zipkin 是 Twitter 的一個(gè)開源項(xiàng)目,它基于 Google Dapper 實(shí)現(xiàn),它致力于收集服務(wù)的定時(shí)數(shù)據(jù),以解決微服務(wù)架構(gòu)中的延遲問題,包括數(shù)據(jù)的收集、存儲(chǔ)、查找和展現(xiàn)。我們可以使用它來(lái)收集各個(gè)服務(wù)器上請(qǐng)求鏈路的跟蹤數(shù)據(jù),并通過它提供的 REST API 接口來(lái)輔助我們查詢跟蹤數(shù)據(jù)以實(shí)現(xiàn)對(duì)分布式系統(tǒng)的監(jiān)控程序,從而及時(shí)地發(fā)現(xiàn)系統(tǒng)中出現(xiàn)的延遲升高問題并找出系統(tǒng)性能瓶頸的根源。除了面向開發(fā)的 API 接口之外,它也提供了方便的 UI 組件來(lái)幫助我們直觀的搜索跟蹤信息和分析請(qǐng)求鏈路明細(xì),比如:可以查詢某段時(shí)間內(nèi)各用戶請(qǐng)求的處理時(shí)間等。

Zipkin 提供了可插拔數(shù)據(jù)存儲(chǔ)方式:In-Memory、MySQL、Cassandra 以及 Elasticsearch。接下來(lái)的測(cè)試為方便直接采用 In-Memory 方式進(jìn)行存儲(chǔ),生產(chǎn)推薦 Elasticsearch。

2cc4c73c-92e3-11ed-bfe3-dac502259ad0.jpg

上圖展示了 Zipkin 的基礎(chǔ)架構(gòu),它主要由 4 個(gè)核心組件構(gòu)成:

  • Collector :收集器組件,它主要用于處理從外部系統(tǒng)發(fā)送過來(lái)的跟蹤信息,將這些信息轉(zhuǎn)換為 Zipkin 內(nèi)部處理的 Span 格式,以支持后續(xù)的存儲(chǔ)、分析、展示等功能。
  • Storage :存儲(chǔ)組件,它主要對(duì)處理收集器接收到的跟蹤信息,默認(rèn)會(huì)將這些信息存儲(chǔ)在內(nèi)存中,我們也可以修改此存儲(chǔ)策略,通過使用其他存儲(chǔ)組件將跟蹤信息存儲(chǔ)到數(shù)據(jù)庫(kù)中。
  • RESTful API :API 組件,它主要用來(lái)提供外部訪問接口。比如給客戶端展示跟蹤信息,或是外接系統(tǒng)訪問以實(shí)現(xiàn)監(jiān)控等。
  • Web UI :UI 組件,基于 API 組件實(shí)現(xiàn)的上層應(yīng)用。通過 UI 組件用戶可以方便而有直觀地查詢和分析跟蹤信息。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

快速上手

Zipkin 分為兩端,一個(gè)是 Zipkin 服務(wù)端,一個(gè)是 Zipkin 客戶端,客戶端也就是微服務(wù)的應(yīng)用。

客戶端會(huì)配置服務(wù)端的 URL 地址,一旦發(fā)生服務(wù)間的調(diào)用的時(shí)候,會(huì)被配置在微服務(wù)里面的 Sleuth 的監(jiān)聽器監(jiān)聽,并生成相應(yīng)的 Trace 和 Span 信息發(fā)送給服務(wù)端。發(fā)送的方式主要有兩種,一種是 HTTP 報(bào)文的方式,還有一種是消息總線的方式如 RabbitMQ。

不論哪種方式,我們都需要:

  • 一個(gè) Eureka 服務(wù)注冊(cè)中心,這里我們就用之前的eureka項(xiàng)目來(lái)當(dāng)注冊(cè)中心。
  • 一個(gè) Zipkin 服務(wù)端。
  • 兩個(gè)微服務(wù)應(yīng)用,trace-a和trace-b,其中trace-a中有一個(gè) REST 接口/trace-a,調(diào)用該接口后將觸發(fā)對(duì)trace-b應(yīng)用的調(diào)用。

方式一、HTTP

在 Spring Cloud Sleuth 中對(duì) Zipkin 的整合進(jìn)行了自動(dòng)化配置的封裝,所以我們可以很輕松的引入和使用它。

Zipkin 服務(wù)端

關(guān)于 Zipkin 的服務(wù)端,在使用 Spring Boot 2.x 版本后,官方就不推薦自行定制編譯了,反而是直接提供了編譯好的 jar 包來(lái)給我們使用,詳情請(qǐng)看 upgrade to Spring Boot 2.0 NoClassDefFoundError UndertowEmbeddedServletContainerFactory · Issue #1962 · openzipkin/zipkin · GitHub

并且以前的@EnableZipkinServer也已經(jīng)被打上了@Deprecated

If you decide to make a custom server, you accept responsibility for troubleshooting your build or configuration problems, even if such problems are a reaction to a change made by the OpenZipkin maintainers. In other words, custom servers are possible, but not supported.

EnableZipkinServer.javagithub.com/openzipkin/zipkin/blob/master/zipkin-server/src/main/java/zipkin/server/EnableZipkinServer.java

簡(jiǎn)而言之就是:私自改包,后果自負(fù)。

所以官方提供了一鍵腳本:

curl-sSLhttps://zipkin.io/quickstart.sh|bash-s
java-jarzipkin.jar

如果用 Docker 的話,直接

dockerrun-d-p9411:9411openzipkin/zipkin

任一方式啟動(dòng)后,訪問 http://localhost:9411/zipkin/ 就能看到如下界面,嗯還有漢化看起來(lái)不錯(cuò)。

2cd6d8a0-92e3-11ed-bfe3-dac502259ad0.jpg

至此服務(wù)端就 OK 了。

微服務(wù)應(yīng)用

創(chuàng)建兩個(gè)基本的 Spring Boot 工程,名字分別為 trace-a 和 trace-b。

兩個(gè)工程的 pom.xml 均引入以下依賴坐標(biāo):

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webfluxartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-sleuthartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-zipkinartifactId>
dependency>

兩者的配置文件也一樣(除了spring. application.name和server.port,自行修改)

spring:
application:
name:trace-a
sleuth:
web:
client:
enabled:true
sampler:
probability:1.0#將采樣比例設(shè)置為1.0,也就是全部都需要。默認(rèn)是0.1
zipkin:
base-url:http://localhost:9411/#指定了Zipkin服務(wù)器的地址
server:
port:8080
eureka:
client:
service-url:
defaultZone:http://localhost:7000/eureka/

Spring Cloud Sleuth 有一個(gè) Sampler 策略,可以通過這個(gè)實(shí)現(xiàn)類來(lái)控制采樣算法。采樣器不會(huì)阻礙 span 相關(guān) id 的產(chǎn)生,但是會(huì)對(duì)導(dǎo)出以及附加事件標(biāo)簽的相關(guān)操作造成影響。Sleuth 默認(rèn)采樣算法的實(shí)現(xiàn)是 Reservoir sampling,具體的實(shí)現(xiàn)類是 PercentageBasedSampler,默認(rèn)的采樣比例為: 0.1(即 10%)。不過我們可以通過 spring.sleuth.sampler.percentage 來(lái)設(shè)置,所設(shè)置的值介于 0.0 到 1.0 之間,1.0 則表示全部采集。

trace-a 工程的啟動(dòng)類如下:

@RestController
@SpringBootApplication
publicclassApplication{

publicstaticvoidmain(String[]args){
SpringApplication.run(Application.class,args);
}

@Autowired
privateLoadBalancerExchangeFilterFunctionlbFunction;

@Bean
publicWebClientwebClient(){
returnWebClient.builder().baseUrl("http://trace-b")
.filter(lbFunction)
.build();
}

@GetMapping("/trace-a")
publicMonotrace(){
System.out.println("===calltrace-a===");

returnwebClient().get()
.uri("/trace-b")
.retrieve()
.bodyToMono(String.class);
}

}

trace-b 工程的啟動(dòng)類如下:

@RestController
@SpringBootApplication
publicclassApplication{

publicstaticvoidmain(String[]args){
SpringApplication.run(Application.class,args);
}

@GetMapping("/trace-b")
publicMonotrace(){
System.out.println("===calltrace-b===");

returnMono.just("Trace");
}

}

至此,一切就緒。Spring 應(yīng)用在監(jiān)測(cè)到 classpath 中有 Sleuth 和 Zipkin 后,會(huì)自動(dòng)在 WebClient(或 RestTemplate)的調(diào)用過程中向 HTTP 請(qǐng)求注入追蹤信息,并向 Zipkin Server 發(fā)送這些信息。

進(jìn)行驗(yàn)證

我們分別啟動(dòng) eureka、zipkin、trace-b、trace-a,然后訪問 http://localhost:8080/trace-a 可以得到返回值 Trace,同時(shí)還能在它們的控制臺(tái)中分別獲得下面的輸出:

--trace-a
===calltrace-a===
2018-04-2320:20:42.016INFO[trace-a,,,]71722---[ender@761e788f}]s.c.a.AnnotationConfigApplicationContext:RefreshingSpringClientFactory-localhost:startupdate[MonApr2320:20:42CST2018];parent:org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@41ab013
2018-04-2320:20:42.103INFO[trace-a,,,]71722---[ender@761e788f}]f.a.AutowiredAnnotationBeanPostProcessor:JSR-330'javax.inject.Inject'annotationfoundandsupportedforautowiring
2018-04-2320:20:42.421INFO[trace-a,,,]71722---[ender@761e788f}]c.netflix.config.ChainedDynamicProperty:Flippingproperty:localhost.ribbon.ActiveConnectionsLimittouseNEXTproperty:niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit=2147483647
2018-04-2320:20:42.441INFO[trace-a,,,]71722---[ender@761e788f}]c.n.u.concurrent.ShutdownEnabledTimer:Shutdownhookinstalledfor:NFLoadBalancer-PingTimer-localhost
2018-04-2320:20:42.476INFO[trace-a,,,]71722---[ender@761e788f}]c.netflix.loadbalancer.BaseLoadBalancer:Client:localhostinstantiatedaLoadBalancer:DynamicServerListLoadBalancer:{NFLoadBalancer:name=localhost,currentlistofServers=[],Loadbalancerstats=Zonestats:{},Serverstats:[]}ServerList:null
2018-04-2320:20:42.485INFO[trace-a,,,]71722---[ender@761e788f}]c.n.l.DynamicServerListLoadBalancer:UsingserverListUpdaterPollingServerListUpdater
2018-04-2320:20:42.492INFO[trace-a,,,]71722---[ender@761e788f}]c.n.l.DynamicServerListLoadBalancer:DynamicServerListLoadBalancerforclientlocalhostinitialized:DynamicServerListLoadBalancer:{NFLoadBalancer:name=localhost,currentlistofServers=[],Loadbalancerstats=Zonestats:{},Serverstats:[]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@516a7895
2018-04-2320:20:42.548INFO[trace-a,d28b72b2317c023f,d28b72b2317c023f,true]71722---[ctor-http-nio-2]s.c.a.AnnotationConfigApplicationContext:RefreshingSpringClientFactory-trace-b:startupdate[MonApr2320:20:42CST2018];parent:org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@41ab013
2018-04-2320:20:42.617INFO[trace-a,d28b72b2317c023f,d28b72b2317c023f,true]71722---[ctor-http-nio-2]f.a.AutowiredAnnotationBeanPostProcessor:JSR-330'javax.inject.Inject'annotationfoundandsupportedforautowiring
2018-04-2320:20:42.855INFO[trace-a,d28b72b2317c023f,d28b72b2317c023f,true]71722---[ctor-http-nio-2]c.netflix.config.ChainedDynamicProperty:Flippingproperty:trace-b.ribbon.ActiveConnectionsLimittouseNEXTproperty:niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit=2147483647
2018-04-2320:20:42.868INFO[trace-a,d28b72b2317c023f,d28b72b2317c023f,true]71722---[ctor-http-nio-2]c.n.u.concurrent.ShutdownEnabledTimer:Shutdownhookinstalledfor:NFLoadBalancer-PingTimer-trace-b
2018-04-2320:20:42.869INFO[trace-a,d28b72b2317c023f,d28b72b2317c023f,true]71722---[ctor-http-nio-2]c.netflix.loadbalancer.BaseLoadBalancer:Client:trace-binstantiatedaLoadBalancer:DynamicServerListLoadBalancer:{NFLoadBalancer:name=trace-b,currentlistofServers=[],Loadbalancerstats=Zonestats:{},Serverstats:[]}ServerList:null
2018-04-2320:20:42.870INFO[trace-a,d28b72b2317c023f,d28b72b2317c023f,true]71722---[ctor-http-nio-2]c.n.l.DynamicServerListLoadBalancer:UsingserverListUpdaterPollingServerListUpdater
2018-04-2320:20:42.905INFO[trace-a,d28b72b2317c023f,d28b72b2317c023f,true]71722---[ctor-http-nio-2]c.netflix.config.ChainedDynamicProperty:Flippingproperty:trace-b.ribbon.ActiveConnectionsLimittouseNEXTproperty:niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit=2147483647
2018-04-2320:20:42.907INFO[trace-a,d28b72b2317c023f,d28b72b2317c023f,true]71722---[ctor-http-nio-2]c.n.l.DynamicServerListLoadBalancer:DynamicServerListLoadBalancerforclienttrace-binitialized:DynamicServerListLoadBalancer:{NFLoadBalancer:name=trace-b,currentlistofServers=[172.16.106.93:8081],Loadbalancerstats=Zonestats:{defaultzone=[Zone:defaultzone;Instancecount:1;Activeconnectionscount:0;Circuitbreakertrippedcount:0;Activeconnectionsperserver:0.0;]
},Serverstats:[[Server:172.16.106.93:8081;Zone:defaultZone;TotalRequests:0;Successiveconnectionfailure:0;Totalblackoutseconds:0;Lastconnectionmade:ThuJan0108:00:00CST1970;Firstconnectionmade:ThuJan0108:00:00CST1970;ActiveConnections:0;totalfailurecountinlast(1000)msecs:0;averageresptime:0.0;90percentileresptime:0.0;95percentileresptime:0.0;minresptime:0.0;maxresptime:0.0;stddevresptime:0.0]
]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@31f05c5
2018-04-2320:20:43.878INFO[trace-a,,,]71722---[erListUpdater-1]c.netflix.config.ChainedDynamicProperty:Flippingproperty:trace-b.ribbon.ActiveConnectionsLimittouseNEXTproperty:niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit=2147483647


--trace-b
===calltrace-b===
2018-04-2320:20:43.944INFO[trace-b,,,]71662---[ender@22a10ac6}]s.c.a.AnnotationConfigApplicationContext:RefreshingSpringClientFactory-localhost:startupdate[MonApr2320:20:43CST2018];parent:org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@49c6c24f
2018-04-2320:20:44.124INFO[trace-b,,,]71662---[ender@22a10ac6}]f.a.AutowiredAnnotationBeanPostProcessor:JSR-330'javax.inject.Inject'annotationfoundandsupportedforautowiring
2018-04-2320:20:44.524INFO[trace-b,,,]71662---[ender@22a10ac6}]c.netflix.config.ChainedDynamicProperty:Flippingproperty:localhost.ribbon.ActiveConnectionsLimittouseNEXTproperty:niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit=2147483647
2018-04-2320:20:44.550INFO[trace-b,,,]71662---[ender@22a10ac6}]c.n.u.concurrent.ShutdownEnabledTimer:Shutdownhookinstalledfor:NFLoadBalancer-PingTimer-localhost
2018-04-2320:20:44.600INFO[trace-b,,,]71662---[ender@22a10ac6}]c.netflix.loadbalancer.BaseLoadBalancer:Client:localhostinstantiatedaLoadBalancer:DynamicServerListLoadBalancer:{NFLoadBalancer:name=localhost,currentlistofServers=[],Loadbalancerstats=Zonestats:{},Serverstats:[]}ServerList:null
2018-04-2320:20:44.610INFO[trace-b,,,]71662---[ender@22a10ac6}]c.n.l.DynamicServerListLoadBalancer:UsingserverListUpdaterPollingServerListUpdater
2018-04-2320:20:44.617INFO[trace-b,,,]71662---[ender@22a10ac6}]c.n.l.DynamicServerListLoadBalancer:DynamicServerListLoadBalancerforclientlocalhostinitialized:DynamicServerListLoadBalancer:{NFLoadBalancer:name=localhost,currentlistofServers=[],Loadbalancerstats=Zonestats:{},Serverstats:[]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@1e1794d0

訪問 http://localhost:9411/zipkin

點(diǎn)擊 Find Traces 會(huì)看到有一條記錄:

2ce66284-92e3-11ed-bfe3-dac502259ad0.jpg

點(diǎn)擊記錄進(jìn)去頁(yè)面,可以看到每一個(gè)服務(wù)所耗費(fèi)的時(shí)間和順序:

2cf41924-92e3-11ed-bfe3-dac502259ad0.jpg

點(diǎn)擊依賴分析,可以看到項(xiàng)目之間的調(diào)用關(guān)系:

2d0a86aa-92e3-11ed-bfe3-dac502259ad0.jpg

方式二、消息總線 RabbitMQ

因?yàn)橹罢f(shuō)的 Zipkin 不再推薦我們來(lái)自定義 Server 端了,所以在最新版本的 Spring Cloud 依賴管理里已經(jīng)找不到 zipkin-server 了。

那么如果直接用官方提供的 jar 包怎么從 RabbitMQ 中獲取 trace 信息呢?

我們可以通過環(huán)境變量讓 Zipkin 從 RabbitMQ 中讀取信息,就像這樣:

RABBIT_ADDRESSES=localhostjava-jarzipkin.jar

可配置的環(huán)境變量如下表所示:

屬性 環(huán)境變量 描述
zipkin.collector.rabbitmq.concurrency RABBIT_CONCURRENCY 并發(fā)消費(fèi)者數(shù)量,默認(rèn)為1
zipkin.collector.rabbitmq.connection-timeout RABBIT_CONNECTION_TIMEOUT 建立連接時(shí)的超時(shí)時(shí)間,默認(rèn)為 60000毫秒,即 1 分鐘
zipkin.collector.rabbitmq.queue RABBIT_QUEUE 從中獲取 span 信息的隊(duì)列,默認(rèn)為 zipkin
zipkin.collector.rabbitmq.uri RABBIT_URI 符合RabbitMQ URI 規(guī)范 的 URI,例如amqp://user:pass@host:10000/vhost

如果設(shè)置了 URI,則以下屬性將被忽略。

屬性 環(huán)境變量 描述
zipkin.collector.rabbitmq.addresses RABBIT_ADDRESSES 用逗號(hào)分隔的 RabbitMQ 地址列表,例如localhost:5672,localhost:5673
zipkin.collector.rabbitmq.password RABBIT_PASSWORD 連接到 RabbitMQ 時(shí)使用的密碼,默認(rèn)為 guest
zipkin.collector.rabbitmq.username RABBIT_USER 連接到 RabbitMQ 時(shí)使用的用戶名,默認(rèn)為guest
zipkin.collector.rabbitmq.virtual-host RABBIT_VIRTUAL_HOST 使用的 RabbitMQ virtual host,默認(rèn)為 /
zipkin.collector.rabbitmq.use-ssl RABBIT_USE_SSL 設(shè)置為true則用 SSL 的方式與 RabbitMQ 建立鏈接

關(guān)于 Zipkin 的 Client 端,也就是微服務(wù)應(yīng)用,我們就在之前 trace-a、trace-b 的基礎(chǔ)上修改,只要在他們的依賴?yán)锒家?spring-cloud-stream-binder-rabbit 就好了,別的不用改。


org.springframework.cloud
spring-cloud-stream-binder-rabbit

不過為了說(shuō)明是通過 RabbitMQ 傳輸?shù)男畔?,我?spring.zipkin.base-url 均改為http://localhost:9412/,即指向一個(gè)錯(cuò)誤的地址。

分別重啟 trace-a、trace-b 工程,并啟動(dòng) Zipkin Server

RABBIT_ADDRESSES=localhostjava-jarzipkin.jar

然后訪問 http://localhost:8080/trace-a 并刷新 Zipkin UI,看到如下內(nèi)容,就說(shuō)明 Sleuth+Zipkin+RabbitMQ 整合成功了。

2d19db00-92e3-11ed-bfe3-dac502259ad0.jpg

此時(shí)看 RabbitMQ Admin,會(huì)看到多了一個(gè)名為 zipkin 的 Queue

2d25b18c-92e3-11ed-bfe3-dac502259ad0.jpg

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 分布式
    +關(guān)注

    關(guān)注

    1

    文章

    1086

    瀏覽量

    76564
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    341

    瀏覽量

    15915

原文標(biāo)題:分布式鏈路跟蹤 Sleuth 與 Zipkin

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    分布式能源管理物聯(lián)網(wǎng)解決方案

    ,構(gòu)建全能源數(shù)據(jù)采集與管控體系,實(shí)現(xiàn)分布式能源的精細(xì)化管理與智能化運(yùn)維。 方案架構(gòu) 終端設(shè)備層:現(xiàn)場(chǎng)設(shè)備包括光伏逆變器、智能電表、電池管理系統(tǒng)(BMS)等各類能源設(shè)備,支持IEC61850、IEC101/103/104、DL
    的頭像 發(fā)表于 01-21 11:39 ?295次閱讀
    <b class='flag-5'>分布式</b>能源管理物聯(lián)網(wǎng)解決方案

    科普|厘米級(jí) vs 米級(jí)分布式光纖測(cè)溫系統(tǒng)的精度與技術(shù)差異解析

    從米級(jí)到厘米級(jí),分布式光纖測(cè)溫系統(tǒng)的突破并非 “單一技術(shù)升級(jí)”,而是 “光源、脈沖、探測(cè)、算法” 全的協(xié)同創(chuàng)新 —— 通過窄線寬光源解決 “信號(hào)模糊”,脈沖壓縮解決 “距離 - 精度矛盾”,相干探測(cè)解決 “定位維度不足”,最
    的頭像 發(fā)表于 11-19 14:40 ?1187次閱讀
    科普|厘米級(jí) vs 米級(jí)<b class='flag-5'>分布式</b>光纖測(cè)溫系統(tǒng)的精度與技術(shù)差異解析

    如何解決分布式光伏計(jì)量難題?

    分布式光伏成增長(zhǎng)主力 據(jù)《2025-2030年中國(guó)分布式光伏行業(yè)市場(chǎng)前景預(yù)測(cè)及未來(lái)發(fā)展趨勢(shì)研究報(bào)告》顯示,2024年中國(guó)分布式光伏新增裝機(jī)118.18GW,同比增長(zhǎng)23%,占光伏新增裝機(jī)總量的43
    的頭像 發(fā)表于 11-07 14:55 ?297次閱讀
    如何解決<b class='flag-5'>分布式</b>光伏計(jì)量難題?

    分布式光伏環(huán)境監(jiān)測(cè)站的技術(shù)架構(gòu)與應(yīng)用實(shí)踐

    分布式光伏環(huán)境監(jiān)測(cè)站的技術(shù)架構(gòu)與應(yīng)用實(shí)踐 柏峰【BF-GFQX】一、系統(tǒng)技術(shù)架構(gòu)解析 分布式光伏環(huán)境監(jiān)測(cè)站采用“感知層-傳輸層-應(yīng)用層”三層架構(gòu)設(shè)計(jì),實(shí)現(xiàn)環(huán)境數(shù)據(jù)的全智能化處理。
    的頭像 發(fā)表于 10-13 10:05 ?555次閱讀
    <b class='flag-5'>分布式</b>光伏環(huán)境監(jiān)測(cè)站的技術(shù)架構(gòu)與應(yīng)用實(shí)踐

    【節(jié)能學(xué)院】Acrel-1000DP分布式光伏監(jiān)控系統(tǒng)在奉賢平高食品 4.4MW 分布式光伏中應(yīng)用

    摘要:在“雙碳”和新型電力系統(tǒng)建設(shè)背景下,分布式光伏接入比例不斷提高,對(duì)配電網(wǎng)電壓、調(diào)度運(yùn)行及調(diào)峰等環(huán)節(jié)造成強(qiáng)烈沖擊。本文設(shè)計(jì)包含平臺(tái)層、設(shè)備層二層架構(gòu)體系的分布式光伏管控平臺(tái),以及小容量工商業(yè)
    的頭像 發(fā)表于 08-23 08:04 ?3468次閱讀
    【節(jié)能學(xué)院】Acrel-1000DP<b class='flag-5'>分布式</b>光伏監(jiān)控系統(tǒng)在奉賢平高食品 4.4MW <b class='flag-5'>分布式</b>光伏中應(yīng)用

    分布式光伏發(fā)電監(jiān)測(cè)系統(tǒng)技術(shù)方案

    分布式光伏發(fā)電監(jiān)測(cè)系統(tǒng)技術(shù)方案 柏峰【BF-GFQX】一、系統(tǒng)目標(biāo) :分布式光伏發(fā)電監(jiān)測(cè)系統(tǒng)旨在通過智能化的監(jiān)測(cè)手段,實(shí)現(xiàn)對(duì)分布式光伏電站的全方位、高精度、實(shí)時(shí)化管理。該系統(tǒng)能
    的頭像 發(fā)表于 08-22 10:51 ?3163次閱讀
    <b class='flag-5'>分布式</b>光伏發(fā)電監(jiān)測(cè)系統(tǒng)技術(shù)方案

    怎樣確定分布式光伏集群通信網(wǎng)絡(luò)的負(fù)載均衡策略?

    ,具體步驟如下: 1. 明確負(fù)載均衡目標(biāo) 根據(jù)分布式光伏集群的核心需求,定義負(fù)載均衡的關(guān)鍵目標(biāo),例如: 避免單點(diǎn)(如匯聚節(jié)點(diǎn)、通信網(wǎng)關(guān))過載,確保數(shù)據(jù)傳輸延遲≤100ms; 均衡各通信的帶寬占用率(目標(biāo):?jiǎn)?/div>
    的頭像 發(fā)表于 08-22 10:10 ?542次閱讀
    怎樣確定<b class='flag-5'>分布式</b>光伏集群通信網(wǎng)絡(luò)的負(fù)載均衡策略?

    分布式光伏總出問題?安科瑞分布式光伏監(jiān)控系統(tǒng)來(lái)“救場(chǎng)”

    一、分布式光伏的痛點(diǎn)大揭秘 在 “雙碳” 目標(biāo)的大力推動(dòng)下,分布式光伏作為綠色能源領(lǐng)域的重要力量,正以前所未有的速度蓬勃發(fā)展,越來(lái)越多的企業(yè)和家庭選擇安裝分布式光伏系統(tǒng)。然而,隨著分布式
    的頭像 發(fā)表于 07-16 16:50 ?805次閱讀
    <b class='flag-5'>分布式</b>光伏總出問題?安科瑞<b class='flag-5'>分布式</b>光伏監(jiān)控系統(tǒng)來(lái)“救場(chǎng)”

    雙電機(jī)分布式驅(qū)動(dòng)汽車高速穩(wěn)定性機(jī)電耦合控制

    摘要:為了利用所設(shè)計(jì)的雙電機(jī)防滑差速驅(qū)動(dòng)系統(tǒng)來(lái)提高分布式驅(qū)動(dòng)汽車的動(dòng)力學(xué)性能,在前期同軸耦合驅(qū)動(dòng)控制理論研究的基礎(chǔ)上,開展該車的高速穩(wěn)定性機(jī)電耦合控制研究。建立并驗(yàn)證包含所設(shè)計(jì)驅(qū)動(dòng)系統(tǒng)在內(nèi)的分布式
    發(fā)表于 06-18 16:37

    曙光存儲(chǔ)領(lǐng)跑中國(guó)分布式存儲(chǔ)市場(chǎng)

    近日,賽迪顧問發(fā)布《中國(guó)分布式存儲(chǔ)市場(chǎng)研究報(bào)告(2025)》,指出2024 年中國(guó)分布式存儲(chǔ)市場(chǎng)首次超過集中式存儲(chǔ),規(guī)模達(dá) 198.2 億元,增速 43.7%。
    的頭像 發(fā)表于 05-19 16:50 ?1221次閱讀

    OLI-P——分布式偏振串?dāng)_測(cè)量利器

    在保偏光纖系統(tǒng)中,偏振串?dāng)_是導(dǎo)致性能劣化的核心因素之一。傳統(tǒng)偏振檢測(cè)手段僅能獲得整體消光比,而分布式偏振串?dāng)_測(cè)量通過連續(xù)、高精度地捕捉整條光纖
    的頭像 發(fā)表于 05-15 17:37 ?680次閱讀
    OLI-P——<b class='flag-5'>分布式</b>偏振串?dāng)_測(cè)量利器

    分布式光伏電力問題層出不窮?安科瑞分布式光伏運(yùn)維系統(tǒng)來(lái)“救場(chǎng)”

    一、分布式光伏電力運(yùn)維,痛點(diǎn)大揭秘? ? 分布式光伏作為實(shí)現(xiàn)綠色能源轉(zhuǎn)型的關(guān)鍵一環(huán),近年來(lái)在我國(guó)得到了迅猛發(fā)展。國(guó)家能源局?jǐn)?shù)據(jù)顯示,截至 2023 年底,中國(guó)分布式光伏電站累計(jì)并網(wǎng)容量約為 2.5
    的頭像 發(fā)表于 05-07 17:14 ?943次閱讀
    <b class='flag-5'>分布式</b>光伏電力問題層出不窮?安科瑞<b class='flag-5'>分布式</b>光伏運(yùn)維系統(tǒng)來(lái)“救場(chǎng)”

    使用VirtualLab Fusion中分布式計(jì)算的AR波導(dǎo)測(cè)試圖像模擬

    總計(jì)算時(shí)間超過31小時(shí)。通過使用一個(gè)由8個(gè)多核PC組成的網(wǎng)絡(luò),提供35個(gè)客戶端分布式計(jì)算,將模擬時(shí)間減少到1小時(shí)5分鐘?;灸M任務(wù)基本任務(wù)集合:FOV使用分布式計(jì)算的集合模擬概述模擬時(shí)間節(jié)省96%的計(jì)算時(shí)間?。。?
    發(fā)表于 04-10 08:48

    分布式光伏發(fā)運(yùn)維系統(tǒng)實(shí)際應(yīng)用案例分享

    安科瑞劉鴻鵬 摘?要 分布式光伏發(fā)電系統(tǒng)其核心特點(diǎn)是發(fā)電設(shè)備靠近用電負(fù)荷中心,通常安裝在屋頂、建筑立面或閑置空地上,截至2025年,分布式光伏發(fā)電系統(tǒng)在全球和中國(guó)范圍內(nèi)取得了顯著發(fā)展,成為能源轉(zhuǎn)型
    的頭像 發(fā)表于 04-09 14:46 ?1229次閱讀
    <b class='flag-5'>分布式</b>光伏發(fā)運(yùn)維系統(tǒng)實(shí)際應(yīng)用案例分享

    分布式光伏如何實(shí)現(xiàn)防逆流?

    分布式光伏如何實(shí)現(xiàn)防逆流
    的頭像 發(fā)表于 03-24 13:31 ?787次閱讀
    <b class='flag-5'>分布式</b>光伏如何實(shí)現(xiàn)防逆流?