來到這一篇, 我們已經完成了SpringCloud大部分核心元件的整合,那麼我們接下來就整合ZipKin元件,
什麼是服務鍊路追蹤,作用是什麼?
我簡單表述下,就是我們可以通過整合這個元件,能看到所有微服務直接的調用關系,所有接口的通路詳情,包括節點、耗時等等資訊,就是一種對整個分布式微服務架構提供監控分析的功能。
PS:
在整合zipkin的前提,我必須先告訴大家,自從springboot 2.0後,其實官方提供了在ZipKin Server服務的jar,直接下載下傳運作即可:
位址:https://zipkin.io/pages/quickstart , 找到latest release 進行下載下傳。
Windows 環境,打開cmd java -jar zipkin-server-xxx.jar 啟動, 通路 http://localhost:9411/ ,能出現網頁證明已經成功部署運作。
但是在這篇文章了,是從零整合,也就是我們将會自己建立一個Springboot項目,完成整合ZipKin &Sleuth 元件 。
接下來開始:
我們建立一個springboot項目,起名zipkin-server:
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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cloud</groupId>
<artifactId>zipkin-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zipkin-server</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
<version>2.11.8</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>2.11.8</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
然後是application.yml:
server:
port: 9411
spring:
application:
name: zipkin-server
management:
metrics:
web:
server:
auto-time-requests: false
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
preferIpAddress: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
到這裡,其實ZipKin Server這一段我們已經完成了。
我們可以将項目跑起來(記得前提eureka注冊中心是正常運作的,我們有做注冊),通路 http://localhost:9411/ :
ZipKin服務端是正常部署運作了,那麼我們需要在各個微服務上也整合這個元件,這樣才能将微服務與ZipKin Server互通。
我們在網關服務,gateway的pom.xml導入依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
在application.yml上添加相關的配置項後:
server:
port: 8081
spring:
application:
name: gateway-service
zipkin:
base-url: http://localhost:9411
sender:
type: web
sleuth:
sampler:
#采樣100%
probability: 1.0
cloud:
gateway:
discovery:
locator:
enabled: false
#開啟小寫驗證,預設feign根據服務名查找都是用的全大寫
lowerCaseServiceId: true
routes:
- id: client-test
uri: lb://CLIENT-TEST
predicates:
- Path=/testclient/**
filters:
- StripPrefix=1
- id: service-feign
uri: lb://FEIGN
predicates:
- Path=/service-feign/**
filters:
- StripPrefix=1
eureka:
instance:
preferIpAddress: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
client:
service-url:
defaultZone: http://localhost:8761/eureka/
這樣網關服務已經整合Zipkin&Sleuth 完成;
同樣,我們在client-test服務執行個體和feign服務執行個體都做一樣的操作,導入相關依賴&yml配置檔案添加對應的配置項;
我們來通過網關通路下client-test服務的接口,http://localhost:8081/testclient/haveatry?name=1323 ;
然後看看http://localhost:9411/ ,點選Find Traces:
可以看到有相關接口調用資訊,不過這是通過網關通路的client-test服務,我們再來個涉及多一點服務的,
我們通過 網關 調用 Feign服務 然後Feign服務 調用 CLIENT-TEST 服務,我們再來看看相關的跟蹤資訊:
http://localhost:8081/service-feign/feignTest?name=JCccc
可以點進去檢視更加具體的詳情: