在微服務架構下存在多個服務之間的相互調用,當某個請求變慢或不可用時,咱們如何快速定位服務故障點呢?鏈路追蹤的實現就是爲了解決這一問題,本文采用Sleuth+Zipkin+RabbitMQ+ES+Kibana實現。java
Spring Cloud Sleuthweb
Trace:從客戶端請求到系統邊界,再到系統邊界返回客戶端響應。spring
Span:每一次調用埋入一個調用記錄,即爲 「Span」,一系列有序的Span構成一個Trace。數據庫
Zipkin服務器
Zipkin 是由Twitter公司開源的一個分佈式追蹤系統,用於收集服務的定時數據,實現數據的收集、存儲、查找和展示。提供了可插拔的數據存儲方式:In-Memory、MySql、Cassandra以及Elasticsearch。架構
RabbitMQapp
RabbitMQ是一個開源的AMQP實現,服務器端用Erlang語言編寫,支持多種客戶端,用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。 elasticsearch
Elasticsearch分佈式
Elasticsearch(ES)是一個基於Lucene構建的開源、分佈式、RESTful接口的全文搜索引擎。Elasticsearch仍是一個分佈式文檔數據庫,其中每一個字段都可被索引,並且每一個字段的數據都可被搜索,ES可以橫向擴展至數以百計的服務器存儲以及處理PB級的數據。能夠在極短的時間內存儲、搜索和分析大量的數據。spring-boot
Kibana
Kibana能夠爲 Logstash 和 ElasticSearch 提供友好的日誌分析 Web 界面,能夠實現彙總、分析和搜索重要數據日誌。
一、Zipkin服務端
建立zipkin-server項目(也可到官方網站:https://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
修改默認時間格式
看一下效果
END