文章目錄
1. 簡介
Spring Cloud Sleuth implements a distributed tracing solution for Spring Cloud.
微服務的調用鏈監控是解決微服務的複雜性帶來的一系列問題的強有效手段之一,其監控原理、必要性、更多理解以及理論知識入門請查看《十一:對微服務調用鏈監控的理解》
2. 代碼實現
2.1 涉及的模塊及整體步驟
2.1.1 涉及的模塊
- zipkin-server:Spring Cloud Sleuth 整合Zipkin的服務端
- zipkin-service:受zipkin server監控的服務提供者,實際中爲一個微服務。
- zipkin-another-service:受zipkin server監控的服務提供者,實際中爲一個微服務,這裏模擬服務之間的相互調用
2.1.2 整體步驟
- 實現zipkin-server:引入
zipkin-server
、zipkin-autoconfigure-ui
,指定端口 - 實現zipkin-service:引入
spring-cloud-starter-zipkin
,指定zipkin server服務端信息,同時配置自己的應用名稱與端口,應用名稱很重要,需要全局唯一,用於在zipkin上定位針對當前服務的跟蹤信息。 - 實現zipkin-another-service:引入
spring-cloud-starter-zipkin
,指定zipkin server服務端信息,同時配置自己的應用名稱與端口,應用名稱很重要,需要全局唯一,用於在zipkin上定位針對當前服務的跟蹤信息。 - 啓動三個項目,瀏覽器方式調用兩個服務提供者提供的服務,服務提供者內部會通過RestTemplate訪問另一個服務,產生調用鏈關係
- 觀察zipkin server的管理界面,查看調用關係
2.2 源代碼
2.2.1 Github地址
https://github.com/andyChenHuaYing/spring-cloud-demo
2.3 zipkin-service
2.3.1 整體實現
- pom.xml文件中引入依賴引入
zipkin-server
、zipkin-autoconfigure-ui
,指定端口 - application.yml中指定具體配置信息
- ZipkinServerApplication使用註解
@EnableZipkinServer
開啓zipkin server功能
2.3.2 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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">
<parent>
<artifactId>spring-cloud-finchley-demo</artifactId>
<groupId>org.oscar.scd</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>zipkin-server</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</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>
<!-- https://mvnrepository.com/artifact/io.zipkin.java/zipkin-server -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>2.11.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.zipkin.java/zipkin-autoconfigure-ui -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>2.11.4</version>
</dependency>
</dependencies>
</project>
2.3.3 application.yml
server:
port: 8777
management:
metrics:
web:
server:
auto-time-requests: false
2.3.4 ZipkinServerApplication
package org.oscar.scd.zipkin.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import zipkin2.server.internal.EnableZipkinServer;
@EnableZipkinServer
@SpringBootApplication
public class ZipkinServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZipkinServerApplication.class, args);
}
}
2.4 zipkin-service
2.4.1 整體實現
- pom.xml:引入
spring-cloud-starter-zipkin
- application.yml:指定zipkin server服務端信息,同時配置自己的應用名稱與端口,應用名稱很重要,需要全局唯一,用於在zipkin上定位針對當前服務的跟蹤信息。
- ZipkinServiceApplication:Spring boot啓動類,通過RestTemplate調用
zipkin-another-service
提供的REST服務
2.4.2 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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">
<parent>
<artifactId>spring-cloud-finchley-demo</artifactId>
<groupId>org.oscar.scd</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>zipkin-service</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
</dependencies>
</project>
2.4.3 application.yml
probability: 1
#日誌採集率,從0到1依次提高,1標識每次都採集
server:
port: 8778
spring:
zipkin:
base-url: http://localhost:8777
application:
name: zipkin-service
sleuth:
sampler:
probability: 1
2.5 zipkin-another-service
基本與 zipkin-service相同,端口與應用名稱不同,提供的REST接口返回值不同
2.5.1 整體實現
- pom.xml:引入
spring-cloud-starter-zipkin
- application.yml:指定zipkin server服務端信息,同時配置自己的應用名稱與端口,應用名稱很重要,需要全局唯一,用於在zipkin上定位針對當前服務的跟蹤信息。
- ZipkinAnotherServiceApplication:Spring boot啓動類,通過RestTemplate調用
zipkin-service
提供的REST服務
2.5.2 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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">
<parent>
<artifactId>spring-cloud-finchley-demo</artifactId>
<groupId>org.oscar.scd</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>zipkin-service</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
</dependencies>
</project>
2.5.3 application.yml
probability: 1
#日誌採集率,從0到1依次提高,1標識每次都採集
server:
port: 8779
spring:
zipkin:
base-url: http://localhost:8777
application:
name: zipkin-another-service
sleuth:
sampler:
probability: 1
3. 驗證
3.1 創建SpringBoot啓動類
最簡單的方式添加一個SpringBoot啓動類型的啓動類就行,如果對SpringBoot有所瞭解或者看過前面系列的文章,這裏很簡單。
3.1.1 ZipkinServerApplication
略
3.1.2 ZipkinServiceApplication
略
3.1.3 ZipkinAnotherServiceApplication
略
3.2 啓動
ZipkinServerApplication
ZipkinServiceApplication
ZipkinAnotherServiceApplication
3.3 查看zipkin-server服務信息界面
3.4 服務相互調用
3.4.1 訪問zipkin-service
- 訪問鏈接http://localhost:8778/serviceName,返回zipkin-another-service提供的REST服務返回值。
Hi i am zipkin-another-service
3.4.2 訪問zipkin-another-service
- 訪問鏈接http://localhost:8779/serviceName,返回zipkin-service提供的REST服務返回值。
Hi i am zipkin-service
此時已經產生服務調用鏈。zipkin-service -> zipkin-another-service;zipkin-another-service -> zipkin-service 兩個。
3.5 界面查看調用情況
-
參考如下界面,查看zipkin-service調用鏈情況,一個是整體調用情況
-
另一個點進去可以查看所點擊的調用鏈的詳細調用信息
4. 思考
- 剛入門,調用信息單薄
- 如何監控微服務整條鏈路信息,如網絡、服務調用鏈、數據庫、緩存並且支持多種展示形式,如報表,數據
- 當數據量上來之後如何快速查詢想要的信息
- 還有沒有其他的微服務監控體系,如ELK如何在實際生產中實時
5. 補充
5.1 資料
http://cloud.spring.io/spring-cloud-static/Finchley.SR1/multi/multi_spring-cloud.html