Spring Cloud 全鏈路追蹤實現


簡介


在微服務架構下存在多個服務之間的相互調用,當某個請求變慢或不可用時,我們如何快速定位服務故障點呢?鏈路追蹤的實現就是為了解決這一問題,本文采用Sleuth+Zipkin+RabbitMQ+ES+Kibana實現。

Spring Cloud Sleuth

Trace:從客戶端請求到系統邊界,再到系統邊界返回客戶端響應。

Span:每一次調用埋入一個調用記錄,即為 “Span”,一系列有序的Span構成一個Trace。

Zipkin

Zipkin 是由Twitter公司開源的一個分布式追蹤系統,用於收集服務的定時數據,實現數據的收集、存儲、查找和展現。提供了可插拔的數據存儲方式:In-Memory、MySql、Cassandra以及Elasticsearch。

RabbitMQ

RabbitMQ是一個開源的AMQP實現,服務器端用Erlang語言編寫,支持多種客戶端,用於在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。 

Elasticsearch

Elasticsearch(ES)是一個基於Lucene構建的開源、分布式、RESTful接口的全文搜索引擎。Elasticsearch還是一個分布式文檔數據庫,其中每個字段均可被索引,而且每個字段的數據均可被搜索,ES能夠橫向擴展至數以百計的服務器存儲以及處理PB級的數據。可以在極短的時間內存儲、搜索和分析大量的數據。

Kibana

Kibana可以為 Logstash 和 ElasticSearch 提供友好的日志分析 Web 界面,可以實現匯總、分析和搜索重要數據日志。

 

實現


1、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);
  }
}

訪問 http://localhost:8033/zipkin/

 2、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

 

3、測試:

訪問zipkin客戶端服務,如我本地user-server http://localhost:8061/user/findAll

 

 點“Find Traces”,看一下zipkin服務端

 訪問 http://192.168.233.171:5601 ,看一下Kibana,配置一個index pattern

 修改默認時間格式

 看一下效果

 

注:之前的圖片不清楚,后來重新更新了圖片,因此,圖片上的時間會晚於文章時間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM