简介


在微服务架构下存在多个服务之间的相互调用,当某个请求变慢或不可用时,我们如何快速定位服务故障点呢?链路追踪的实现就是为了解决这一问题,本文采用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.</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<version>2.11.</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-collector-rabbitmq</artifactId>
<version>2.11.</version>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-storage-elasticsearch-http</artifactId>
<version>2.8.</version>
</dependency>

配置

spring:
application:
name: zipkin-server
server:
port:
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:
username: zipkin
password: zipkin
virtual-host: vh1
queue: zipkin
storage:
StorageComponent: elasticsearch
type: elasticsearch
elasticsearch:
hosts: 192.168.233.171:
cluster: elasticsearch
index: zipkin
index-shards:
index-replicas:

启动类

@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:
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

修改默认时间格式

看一下效果

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

Spring Cloud 全链路追踪实现的更多相关文章

  1. Spring Cloud全链路追踪实现(Sleuth+Zipkin+RabbitMQ+ES+Kibana)

    简介 在微服务架构下存在多个服务之间的相互调用,当某个请求变慢或不可用时,我们如何快速定位服务故障点呢?链路追踪的实现就是为了解决这一问题,本文采用Sleuth+Zipkin+RabbitMQ+ES+ ...

  2. spring cloud 服务链路追踪 skywalking 6.1

    随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了 ...

  3. 基于SLF4J的MDC机制和Dubbo的Filter机制,实现分布式系统的日志全链路追踪

    原文链接:基于SLF4J的MDC机制和Dubbo的Filter机制,实现分布式系统的日志全链路追踪 一.日志系统 1.日志框架 在每个系统应用中,我们都会使用日志系统,主要是为了记录必要的信息和方便排 ...

  4. 全链路追踪traceId,ThreadLocal与ExecutorService

    关于全链路追踪traceId遇到线程池的问题,做过架构的估计都遇到过,现在以写个demo,总体思想就是获取父线程traceId,给子线程,子线程用完移除掉. mac上的chrome时不时崩溃,写了一大 ...

  5. go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)

    目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ...

  6. skywalking与pinpoint全链路追踪方案对比

    由于公司目前有200多微服务,微服务之间的调用关系错综复杂,调用关系人工维护基本不可能实现,需要调研一套全链路追踪方案,初步调研之后选取了skywalking和pinpoint进行对比; 选取skyw ...

  7. Node.js 应用全链路追踪技术——[全链路信息获取]

    全链路追踪技术的两个核心要素分别是 全链路信息获取 和 全链路信息存储展示. Node.js 应用也不例外,这里将分成两篇文章进行介绍:第一篇介绍 Node.js 应用全链路信息获取, 第二篇介绍 N ...

  8. 【AWS】使用X-Ray做AWS云上全链路追踪监控系统

    功能 AWS X-Ray 是一项服务,收集应用程序所请求的相关数据,并提供用于查看.筛选和获取数据洞察力的工具,以确定问题和发现优化的机会. 对于任何被跟踪的对您应用程序的请求,不仅可以查看请求和响应 ...

  9. Spring Cloud 分布式链路跟踪 Sleuth + Zipkin + Elasticsearch【Finchley 版】

    随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构的兴起,看似一个简单的应用,后台可能很多服务在支撑:一个请求可能需要多个服务的调用:当请求迟缓或不可用时,无法得知是哪个微服务引起的,这 ...

随机推荐

  1. abp(net core)+easyui+efcore实现仓储管理系统——菜单 (十六)

    系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) ...

  2. Codeforces Round #465 &935C. Fifa and Fafa计算几何

    传送门 题意:在平面中,有一个圆,有一个点,问能在这个圆中围出最大的圆的圆心坐标和半径.要求这个最大圆不包含这个点. 思路:比较基础的计算几何,要分三种情况,第一种就是这个点在圆外的情况.第二种是点在 ...

  3. CF995B Suit and Tie 贪心 第十三

    Suit and Tie time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  4. Mac环境IntelliJ IDEA配置JDK提示The selected directory is not a valid home for JDK

    笔者使用mac配置如下: 硬件环境:MacBook Pro 操作系统:MacOS Sierra 10.13.6 开发工具:IntelliJ IDEA 2016.x JDK版本:已有Open JDK 8 ...

  5. [ERR] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.

    昨天,在测试新的数据库时,迁移表遇到了这个问题.现在记录一下解决方案. 1.在配置文件中添加关闭严格模式的配置:sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS ...

  6. git修改user.name 和user.email

    今天刚刚入门了下git,,然后初始化的时候将用户名弄错了...就很气啊.然后网上找了半天都找不出一个可靠的修改全局用户名和邮箱的方法..   最后还是自己摸索出来了..其实也很简单.   首先进入gi ...

  7. sql 多行、一行 互转

    原始数据: 期望数据: IF OBJECT_ID('temp_20170701','u') IS NOT NULL DROP TABLE temp_20170701 CREATE TABLE temp ...

  8. MyBatis基础之几道常见面试题详解

    (原文链接:http://www.studyshare.cn/blog/details/1178/1 一.开发中到底应该使用resultType还是resultMap? 强制使用resultMap,不 ...

  9. 拒绝一次性买卖:MyBatis的mapper和repository可重复生成工具

    背景 MyBatis的历史可谓久远了,码农们也在用着各式各样的代码生成工具.然而这些工具大部分都有一个缺点,那就是只能一次性生成文件.如果我们期间在生成的文件里做了修改,再次生成时,很多工具会覆盖我们 ...

  10. jumper-server-资源管理

    https://cloud.tencent.com/developer/article/1460469 此链接是百度搜索的 , 比较详细 https://www.cnblogs.com/zsl-fin ...