淺嘗Spring Cloud Sleuth


Spring Cloud Sleuth提供了分布式追蹤(distributed tracing)的一個解決方案。其基本思路是在服務調用的請求和響應中加入ID,標明上下游請求的關系。利用這些信息,可以方便地分析服務調用鏈路和服務間的依賴關系。

Only Sleuth

在Spring Tool Suite的文件菜單中,點擊新建Spring Starter Project。

在請求處理方法內加上一行日志代碼。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SpringcloudSleuthApplication {

	private static Logger log = LoggerFactory.getLogger(SpringcloudSleuthApplication.class);
	@RequestMapping("/")
	public String home() {
		log.info("Handling home");
		return "Hello World";
	}

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

設定應用程序端口及名稱。

server.port=10001

spring.application.name=sleuth-demo-without-zipkin

啟動程序並瀏覽頁面后,可以看到日志信息里多了點東西。

[sleuth-demo-without-zipkin,6c00dba1679ee164,6c00dba1679ee164,false]

這一串數據里包含四個部分

  • appname - 應用程序名稱
  • traceId - 追蹤系統中的唯一標識
  • spanId - 具體操作的唯一標識
  • exportable - 是否日志要導出到Zipkin

Sleuth + Zipkin

Zipkin Server

要想把追蹤數據發送到Zipkin上,首先需要建立一個Zipkin Server應用程序,在pom.xml里加上如下依賴:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>

  <dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-server</artifactId>
    <version>2.11.5</version>
  </dependency>
  
  <dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-autoconfigure-ui</artifactId>
    <version>2.11.5</version>
  </dependency>
</dependencies>

然后在啟動類加上@EnableZipkinServer標記。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import zipkin2.server.internal.EnableZipkinServer;

@EnableZipkinServer
@SpringBootApplication
public class SpringcloudZipkinServerApplication {

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

application.properties文件中可修改默認端口,server.port=10000

打開相關頁面,如下:

Zipkin Client

再新建一個應用程序。

啟動程序代碼基本一樣。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SpringcloudZipkinApplication {

	private static Logger log = LoggerFactory.getLogger(SpringcloudZipkinApplication.class);
	@RequestMapping("/")
	public String home() {
		log.info("Handling home");
		return "Hello World";
	}
	
	public static void main(String[] args) {
		SpringApplication.run(SpringcloudZipkinApplication.class, args);
	}
}

application.properties文件里加上Zipkin Server的地址,同時為了每次都將數據傳入Zipkin,需要把spring.sleuth.sampler.probability的值改為1.0。

server.port=10002

spring.application.name=sleuth-demo-with-zipkin
spring.zipkin.base-url=http://localhost:10000
spring.sleuth.sampler.probability=1.0

啟動Zipkin Client后,可以看到Zipkin Server頁面上多了一條追蹤數據。

再次刷新Zipkin Client頁面,又會有條新的數據。

在看控制台的日志記錄,exportable項變成了true,說明數據已傳入Zipkin。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM