在微服務架構下存在多個服務之間的相互調用,當某個請求變慢或不可用時,咱們如何快速定位服務故障點呢?鏈路追蹤的實現就是爲了解決這一問題,本文采用Sleuth+Zipkin+RabbitMQ+ES+Kibana實現。java
Spring Cloud Sleuthweb
Trace:從客戶端請求到系統邊界,再到系統邊界返回客戶端響應。 Span:每一次調用埋入一個調用記錄,即爲 「Span」,一系列有序的Span構成一個Trace。spring
Zipkin數據庫
Zipkin 是由Twitter公司開源的一個分佈式追蹤系統,用於收集服務的定時數據,實現數據的收集、存儲、查找和展示。提供了可插拔的數據存儲方式:In-Memory、MySql、Cassandra以及Elasticsearch。bash
RabbitMQ服務器
RabbitMQ是一個開源的AMQP實現,服務器端用Erlang語言編寫,支持多種客戶端,用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。架構
Elasticsearchapp
Elasticsearch(ES)是一個基於Lucene構建的開源、分佈式、RESTful接口的全文搜索引擎。Elasticsearch仍是一個分佈式文檔數據庫,其中每一個字段都可被索引,並且每一個字段的數據都可被搜索,ES可以橫向擴展至數以百計的服務器存儲以及處理PB級的數據。能夠在極短的時間內存儲、搜索和分析大量的數據。elasticsearch
Kibana分佈式
Kibana能夠爲 Logstash 和 ElasticSearch 提供友好的日誌分析 Web 界面,能夠實現彙總、分析和搜索重要數據日誌。
一、Zipkin服務端
建立zipkin-server項目(也可到官方網站:zipkin.io/下載jar包直接使用)
添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</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>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-collector-rabbitmq</artifactId>
<version>2.11.8</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-storage-elasticsearch-http</artifactId>
<version>2.8.4</version>
</dependency>
複製代碼
配置文件
spring:
application:
name: zipkin-server
server:
port: 8033
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8088/eureka/
instance:
prefer-ip-address: true
management:
metrics:
web:
server:
auto-time-requests: false
zipkin:
collector:
rabbitmq:
addresses: 192.168.233.128
port: 5672
username: zipkin
password: zipkin
virtual-host: vh1
queue: zipkin
storage:
StorageComponent: elasticsearch
type: elasticsearch
elasticsearch:
hosts: 192.168.233.171:9200
cluster: elasticsearch
index: zipkin
index-shards: 5
index-replicas: 1
複製代碼
啓動類
@SpringBootApplication
@EnableEurekaClient
@EnableZipkinServer
public class ZipkinServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZipkinServerApplication.class, args);
}
}
複製代碼
訪問
二、Zipkin客戶端
添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<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>
複製代碼
配置文件
spring:
sleuth:
sampler:
probability: 1.0
zipkin:
sender:
type: RABBIT
rabbitmq:
addresses: 192.168.233.128
port: 5672
username: zipkin
password: zipkin
virtual-host: vh1
複製代碼
三、測試
訪問zipkin客戶端服務,如我本地user-server
查看zipkin服務端
訪問Kibana,配置一個index pattern
修改默認時間格式
看一下效果
歡迎關注公衆號[ 牧碼筆記 ],時時獲取最新技術分享,更有精選學習資料。