1. 介紹
Spring-Cloud-Sleuth
是
Spring Cloud
的組成部分之一,為
SpringCloud
應用實現了一種分布式追蹤解決方案,其兼容了
Zipkin, HTrace
和
log-based
追蹤
相關說明: zipkin
Span:
基本工作單元,例如,在一個新建的
span
中發送一個
RPC
等同於發送一個回應請求給
RPC
,
span
通過一
個
64
位
ID
唯一標識,
trace
以另一個
64
位
ID
表示,
span
還有其他數據信息,比如摘要、時間戳事件、關鍵值注釋
(tags)
、
span
的
ID
、以及進度
ID(
通常是
IP
地址
)
span在不斷的啟動和停止,同時記錄了時間信息,當你創建了一個span,你必須在未來的某個時刻停止它。
Trace:一系列spans組成的一個樹狀結構,例如,如果你正在跑一個分布式大數據工程,你可能需要創建一個trace。
Annotation:用來及時記錄一個事件的存在,一些核心annotations用來定義一個請求的開始和結束
- cs - Client Sent -客戶端發起一個請求,這個annotion描述了這個span的開始
- sr - Server Received -服務端獲得請求並准備開始處理它,如果將其sr減去cs時間戳便可得到網絡延遲
- ss - Server Sent -注解表明請求處理的完成(當請求返回客戶端),如果ss減去sr時間戳便可得到服務端需要的處理請求時間
- cr - Client Received -表明span的結束,客戶端成功接收到服務端的回復,如果cr減去cs時間戳便可得到客戶端從服務端獲取回復的所有所需時間
將Span和Trace在一個系統中使用Zipkin注解的過程圖形化:
2. 使用
使用
http://start.spring.io/ 生成項目
pom.xml 文件如下:
<?xml version="1.0" encoding="UTF-8"?> <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>zipkinclient</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>zipkinclient</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.3.RELEASE</version> <relativePath/><!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Camden.BUILD-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>
3. 編寫調用service
都是spring rest service
@RequestMapping("/demo") public String getinfo(){ LOG.log(Level.INFO, "RestDemo demo backend is being called"); return "dalongdemo"; } @Bean // 此處可以使用配置說明 public Sampler defaultSampler() { return new AlwaysSampler(); } }
4. 調用方式:
public class FirstController { @Autowired public RestTemplate restTemplate; @RequestMapping("/first") public String first(){ String result=restTemplate.getForObject("http://localhost:8987/second", String.class); return "from [second]"+result; } @Bean public Sampler defaultSampler() { return new AlwaysSampler(); } }
5. 配置zipkin 訪問地址:
application.properties
server.port=8988 spring.zipkin.base-url=http://XXXXXXX:9411 spring.application.name=first
6. 啟動服務
mvn spring-boot:run
7. 查看請求信息,以及服務依賴
還是比較方便的,建議看看官方的例子以及說明文檔:
http://cloud.spring.io/spring-cloud-sleuth/1.0.x/
