SpringCloud 商城系統搭建之Sleuth

在奮鬥的大道發表於2020-12-18

前提

本文是基於SpringCloud 商城系統搭建之eureka 

SpringCloud Sleuth 簡介

Spring Cloud Sleuth為Spring Cloud實現了分散式跟蹤解決方案。

Spring Cloud Sleuth借鑑了Dapper的術語。

Span:基本的工作單元。Span包括一個64位的唯一ID,一個64位trace碼,描述資訊,時間戳事件,key-value 註解(tags),span處理者的ID(通常為IP)。

Trace:一組Span形成的樹形結構。

Annotation:用於及時記錄存在的事件。常用的Annotation如下:

  • cs:客戶端傳送(client send) 客戶端發起一個請求,表示span開始
  • sr:伺服器接收(server received) 伺服器接收到客戶端的請求並開始處理,sr - cs 的時間為網路延遲
  • ss:伺服器傳送(server send) 伺服器處理完請求準備返回資料給客戶端。ss - sr 的時間表示伺服器端處理請求花費的時間
  • cr:客戶端接收(client received) 客戶端接收到處理結果,表示span結束。 cr - cs 的時間表示客戶端接收服務端資料的時間

Sleuth 整合

按照下面步驟改造之前的專案supermarker-provider

1、在pom.xml 檔案中,新增Spring Cloud Sleuth 的jar 包依賴

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

2、application.properties 新增日誌檔案輸出,方便查詢資訊追蹤

# 日誌記錄輸出
logging.level.root=Info
logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG

3、分散式鏈路資訊追蹤:分別啟動:supermarker-eureka、supermarker-provider、supermarker-consume,瀏覽器訪問:http://localhost:8083/user?id=2

重點檢視supermarker-provider 生成的請求鏈路資訊:

2020-12-18 02:12:41.048 DEBUG [provider,140c59722f545377,140c59722f545377,false] 7264 --- [nio-8082-exec-4] o.s.web.servlet.DispatcherServlet        : GET "/user?id=1", parameters={masked}
---------------provider埠被呼叫--------------8082
2020-12-18 02:12:41.357  INFO [provider,140c59722f545377,140c59722f545377,false] 7264 --- [nio-8082-exec-4] o.h.h.i.QueryTranslatorFactoryInitiator  : HHH000397: Using ASTQueryTranslatorFactory
Hibernate: select user0_.use_id as use_id1_0_, user0_.create_time as create_t2_0_, user0_.modify_time as modify_t3_0_, user0_.use_age as use_age4_0_, user0_.use_email as use_emai5_0_, user0_.use_id_no as use_id_n6_0_, user0_.use_name as use_name7_0_, user0_.use_phone_num as use_phon8_0_, user0_.use_sex as use_sex9_0_, user0_.use_state as use_sta10_0_ from user user0_ where user0_.use_id=1
2020-12-18 02:12:41.836 DEBUG [provider,140c59722f545377,140c59722f545377,false] 7264 --- [nio-8082-exec-4] o.s.web.servlet.DispatcherServlet        : Completed 200 OK
2020-12-18 02:12:43.799  INFO [provider,,,] 7264 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_PROVIDER/provider1 - Re-registering apps/PROVIDER
2020-12-18 02:12:43.799  INFO [provider,,,] 7264 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_PROVIDER/provider1: registering service...
2020-12-18 02:12:43.813  INFO [provider,,,] 7264 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_PROVIDER/provider1 - registration status: 204
2020-12-18 02:12:48.385 DEBUG [provider,ff83f1addcfe58f1,ff83f1addcfe58f1,false] 7264 --- [nio-8082-exec-7] o.s.web.servlet.DispatcherServlet        : GET "/user?id=1", parameters={masked}

其中:140c59722f545377 是traceID, 140c59722f545377 是spanID .

如果想仔細檢視鏈路生成具體資訊,可以將日誌輸出調整如下:

logging.level.root=Info
logging.level.org.springframework.cloud.sleuth=DEBUG

 

相關文章