Spring Cloud Sleuth+Zipkin實踐

一個由微服務構成的應用系統通過服務來劃分問題域,通過REST請求服務API來連接服務來完成完整業務。對於入口的一個調用可能需要有多個後臺服務協同完成,鏈路上任何一個調用超時或出錯都可能造成前端請求的失敗。服務的調用鏈也會越來越長,並形成一個樹形的調用鏈。隨着服務的增多,對調用鏈的分析也會越來越複雜。
針對服務化應用全鏈路追蹤的問題,Google發表了Dapper論文,介紹了他們如何進行服務追蹤分析。其基本思路是在服務調用的請求和響應中加入ID,標明上下游請求的關係。利用這些信息,可以可視化地分析服務調用鏈路和服務間的依賴關係。
對應Dpper的開源實現是Zipkin,支持多種語言包括JavaScript,Python,Java, Scala, Ruby, C#, Go等。其中Java由多種不同的庫來支持。
Spring Cloud Sleuth是對Zipkin的一個封裝,對於Span、Trace等信息的生成、接入HTTP Request,以及向Zipkin Server發送採集信息等全部自動完成。

1. Server 端
1)pom.xml中引入
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-storage-mysql</artifactId>
</dependency>
2)主類開啓監控:@EnableEurekaClient,@EnableZipkinServer
3)配置 eureka.instance.client.serviceUrl.defaultZone
4)創建zipkin的db實例,配置用戶權限,創建相關表 zipkin_annotations,zipkin_dependencies,zipkin_spans
5)配置zipkin存儲的db內容:
zipkin:
ui:
environment: zipkin
storage:
type: mysql
mysql:
host: localhost
port: 3306
db: zipkin
username: username
password: password

2. Client 端
1)pom.xml中引入
<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>
2)配置連接的server端地址及採樣率
spring:
zipkin:
enabled: true
base-url: http://localhost:9411
sleuth:
sampler:
#採樣率, 默認0.1
percentage: 1.0

注意:
1. db實例,表,需手工創建,否則zipkin-server雖然不會報錯,但無法採集數據
2. 每1次request生成一個traceId,中間有N個service層,則生成N個spanId,寫入spans,annotaions
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章