Spring Cloud –使用Zipkin跟踪服務

1.概述

在本文中,我們將Zipkin添加到我們的Spring Cloud項目中。 Zipkin是一個開源項目,提供了發送,接收,存儲和可視化跟踪的機制。這使我們能夠關聯服務器之間的活動,並更清楚地了解我們服務中正在發生的事情。

本文不是分佈式跟踪或Spring Cloud的介紹性文章。如果您想了解有關分佈式跟踪的更多信息,請閱讀我們的Spring Sleuth簡介。

2. Zipkin服務

我們的Zipkin服務將充當我們所有跨度的商店。每個跨度都發送到此服務,並收集到跟踪中以供將來標識。

2.1。設定

創建一個新的Spring Boot項目並將這些依賴項添加到pom.xml:

<dependency>

 <groupId>io.zipkin.java</groupId>

 <artifactId>zipkin-server</artifactId>

 </dependency>

 <dependency>

 <groupId>io.zipkin.java</groupId>

 <artifactId>zipkin-autoconfigure-ui</artifactId>

 <scope>runtime</scope>

 </dependency>

供參考:您可以在Maven Central上找到最新版本( zipkin-serverzipkin-autoconfigure-ui )。依賴的版本繼承自spring-boot-starter-parent

2.2。啟用Zipkin服務器

要啟用Zipkin服務器,我們必須在主應用程序類中添加一些註釋:

@SpringBootApplication

 @EnableZipkinServer

 public class ZipkinApplication {...}

新的註釋@EnableZipkinServer將設置此服務器以偵聽傳入的跨度並充當我們的查詢UI。

2.3。配置

首先,讓我們在src/main/resources創建一個名為bootstrap.properties的文件。請記住,需要此文件才能從配置服務器中獲取我們的配置。

讓我們添加以下屬性:

spring.cloud.config.name=zipkin

 spring.cloud.config.discovery.service-id=config

 spring.cloud.config.discovery.enabled=true

 spring.cloud.config.username=configUser

 spring.cloud.config.password=configPassword



 eureka.client.serviceUrl.defaultZone=

 http://discUser:[email protected]:8082/eureka/

現在,我們將配置文件添加到我們的配置庫中,該文件位於Windows上的c:\Users\{username}\或* nix上的/home/{username}/

在此目錄中,我們添加一個名為zipkin.properties的文件並添加以下內容:

spring.application.name=zipkin

 server.port=9411

 eureka.client.region=default

 eureka.client.registryFetchIntervalSeconds=5

 logging.level.org.springframework.web=debug

切記在此目錄中提交更改,以便config服務將檢測到更改並加載文件。

2.4。運行

現在,運行我們的應用程序並導航到http:// localhost:9411。我們應該會看到Zipkin's主頁:

Spring

大!現在,我們準備向我們要跟踪的服務中添加一些依賴關係和配置。

3.服務配置

資源服務器的設置幾乎相同。在以下各節中,我們將詳細介紹如何設置book-service.接下來,我們將解釋將這些更新應用到rating-servicegateway-service **.**所需的修改**gateway-service .**

3.1。設定

為了開始向我們的Zipkin服務器發送跨度,我們將這個依賴項添加到我們的pom.xml文件中:

<dependency>

 <groupId>org.springframework.cloud</groupId>

 <artifactId>spring-cloud-starter-zipkin</artifactId>

 </dependency>

供參考:您可以在Maven Central上找到最新版本( spring-cloud-starter-zipkin )。

3.2。Spring Config

我們需要添加一些配置,以便預訂服務將使用Eureka查找我們的Zipkin服務。打開BookServiceApplication.java並將以下代碼添加到文件中:

@Autowired

 private EurekaClient eurekaClient;



 @Autowired

 private SpanMetricReporter spanMetricReporter;



 @Autowired

 private ZipkinProperties zipkinProperties;



 @Value("${spring.sleuth.web.skipPattern}")

 private String skipPattern;



 // ... the main method goes here



 @Bean

 public ZipkinSpanReporter makeZipkinSpanReporter() {

 return new ZipkinSpanReporter() {

 private HttpZipkinSpanReporter delegate;

 private String baseUrl;



 @Override

 public void report(Span span) {



 InstanceInfo instance = eurekaClient

 .getNextServerFromEureka("zipkin", false);

 if (!(baseUrl != null &&

 instance.getHomePageUrl().equals(baseUrl))) {

 baseUrl = instance.getHomePageUrl();

 delegate = new HttpZipkinSpanReporter(new RestTemplate(),

 baseUrl, zipkinProperties.getFlushInterval(), spanMetricReporter);

 if (!span.name.matches(skipPattern)) delegate.report(span);

 }

 }

 };

 }

上面的配置註冊了一個自定義ZipkinSpanReporter ,該URL從ZipkinSpanReporter獲取。此代碼還跟踪現有URL,並且僅在URL更改時才更新HttpZipkinSpanReporter 。這樣,無論我們將Zipkin服務器部署到何處,我們都將能夠找到它而無需重新啟動服務。

我們還將導入Spring Boot加載的默認Zipkin屬性,並使用它們來管理我們的自定義報告器。

3.3。配置

現在,讓我們在配置存儲庫中的book-service.properties文件中添加一些配置:

spring.sleuth.sampler.percentage=1.0

 spring.sleuth.web.skipPattern=(^cleanup.*)

Zipkin通過採樣服務器上的操作來工作。通過將spring.sleuth.sampler.percentage設置為1.0,我們將採樣率設置為100%。跳過模式只是用於排除名稱匹配的跨度的正則表達式。

跳過模式將阻止報告以單詞“ cleanup”開頭的所有跨度。這是為了停止源自spring會話代碼庫的跨度。

3.4。評級服務

請遵循上述“ book-service部分中的相同步驟,將更改應用於等價文件以進行rating-service.

3.5。網關服務

遵循相同的步驟book-service 。但是,當將配置添加到網關*.properties時,請*添加以下內容:

spring.sleuth.sampler.percentage=1.0

 spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*)

這將配置網關服務,使其不發送有關favicon或spring會話的跨度。

3.6 運行

如果尚未進行配置,請啟動configDiscoverygatewaybookratingzipkin服務。

導航到http:// localhost:8080 / book-service / books。

打開一個新選項卡,然後瀏覽至http:// localhost:9411。選擇圖書服務,然後按“查找痕跡”按鈕。您應該看到一條痕跡出現在搜索結果中。單擊打開它的痕跡:

Spring

在跟踪頁面上,我們可以按服務細分請求。前兩個範圍由gateway創建,最後一個範圍由book-service.創建book-service.這向我們顯示了請求在book-service,上花費的時間為18.379毫秒,而在gateway,上為87.961毫秒。

4。結論

我們已經看到將Zipkin集成到我們的雲應用程序是多麼容易。

這使我們對通信如何通過我們的應用程序傳播有了一些急需的見解。隨著我們應用程序複雜性的增加,Zipkin可以為我們提供急需的信息,以了解請求在何處花費時間。這可以幫助我們確定出現問題的地方,並指出需要改進應用程序的哪些方面。

與往常一樣,您可以在Github上找到源代碼。