1. 程式人生 > >Spring系列學習之Spring Cloud Sleuth分散式跟蹤解決方案

Spring系列學習之Spring Cloud Sleuth分散式跟蹤解決方案

英文原文:https://spring.io/projects/spring-cloud-sleuth

目錄

概述

特性

Spring Boot配置

快速開始

學習

文件

示例


概述

Spring Cloud Sleuth為Spring Cloud實施分散式跟蹤解決方案,大量借用DapperZipkin和HTrace。對於大多數使用者來說,偵探應該是隱形的,並且所有與外部系統的互動都應該自動進行檢測。您可以簡單地在日誌中捕獲資料,也可以將資料傳送到遠端收集器服務。

特性

Span是基本工作單元。例如,傳送RPC是一個新的跨度,就像向RPC傳送響應一樣。跨度由跨度的唯一64位ID和跨度為其一部分的跟蹤的另一個64位ID標識。 Spans還有其他資料,例如描述,鍵值註釋,導致它們的跨度的ID以及程序ID(通常是IP地址)。跨度啟動和停止,他們跟蹤他們的時間資訊。建立跨度後,必須在將來的某個時刻停止它。一組跨度形成一個稱為Trace的樹狀結構。例如,如果您正在執行分散式大資料儲存,則可能會由put請求形成跟蹤。

Spring Cloud Sleuth功能:

  •     將跟蹤和跨度ID新增到Slf4J MDC,因此您可以從日誌聚合器中的給定跟蹤或跨度中提取所有日誌。
  •     提供對常見分散式跟蹤資料模型的抽象:跟蹤,跨距(形成DAG),註釋,鍵值註釋。鬆散地基於HTrace,但相容Zipkin(Dapper)。
  •     樂器常見的入口和出口點來自Spring應用程式(servlet過濾器,休息模板,預定動作,訊息通道,zuul過濾器,假裝客戶端)。
  •     如果spring-cloud-sleuth-zipkin
    可用,則該應用程式將通過HTTP生成並收集與Zipkin相容的跟蹤。預設情況下,它將它們傳送到localhost(埠9411)上的Zipkin收集器服務。使用spring.zipkin.baseUrl配置服務的位置。


Spring Boot配置

將偵聽(Sleuth)新增到類路徑:

Maven:



<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-sleuth</artifactId>
            <version>${spring-cloud-sleuth.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
</dependencies>

Gradle:



buildscript {
    dependencies {
        classpath "io.spring.gradle:dependency-management-plugin:0.5.2.RELEASE"
    }
}

apply plugin: "io.spring.dependency-management"

dependencyManagement {
     imports {
          mavenBom "org.springframework.cloud:spring-cloud-sleuth:${springCloudSleuthVersion}"
     }
}
dependencies {
    compile 'org.springframework.cloud:spring-cloud-starter-sleuth'
}

只要Spring Cloud Sleuth位於類路徑上,任何Spring Boot應用程式都將生成跟蹤資料:



@SpringBootApplication
@RestController
public class Application {

  private static Logger log = LoggerFactory.getLogger(DemoController.class);

  @RequestMapping("/")
  public String home() {
    log.info("Handling home");
    return "Hello World";
  }

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

}

執行此應用程式,然後點選主頁。 您將在日誌中看到填充了traceId和spanId。 如果這個應用程式呼叫另一個應用程式(例如使用RestTemplate),它將在標頭中傳送跟蹤資料,如果接收器是另一個Sleuth應用程式,您將看到跟蹤繼續存在。
重要
而不是顯式地在處理程式中記錄請求,您可以設定logging.level.org.springframework.web.servlet.DispatcherServlet = DEBUG
重要
如果使用Zipkin,請通過設定(對於2.0.x)spring.sleuth.sampler.probability或(直到2.0.x)spring.sleuth.sampler.percentage(預設值:0.1,即10%)來配置匯出跨度的概率)。 否則,您可能會認為偵探無法正常工作,因為它省略了一些跨度。
重要
設定spring.application.name = bar(例如)以檢視服務名稱以及跟蹤和跨度ID。

快速開始

使用Spring Initializr引導您的應用程式。

學習

文件

每個Spring專案都有自己的; 它詳細解釋瞭如何使用專案功能以及使用它們可以實現的功能。

2.1.0 RC3 PRE CURRENT Reference Doc. API Doc.
2.0.3 SNAPSHOT CURRENT Reference Doc. API Doc.
2.0.2 CURRENT GA Reference Doc. API Doc.
1.3.5 SNAPSHOT CURRENT Reference Doc. API Doc.
1.3.4 CURRENT GA Reference Doc. API Doc.
1.2.7 SNAPSHOT Reference Doc. API Doc.
1.2.6 GA Reference Doc. API Doc.
1.2.5 GA Reference Doc. API Doc.
1.1.4 SNAPSHOT Reference Doc. API Doc.
1.1.3 GA Reference Doc. API Doc.
1.0.12 GA Reference Doc. API Doc.

示例

嘗試一些例子: