SpringCloud Sleuth 分散式請求鏈路跟蹤
概述
為什麼會出現這個技術?需要解決哪些問題?
在微服務框架中,一個由客戶端發起的請求在後端系統中會經過多個不同的的服務節點呼叫來協同產生最後的請求結果,每一個前段請求都會形成一條複雜的分散式服務呼叫鏈路,鏈路中的任何一環出現高延時或錯誤都會引起整個請求最後的失敗
Spring Cloud Sleuth提供了一套完整的服務跟蹤的解決方案,在分散式系統中提供追蹤解決方案並且相容支援了zipkin
官方地址:https://spring.io/projects/spring-cloud-sleuth
搭建鏈路監控
zipkin
在 SpringCloud F版後,不需要再建立Zipkin Server了,只需要呼叫 jar 包就行了
下載地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
執行 jar 包
$ java -jar zipkin-server-2.12.9-exec.jar
執行控制檯
地址:http://localhost:9411/zipkin/
一條鏈路通過 Trace Id 唯一標識,Span 標識發起的請求資訊,各 Span 通過 parent id 關聯起來
Trace:類似於樹結構的Span集合,表示一條呼叫鏈路,存在唯一標識
span:表示呼叫鏈路來源,通俗的理解span就是一次請求資訊
提供者
- 新增 pom 依賴
<!-- spring-cloud-starter-zipkin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
- 修改 yml 配置
spring:
application:
name: provider-payment-service
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
# 取樣率值介於到1之間,1則表示全部採集
probability: 1
- 業務類測試
@RestController
public class PaymentController {
@GetMapping("/payment/zipkin")
public String paymentZipkin(){
return "鏈路測試";
}
}
消費者
- 新增 pom 依賴
<!-- spring-cloud-starter-zipkin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
- 修改 yml 配置
spring:
application:
name: consumer-payment-service
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
# 取樣率值介於到1之間,1則表示全部採集
probability: 1
- 業務類測試
@RestController
@Slf4j
public class OrderController {
public final static String PAYMENT_URL = "http://PROVIDER-PAYMENT-SERVICE";
@Resource
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/zipkin")
public String paymentZipkin(){
String result = restTemplate.getForObject(PAYMENT_URL + "/payment/zipkin",String.class);
return result;
}
}
開啟 zipkin 監控臺,就可以選擇服務,進行查詢