天天看點

SpringCloud(八)Sleuth 分布式請求鍊路跟蹤

SpringCloud(八)Sleuth 分布式請求鍊路跟蹤

SpringCloud Sleuth 分布式請求鍊路跟蹤

概述

為什麼會出現這個技術?需要解決哪些問題?

在微服務架構中,一個由用戶端發起的請求在後端系統中會經過多個不同的的服務節點調用來協同産生最後的請求結果,每一個前段請求都會形成一條複雜的分布式服務調用鍊路,鍊路中的任何一環出現高延時或錯誤都會引起整個請求最後的失敗

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/

SpringCloud(八)Sleuth 分布式請求鍊路跟蹤

運作 jar 包

$ java -jar zipkin-server-2.12.9-exec.jar
           
SpringCloud(八)Sleuth 分布式請求鍊路跟蹤

運作控制台

位址:http://localhost:9411/zipkin/

SpringCloud(八)Sleuth 分布式請求鍊路跟蹤

一條鍊路通過 Trace Id 唯一辨別,Span 辨別發起的請求資訊,各 Span 通過 parent id 關聯起來

SpringCloud(八)Sleuth 分布式請求鍊路跟蹤

Trace:類似于樹結構的Span集合,表示一條調用鍊路,存在唯一辨別

span:表示調用鍊路來源,通俗的了解span就是一次請求資訊

提供者

  1. 添加 pom 依賴
<!-- spring-cloud-starter-zipkin -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
           
  1. 修改 yml 配置
spring:
  application:
    name: provider-payment-service
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      # 采樣率值介于到1之間,1則表示全部采集
      probability: 1
           
  1. 業務類測試
@RestController
public class PaymentController {

    @GetMapping("/payment/zipkin")
    public String paymentZipkin(){
        return "鍊路測試";
    }
}
           

消費者

  1. 添加 pom 依賴
<!-- spring-cloud-starter-zipkin -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
           
  1. 修改 yml 配置
spring:
  application:
    name: consumer-payment-service
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      # 采樣率值介于到1之間,1則表示全部采集
      probability: 1
           
  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 監控台,就可以選擇服務,進行查找

SpringCloud(八)Sleuth 分布式請求鍊路跟蹤
SpringCloud(八)Sleuth 分布式請求鍊路跟蹤