Spring Cloud全鏈路追蹤實現

簡介

在微服務架構下存在多個服務之間的相互調用,當某個請求變慢或不可用時,咱們如何快速定位服務故障點呢?鏈路追蹤的實現就是爲了解決這一問題,本文采用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

相關文章
相關標籤/搜索