1、概要

一般的,一个分布式服务跟踪系统,主要有三部分:

  • 数据收集
  • 数据存储
  • 数据展示

然而这三个部分其实不都是由SpringCloud Sleuth(下面我简称为Sleuth)完成的,Sleuth负责数据的收集,而数据的存储和数据的展示由Zipkin完成

首先我们需要搞清楚,链路追踪功能由Sleuth(数据收集),Zipkin(数据存储、数据展示)这两个组件组合完成的。

下面我们对它们分别介绍

2、Sleuth

①产生原因

在微服务框架中,一个客户端的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个前端请求都会产生一个复杂的服务调用链路,链路中的任何一环出现高延迟或错误都会导致请求的失败

Springcloud考虑到这个问题,Sleuth即为长链路调用的链路跟踪监控组件

②简介

SpringCloud Sleuth官网:Spring Cloud Sleuth

这是SpringCloud Sleuth的概念图:

trace:一次完整的请求,从服务开始到执行完成

span:在一次trace中,每调用一个服务就会记录调用的信息和响应时间,这就是一个span

下图中,Trace全为X表示一次调用,其中每个服务调用都有一个span,不同服务调用span不同。

可见sleuth能够通过trace和span,追踪到一次调用经过了哪些服务,每个服务的耗费时间

3、Zipkin

①简介

Zipkin是一个开源的追踪系统,它负责收集,存储数据并展示给用户

这里说Zipkin的收集不同于Sleuth的收集,Sleuth是通过监控来实现信息的收集而Zipkin的收集是将Sleuth采集的数据进行接收

官网也表达的很清楚:

本文中,Sleuth负责数据的收集,Zipkin负责存储和展示

Zipkin提供了不同的数据存储方式:

  1. Merory(内存存储)
  2. Mysql(关系型数据库)
  3. Cassandra(非关系型数据库ps本人还没有接触过)
  4. Elasticsearch

4、搭建

①安装zipkin

下载地址:

阿里云网盘

运行:

java -jar zipkin-server-2.12.9-exec.jar

进入控制台:

http://localhost:9411/zipkin/

②Provider

在之前的工程cloud-provider-payment8001上进行修改

添加依赖:

<!--包含了sleuth+zipkin-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

添加配置:

spring:
zipkin:
base-url: http://localhost:9411 #zipkin Server的地址
sleuth:
sampler:
probability: 1 #采样率值介于0到1之间,1则表示全部采集(一般不为1,不然高并发性能会有影响)

在Controller中添加方法:

@GetMapping("/payment/zipkin")
public String paymentZipkin(){
return "paymentZipkin...";
}

③Consumer

在之前的工程cloud-consumer-order80(服务消费者)上进行更改

添加依赖:

<!--包含了sleuth+zipkin-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

添加配置:

spring:
zipkin:
base-url: http://localhost:9411 #zipkin Server的地址
sleuth:
sampler:
probability: 1 #采样率值介于0到1之间,1则表示全部采集(一般不为1,不然高并发性能会有影响)

在Controller中添加方法:

@GetMapping("/consumer/payment/zipkin")
public String paymentZipkin(){
String result = restTemplate.getForObject("http://localhost:8001" + "/payment/zipkin", String.class);
return result;
}

④测试

前面已经启动了zipkin Server了

启动Eureka注册中心7001,Order80,Payment8001

调用Order接口,Order接口调用了Payment的接口:

http://localhost/consumer/payment/zipkin

进入Zipkin面板查看:

查看服务依赖:

SpringCloud Sleuth链路追踪的更多相关文章

  1. Spring Cloud 系列之 Sleuth 链路追踪(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Sleuth 链路追踪(一) 本篇文章讲解 Sleuth 基于 Zipkin 存储链路追踪数据至 MySQL,Elas ...

  2. Spring Cloud 系列之 Sleuth 链路追踪(三)

    本篇文章为系列文章,未读前几集的同学请猛戳这里: Spring Cloud 系列之 Sleuth 链路追踪(一) Spring Cloud 系列之 Sleuth 链路追踪(二) 本篇文章讲解 Sleu ...

  3. Spring-Cloud之Sleuth链路追踪-8

    一.Spring Cloud Sleuth 是Spring Cloud 的一个组件,它的主要功能是在分布式系统中提供服务链路追踪的解决方案. 二.为什么需要Spring Cloud Sleuth? 微 ...

  4. SpringCloud之链路追踪整合Sleuth(十三)

    前言 SpringCloud 是微服务中的翘楚,最佳的落地方案. 在一个完整的微服务架构项目中,服务之间的调用是很复杂的,当其中某一个服务出现了问题或者访问超时,很 难直接确定是由哪个服务引起的,所以 ...

  5. SpringCloud(七)之SpringCloud的链路追踪组件Sleuth实战,以及 zipkin 的部署和使用

    一.前言 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案 ,并且兼容了zipkin,提供了REST API接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序 . ...

  6. Zipkin+Sleuth 链路追踪整合

    1.Zipkin 是一个开放源代码分布式的跟踪系统 它可以帮助收集服务的时间数据,以解决微服务架构中的延迟问题,包括数据的收集.存储.查找和展现 每个服务向zipkin报告计时数据,zipkin会根据 ...

  7. Spring Cloud 系列之 Sleuth 链路追踪(一)

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

  8. 十一、springcloud之链路追踪Sleuth

    一.背景 随着微服务的数量增长,一个业务接口涉及到多个微服务的交互,在出错的情况下怎么能够快速的定位错误 二.简介 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案, ...

  9. 学习一下 SpringCloud (五)-- 配置中心 Config、消息总线 Bus、链路追踪 Sleuth、配置中心 Nacos

    (1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...

  10. 分布式链路追踪系统Sleuth和ZipKin

    1.微服务下的链路追踪讲解和重要性 简介:讲解什么是分布式链路追踪系统,及使用好处 进行日志埋点,各微服务追踪. 2.SpringCloud的链路追踪组件Sleuth 1.官方文档 http://cl ...

随机推荐

  1. 【云原生 · Kubernetes】部署 kube-proxy 组件

    个人名片: 因为云计算成为了监控工程师‍ 个人博客:念舒_C.ying CSDN主页️:念舒_C.ying kube-proxy 运行在所有 worker 节点上,它监听 apiserver 中 se ...

  2. Java开发学习(四十二)----MyBatisPlus查询语句之条件查询

    一.条件查询的类 MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合. 这个我们在前面都有见过,比如查询所有和分页查询的时候,都有看到过一个Wrapper类, ...

  3. c++ const和指针

    const int *p: 定义指针,指向的变量的值不能修改(指向整型常量或普通整型,但值不能通过指针修改) int const *p: 同上 int * const p=&a: 一直指向a, ...

  4. java并发数据结构之CopyOnWriteArrayList

    CopyOnWriteArrayList是一个线程安全的List实现,其在对对象进行读操作时,由于对象没有发生改变,因此不需要加锁,反之在对象进行增删等修改操作时,它会先复制一个对象副本,然后对副本进 ...

  5. EPSS 解读:与 CVSS 相比,孰美?

    通用漏洞评分系统(CVSS)是当前应用最频繁的评分系统以评估安全漏洞的严重性.但是,由于该系统在评估漏洞和优先级排序方面存在不足而遭受批评.因此,有部分专业人士呼吁使用漏洞利用预测评分系统(EPSS) ...

  6. socket模块/TCP协议/黏包处理

    socket模块 如果我们需要编写基于网络进行数据交互的程序 意味着我们需要自己通过代码来控制我们之前 所学习的OSI七层(很繁琐 很复杂 类似于我们自己编写操作系统) socket类似于操作系统 封 ...

  7. ArcObjects SDK开发 017 在ArcObject SDK 中使用Toolbox

    1.Geoprocessor和IGPProcess Geoprocessor是ArcObjects SDK中定义Tool执行器.IGPProcess接口是ArcObjects SDK中定义的ArcTo ...

  8. 13-flask博客项目之restful api详解2-使用

    13-flask博客项目之restful api详解1-概念 13-flask博客项目之restful api详解1-概念 Flask-RESTful学习网站 英文:https://flask-res ...

  9. java线程基础知识整理

    目录 线程基本概念 1.java实现线程 2.线程的生命周期 3.线程常用的方法 3.1.sleep() 3.2.interrupt方法 3.3.stop方法 4.线程调度 4.1.常见的线程调度模型 ...

  10. linux开机自启动设置

    方法一:修改 /etc/rc.d/rc.local 文件/etc/rc.d/rc.local 文件会在 Linux 系统各项服务都启动完毕之后再被运行.所以想要脚本在开机后被运行的话,可以将自己脚本路 ...