淺嘗Spring Cloud Sleuth
阿新 • • 發佈:2018-12-12
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。