微服務(wù)鏈路追蹤Spring Cloud Sleuth整合Zipkin解析
前言
如果在開(kāi)發(fā)過(guò)程中,你還在靠查看服務(wù)器日志來(lái)尋找服務(wù)與服務(wù)之間的報(bào)錯(cuò)信息,那么這篇一定要來(lái)看下,通常在我們開(kāi)發(fā)環(huán)境自測(cè)的時(shí)候,我們會(huì)將代碼發(fā)布到開(kāi)發(fā)環(huán)境,然后無(wú)論是通過(guò)postMan請(qǐng)求,還是通過(guò)頁(yè)面請(qǐng)求,遇到報(bào)錯(cuò)的信息,我們都會(huì)去服務(wù)器上去看時(shí)實(shí)的日志,來(lái)尋找報(bào)錯(cuò)信息;
如果涉及到多個(gè)服務(wù)調(diào)用,這個(gè)時(shí)候會(huì)登陸多個(gè)服務(wù)器去查看服務(wù)的報(bào)錯(cuò)信息,這僅僅是在我們開(kāi)發(fā)環(huán)境自測(cè)的時(shí)候我們會(huì)去這么操作;如果是在生產(chǎn)環(huán)境,還依靠這種方式,那么多少就會(huì)顯得比較low了,這時(shí)候我們就要快速的定位到故障服務(wù),就要引入“服務(wù)調(diào)用鏈路”的概念。
何為調(diào)用鏈路
一個(gè)大型分布式微服務(wù)系統(tǒng)往往由若干個(gè)微服務(wù)組成,這些微服務(wù)部署在若干個(gè)服務(wù)器上,為了實(shí)現(xiàn)高可用還會(huì)采取集群的方式,若干個(gè)服務(wù)相互調(diào)用就形成了調(diào)用鏈網(wǎng)絡(luò)。
服務(wù)之間的調(diào)用出現(xiàn)異常、超時(shí)、宕機(jī),某一個(gè)服務(wù)出現(xiàn)這樣的情況,都會(huì)導(dǎo)致整個(gè)調(diào)用鏈路出現(xiàn)問(wèn)題, 在出現(xiàn)這樣問(wèn)題的時(shí)候就要及時(shí)的解決,來(lái)避免整個(gè)業(yè)務(wù)系統(tǒng)的不可用,這個(gè)時(shí)候就必須快速定位問(wèn)題。
Zipkin + Sleuth
作為為微服務(wù)提供調(diào)用鏈路支持的其實(shí)有很多組件,包括SkyWalking、CAT、Pinpoint、Zipkin + Sleuth,這些組件的實(shí)現(xiàn)方式、接入方式、顆粒度、traceid查詢等方面可能有不同,但是最終目的其實(shí)都一樣,就是把請(qǐng)求的鏈路記錄下來(lái)供開(kāi)發(fā)人員排錯(cuò)參考,這里我因?yàn)槲翼?xiàng)目使用的是Spring Cloud,協(xié)議也是使用的http,所選擇的是 Spring Cloud Sleuth更加匹配項(xiàng)目,集成也相對(duì)容易。
Zipkin
Zipkin分布式追蹤系統(tǒng),簡(jiǎn)單的說(shuō)在一個(gè)西瓜攤,里面的瓜有大有小、有熟有生、有好有壞,所有的瓜都混雜在一起,我們很難去找到比較合適的瓜買走, Zipkin所做的就是追蹤分析,找到好的瓜,然后將壞的瓜賣不出去的瓜進(jìn)行剔除。
這離涉及到幾個(gè)概念,也是鏈路追蹤的核心。
- Traceld:用來(lái)標(biāo)記服務(wù)調(diào)用鏈的標(biāo)記,包括所有在請(qǐng)求鏈中的服務(wù),都使用的一個(gè)鏈路追蹤ID
- SpanId:區(qū)域ID,調(diào)用鏈中某個(gè)服務(wù)的專屬ID,無(wú)論是調(diào)用者和被調(diào)用者都會(huì)產(chǎn)生自己的SpanId
- ParentId:父級(jí)ID,調(diào)用者的生成的SpanId,在去請(qǐng)求下游服務(wù),SpanId會(huì)成為下游服務(wù)的ParentId,用來(lái)標(biāo)記上下游的關(guān)系。
Spring Cloud Sleuth
可以理解為基于Zipkin的一個(gè)封裝,sleuth可以記錄調(diào)用的情況,而Zipkin可以收集這些調(diào)用信息。
Zipkin啟動(dòng)
下面基于Spring Cloud Sleuth整合Zipkin
docker run zipkin:
docker run -d -p 9411:9411 openzipkin/zipkin
Zipkin 啟動(dòng)完成
引入jar
使用的框架版本 spring-cloud.version:Hoxton.SR4 spring-boot.version:2.2.6.RELEASE
<!-- sleuth jar --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <!-- zipkin jar --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-zipkin</artifactId> </dependency>
引入sleuth和zipkin,nacos配置
sleuth: enabled: true sampler: rate: 100 # 設(shè)置 Sleuth 收集信息的百分比 zipkin: sender: type: web base-url: http://127.0.0.1:9411/
?? zipkin:sender:type: web (這里type類型可以支持多種,web、kafka、rabbit、activemq都可以支持),這里只做web類型的演示。
服務(wù)調(diào)用測(cè)試
System2 服務(wù)提供feig接口,供system服務(wù)調(diào)用
@FeignClient(contextId = "iTestServiceClient", value = "Lxlxxx-system2", fallbackFactory = TestServiceFallbackFactory.class) public interface ITestServiceClient { /** * 服務(wù)調(diào)用測(cè)試方法 * @return */ @GetMapping("/test/method") public String testRequestMethod(); }
system服務(wù)調(diào)System2的feign接口
@RestController @Slf4j public class TestController { @Autowired private ITestServiceClient iTestServiceClient; @GetMapping("/testMethod") public void testMethod(){ log.info("通過(guò)feign調(diào)用system2服務(wù)~~~~~~~~~"); iTestServiceClient.testRequestMethod(); } }
我這邊注冊(cè)了兩個(gè)服務(wù) 分別是Lxlxxx-system 和 Lxlxxx-system2分服務(wù)
Zipkin查看調(diào)用情況
總結(jié)
由上面可見(jiàn),可以很清楚的看出微服務(wù)之間的調(diào)用情況,當(dāng)然這些調(diào)用的日志也是可以通過(guò)ES進(jìn)行持久化的,這樣可以保證Zipkin重啟后,鏈路信息不會(huì)丟失,這里就不做展示了,有興趣的朋友也可以將ES集成進(jìn)去。
當(dāng)然,Spring Cloud Sleuth 結(jié)合 Zipkin不光可以對(duì)微服務(wù)進(jìn)行追蹤,如果請(qǐng)求量較大也可以集成消息中間件,Sleuth將日志推給MQ,然后Zipkin去MQ隊(duì)列獲取服務(wù)調(diào)用日志,可以調(diào)用鏈在我們對(duì)服務(wù)監(jiān)控、排查問(wèn)題,起到了至關(guān)重要的作用。
以上就是微服務(wù)鏈路追蹤Spring Cloud Sleuth整合Zipkin解析的詳細(xì)內(nèi)容,更多關(guān)于Spring Cloud Sleuth整合Zipkin的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
微服務(wù)mybatis?typehandler使用詳解(就這一篇夠了)
TypeHandler是MyBatis框架的核心組件,實(shí)現(xiàn)數(shù)據(jù)庫(kù)表字段類型和Java?數(shù)據(jù)類型之間的相互轉(zhuǎn)換,本文介紹通過(guò)實(shí)例代碼mybatis?typehandler使用,感興趣的朋友一起看看吧2024-02-02如何使用Jenkins編譯并打包SpringCloud微服務(wù)目錄
這篇文章主要介紹了如何使用Jenkins編譯并打包SpringCloud微服務(wù)目錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Springboot項(xiàng)目打包如何將依賴的jar包輸出到指定目錄
公司要對(duì)springboot項(xiàng)目依賴的jar包進(jìn)行升級(jí),但是遇到一個(gè)問(wèn)題,項(xiàng)目打包之后,沒(méi)辦法看到他里面依賴的jar包,版本到底是不是升上去了,沒(méi)辦法看到,下面通過(guò)本文給大家分享Springboot項(xiàng)目打包如何將依賴的jar包輸出到指定目錄,感興趣的朋友一起看看吧2024-05-05SpringCloud創(chuàng)建多模塊項(xiàng)目的實(shí)現(xiàn)示例
,Spring Cloud作為一個(gè)強(qiáng)大的微服務(wù)框架,提供了豐富的功能和組件,本文主要介紹了SpringCloud創(chuàng)建多模塊項(xiàng)目的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02淺析Java中Apache BeanUtils和Spring BeanUtils的用法
這篇文章主要介紹了Java中Apache BeanUtils和Spring BeanUtils的用法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11使用OpenFeign實(shí)現(xiàn)服務(wù)調(diào)用的方法詳解
OpenFeign是運(yùn)行在客戶端的聲明式服務(wù)調(diào)用的框架,通過(guò)聲明接口的方式來(lái)達(dá)到對(duì)服務(wù)的調(diào)用,本文就來(lái)和大家講講如何使用OpenFeign實(shí)現(xiàn)服務(wù)調(diào)用吧2023-06-06java實(shí)現(xiàn)仿windows 字體設(shè)置選項(xiàng)卡實(shí)例
本篇文章介紹了java仿windows 字體設(shè)置選項(xiàng)卡,可實(shí)現(xiàn)類似windows字體設(shè)置效果,需要的朋友可以參考下。2016-10-10