Spring系列學習之Spring Cloud Sleuth分散式跟蹤解決方案
英文原文:https://spring.io/projects/spring-cloud-sleuth
目錄
概述
Spring Cloud Sleuth為Spring Cloud實施分散式跟蹤解決方案,大量借用Dapper,Zipkin和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
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. |
示例
嘗試一些例子:
- Sleuth Web Mvc Simple Sleuth Web MVC示例