微服務鏈路追蹤Spring Cloud Sleuth整合Zipkin解析
前言
如果在開發(fā)過程中,你還在靠查看服務器日志來尋找服務與服務之間的報錯信息,那么這篇一定要來看下,通常在我們開發(fā)環(huán)境自測的時候,我們會將代碼發(fā)布到開發(fā)環(huán)境,然后無論是通過postMan請求,還是通過頁面請求,遇到報錯的信息,我們都會去服務器上去看時實的日志,來尋找報錯信息;
如果涉及到多個服務調用,這個時候會登陸多個服務器去查看服務的報錯信息,這僅僅是在我們開發(fā)環(huán)境自測的時候我們會去這么操作;如果是在生產(chǎn)環(huán)境,還依靠這種方式,那么多少就會顯得比較low了,這時候我們就要快速的定位到故障服務,就要引入“服務調用鏈路”的概念。
何為調用鏈路
一個大型分布式微服務系統(tǒng)往往由若干個微服務組成,這些微服務部署在若干個服務器上,為了實現(xiàn)高可用還會采取集群的方式,若干個服務相互調用就形成了調用鏈網(wǎng)絡。

服務之間的調用出現(xiàn)異常、超時、宕機,某一個服務出現(xiàn)這樣的情況,都會導致整個調用鏈路出現(xiàn)問題, 在出現(xiàn)這樣問題的時候就要及時的解決,來避免整個業(yè)務系統(tǒng)的不可用,這個時候就必須快速定位問題。
Zipkin + Sleuth
作為為微服務提供調用鏈路支持的其實有很多組件,包括SkyWalking、CAT、Pinpoint、Zipkin + Sleuth,這些組件的實現(xiàn)方式、接入方式、顆粒度、traceid查詢等方面可能有不同,但是最終目的其實都一樣,就是把請求的鏈路記錄下來供開發(fā)人員排錯參考,這里我因為我項目使用的是Spring Cloud,協(xié)議也是使用的http,所選擇的是 Spring Cloud Sleuth更加匹配項目,集成也相對容易。
Zipkin
Zipkin分布式追蹤系統(tǒng),簡單的說在一個西瓜攤,里面的瓜有大有小、有熟有生、有好有壞,所有的瓜都混雜在一起,我們很難去找到比較合適的瓜買走, Zipkin所做的就是追蹤分析,找到好的瓜,然后將壞的瓜賣不出去的瓜進行剔除。
這離涉及到幾個概念,也是鏈路追蹤的核心。
- Traceld:用來標記服務調用鏈的標記,包括所有在請求鏈中的服務,都使用的一個鏈路追蹤ID
- SpanId:區(qū)域ID,調用鏈中某個服務的專屬ID,無論是調用者和被調用者都會產(chǎn)生自己的SpanId
- ParentId:父級ID,調用者的生成的SpanId,在去請求下游服務,SpanId會成為下游服務的ParentId,用來標記上下游的關系。

Spring Cloud Sleuth
可以理解為基于Zipkin的一個封裝,sleuth可以記錄調用的情況,而Zipkin可以收集這些調用信息。
Zipkin啟動
下面基于Spring Cloud Sleuth整合Zipkin
docker run zipkin:
docker run -d -p 9411:9411 openzipkin/zipkin
Zipkin 啟動完成

引入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
# 設置 Sleuth 收集信息的百分比
zipkin:
sender:
type: web
base-url: http://127.0.0.1:9411/
?? zipkin:sender:type: web (這里type類型可以支持多種,web、kafka、rabbit、activemq都可以支持),這里只做web類型的演示。
服務調用測試
System2 服務提供feig接口,供system服務調用
@FeignClient(contextId = "iTestServiceClient", value = "Lxlxxx-system2", fallbackFactory = TestServiceFallbackFactory.class)
public interface ITestServiceClient {
/**
* 服務調用測試方法
* @return
*/
@GetMapping("/test/method")
public String testRequestMethod();
}
system服務調System2的feign接口
@RestController
@Slf4j
public class TestController {
@Autowired
private ITestServiceClient iTestServiceClient;
@GetMapping("/testMethod")
public void testMethod(){
log.info("通過feign調用system2服務~~~~~~~~~");
iTestServiceClient.testRequestMethod();
}
}
我這邊注冊了兩個服務 分別是Lxlxxx-system 和 Lxlxxx-system2分服務

Zipkin查看調用情況


總結
由上面可見,可以很清楚的看出微服務之間的調用情況,當然這些調用的日志也是可以通過ES進行持久化的,這樣可以保證Zipkin重啟后,鏈路信息不會丟失,這里就不做展示了,有興趣的朋友也可以將ES集成進去。
當然,Spring Cloud Sleuth 結合 Zipkin不光可以對微服務進行追蹤,如果請求量較大也可以集成消息中間件,Sleuth將日志推給MQ,然后Zipkin去MQ隊列獲取服務調用日志,可以調用鏈在我們對服務監(jiān)控、排查問題,起到了至關重要的作用。
以上就是微服務鏈路追蹤Spring Cloud Sleuth整合Zipkin解析的詳細內容,更多關于Spring Cloud Sleuth整合Zipkin的資料請關注腳本之家其它相關文章!
相關文章
微服務mybatis?typehandler使用詳解(就這一篇夠了)
TypeHandler是MyBatis框架的核心組件,實現(xiàn)數(shù)據(jù)庫表字段類型和Java?數(shù)據(jù)類型之間的相互轉換,本文介紹通過實例代碼mybatis?typehandler使用,感興趣的朋友一起看看吧2024-02-02
如何使用Jenkins編譯并打包SpringCloud微服務目錄
這篇文章主要介紹了如何使用Jenkins編譯并打包SpringCloud微服務目錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-11-11
Springboot項目打包如何將依賴的jar包輸出到指定目錄
公司要對springboot項目依賴的jar包進行升級,但是遇到一個問題,項目打包之后,沒辦法看到他里面依賴的jar包,版本到底是不是升上去了,沒辦法看到,下面通過本文給大家分享Springboot項目打包如何將依賴的jar包輸出到指定目錄,感興趣的朋友一起看看吧2024-05-05
SpringCloud創(chuàng)建多模塊項目的實現(xiàn)示例
,Spring Cloud作為一個強大的微服務框架,提供了豐富的功能和組件,本文主要介紹了SpringCloud創(chuàng)建多模塊項目的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2024-02-02
淺析Java中Apache BeanUtils和Spring BeanUtils的用法
這篇文章主要介紹了Java中Apache BeanUtils和Spring BeanUtils的用法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-11-11
java實現(xiàn)仿windows 字體設置選項卡實例
本篇文章介紹了java仿windows 字體設置選項卡,可實現(xiàn)類似windows字體設置效果,需要的朋友可以參考下。2016-10-10

