zoukankan      html  css  js  c++  java
  • 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

     修改默认时间格式

     看一下效果

    注:之前的图片不清楚,后来重新更新了图片,因此,图片上的时间会晚于文章时间。

  • 相关阅读:
    [Maven]自定义Archetypes
    [集合]LinkedList
    [集合]Arraylist
    [数据结构与算法]最长有效括号32
    [数据结构与算法]深度优先搜索dfs和广度优先搜索bfs
    [Vim] 光标移动到行首、行尾
    [数据结构与算法]给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
    [数据结构与算法]求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。
    IDEA 自动设置compile target变成1.5
    【Java基础】sun.misc.BASE64和Java 8 java.util.Base64区别
  • 原文地址:https://www.cnblogs.com/ityard/p/11106065.html
Copyright © 2011-2022 走看看