【Spring Cloud】微服务链路跟踪Sleuth

目录

  • 为什么要使用微服务链路跟踪
    • 微服务的现状
    • 多服务协同工作
    • 复杂的调用链条容易出错
  • 微服务链路跟踪需要实现的需求
    • 实现监控
    • 决策
    • 避免技术债务
    • 快速定位故障
  • 微服务链路跟踪的技术要求
    • 低消耗
    • 应用透明
    • 延展性
    • 可控采样率
    • 可视化
  • Spring Cloud Sleuth
    • 简介
    • Spring Cloud Sleuth的4个特点
  • 使用Sleuth实现微服务跟踪
    • 1.添加依赖
    • 2.添加配置
    • 3.查看日志
    • 日志信息所包含的含义
  • Spring Cloud Sleuth 整合Zipkin
    • 任务背景
    • Zipkin
    • 构建Zipkin Server
      • 1.下载jar文件
      • 2.运行jar文件,启动服务
    • 整合
      • 1.添加依赖
      • 2.修改配置
        • 说明
      • 3.产生数据
      • 4.查看监控
        • 查看链路数据
        • 查看Zipkin Server监控
  • 使用消息中间件传输数据
    • zipkin的原理
    • 收集跟踪数据是使用HTTP请求的方式,带来的问题
    • 可以使用消息中间件解决
    • 实现
      • 1.添加依赖
      • 2.修改配置
      • 3.启动ZipkinServer
      • 4.启动demo-user-provider、demo-user-consumer
      • 5.产生数据
      • 6.查看监控
  • 存储跟踪数据
    • 数据丢失
    • 数据持久化存储
    • 实现
      • 1.创建zipkin数据库:从官网下载脚本
      • 2.启动ZipkinServer
      • 3.启动demo-user-provider、demo-user-consumer
      • 4.产生数据
      • 5.查看监控

为什么要使用微服务链路跟踪

微服务的现状

  • 随着业务的发展,单体架构变为微服务架构,并且系统规模也变得越来越大,各微服务间的调用关系也变得越来越复杂。

多服务协同工作

  • 在微服务的应用中,一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果多服务协同工作。

复杂的调用链条容易出错

  • 在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路
  • 在每条链路中任何一个依赖服务出现延迟超时或者错误都可能引起整个请求最后的失败。

在这里插入图片描述

微服务链路跟踪需要实现的需求

实现监控

  • 完备的监控系统可以提供及时、准确的性能报告,可以了解请求的路径、请求耗费的时间、网路延迟状态、单个业务逻辑耗费时间指标。

决策

  • 我们可以分析系统瓶颈、解决系统存在的问题,以及为当前和未来的决策提供基础数据。

避免技术债务

  • 系统会根据业务需求不断地进行演变,如果过去遗留的问题没处理好,则会对新的功能产生影响。
  • 如果没有跟踪技术,则会产生大量技术债务。技术债务的累计会对修改或升级带来更多的问题。

快速定位故障

  • 在微服务架构中,能在出现问题前预警问题,在出现问题后快速定位故障点非常重要。
  • 一个完备的系统需要提供快速检测、隔离和修复问题的方式。

微服务链路跟踪的技术要求

低消耗

  • 跟踪系统的本质是发现某个系统的性能或故障问题,所以它不能反过来影响被监控系统的性能。

应用透明

  • 应用透明即要求链路跟踪技术对业务系统是透明的,没有侵入性,不会影响开发人员开发业务。

延展性

  • 链路跟踪系统应能满足业务系统的发现需求。
  • 当系统越来越庞大和复杂后,链路追踪技术依然能快速地跟踪产生的数据,并及时地对数据进行统计和生成报表。

可控采样率

  • 可以通过设置采样率来平衡性能消耗和采样质量

可视化

  • 具有可视化的控制台也是链路跟踪的一个重要需求

Spring Cloud Sleuth

简介

  • Spring Cloud Sleuth为Spring Cloud实现了分布式跟踪解决方案,
  • 它在整个分布式系统中能跟踪一个请求的过程(包括数据采集,数据传输,数据存储,数据分析,数据可视化),
  • 捕获这些跟踪数据,就能构建微服务的整个调用链的视图,这是调试和监控微服务的关键工具。

Spring Cloud Sleuth的4个特点

  1. 提供链路追踪:通过sleuth可以很清楚的看出一个请求经过了哪些服务,可以方便的理清服务间的调用关系。
  2. 性能分析:通过sleuth可以很方便的看出每个采集请求的耗时,分析出哪些服务调用比较耗时,当服务调用的耗时随着请求量的增大而增大时,也可以对服务的扩容提供一定的提醒作用。
  3. 优化链路:对于频繁地调用一个服务,或者并行地调用等,可以针对业务做一些优化措施。
  4. 可视化:对于程序未捕获的异常,可以在zipkin界面上看到。

使用Sleuth实现微服务跟踪

1.添加依赖

分别为 demo-user-provider、demo-user-consumer项目添加依赖

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency>

2.添加配置

分别为 demo-user-provider、demo-user-consumer项目添加配置信息

spring:application:name: demo-user-consumer # 提供者服务是:demo-user-providersleuth:sampler:probability: 1 #设置抽样采集率
logging:level:#为了更详细地查看服务通讯时的日志信息,将sleuth的日志级别设置为dubugorg.springframework.cloud.sleuth: debug

3.查看日志

  • 依次运行项目demo-eureka-server、demo-user-provider、demo-user-consumer
  • postman访问消费者接口(要能够访问提供者服务的接口)
  • 在日志中查看跟踪信息
    在这里插入图片描述在这里插入图片描述

日志信息所包含的含义

在这里插入图片描述

  • demo-user-consumer:表示微服务的名称
  • 52e7dabd360d4ca5:是TranceId。一条链路中只有一个TranceId
  • 0bcba7f4505aeb01:是spanId。链路中的基本工作单元id
  • false: 是否将数据输出到其他服务中。

Spring Cloud Sleuth 整合Zipkin

任务背景

  • 通过Sleuth产生的调用链监控信息,让我们可以得知微服务之间的调用链路
  • 但是监控信息只输出到控制台始终不太方便查看。
  • 所以我们需要一个图形化的工具。这时候就轮到zipkin出场了。

Zipkin

  • Zipkin是Twitter开源的分布式跟踪系统,主要用来收集系统的时序数据,从而追踪系统的调用问题。
  • Zipkin提供了一个非常友好的管理界面,可以查看服务之间调用的依赖关系、服务之间调用的耗时情况等。
  • Zipkin官网地址:https://zipkin.io/

构建Zipkin Server

1.下载jar文件

在这里插入图片描述

  • zipkin官网下载
  • Maven仓库中下载
    • https://search.maven.org/
    • zipkin-server:2.12.9

2.运行jar文件,启动服务

  • 控制台输入 java -jar zipkin-server-2.12.9-exec.jar
  • http://localhost:9411
    在这里插入图片描述

整合

1.添加依赖

分别为demo-user-consumer、demo-user-provider再添加依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

2.修改配置

  • 分别修改demo-user-consumer、demo-user-provider 的application.yml
  • 在其中指定Zipkin Server地址和采样
spring:application:name: demo-user-consumer # 提供者服务是:demo-user-providersleuth:sampler:probability: 1 #设置抽样采集率zipkin:#指定Zipkin服务器的地址和端口base-url: http://localhost:9411#设置用HTTP方式传输数据sender:type: web
logging:level:#为了更详细地查看服务通讯时的日志信息,将sleuth和openfeign的日志级别设置为dubugorg.springframework.cloud.sleuth: debugorg.springframework.cloud.openfeign: debug
说明
  • 在开发、测试中配置文件中的spring.sleuth.sampler. probability属性设置为1.0,代表100%采样
  • 否则可能会忽略掉大量span,可能看不到想要查看的请求

3.产生数据

  • 使用postman多次访问消费者接口(要能够访问提供者服务的接口)

4.查看监控

  • 输入条件
  • 点击Find Traces查看
    • 点击某一个trace查看详细数据
查看链路数据

在这里插入图片描述

查看Zipkin Server监控

查看要素:

名称作用
Service Name服务名称,对应的是配置文件中spring.application.name的值,下拉选取
Span Name表示Span的名称, Span是Sleuth中的基本工作单元。all表示所有Span
Start time起始时间
End time截止时间
Duration表示持续时间,也就是Span从创建到关闭的时间
Limit表示查询数据的数量

使用消息中间件传输数据

zipkin的原理

  • zipkin的原理是服务之间的调用关系会通过HTTP方式上报到zipkin-server端,
  • 然后我们再通过zipkin-ui去调用查看追踪服务之间的调用链路

收集跟踪数据是使用HTTP请求的方式,带来的问题

  • 耦合性,都需要连接到Zipkin Server
  • 不稳定性,网络出现问题就无法保证收集到跟踪数据

可以使用消息中间件解决

  • 先将需要收集的数据发送到消息中间件中
  • 然后Zipkin Server再从消息中间件取出数据分析
  • RabbitMQ

在这里插入图片描述

实现

1.添加依赖

  • 分别为demo-user-consumer、demo-user-provider添加依赖
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>

2.修改配置

  • 修改demo-user-consumer、demo-user-provider 的application.yml
spring:application:name: demo-user-consumer # 提供者服务是:demo-user-providersleuth:sampler:probability: 1zipkin:base-url: http://localhost:9411sender:type: rabbitrabbitmq:host: 192.168.29.80port: 5672username: adminpassword: adminvirtual-host: /
logging:level:org.springframework.cloud.sleuth: debug

3.启动ZipkinServer

输入命令:

java -jar zipkin-server-2.12.9-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.29.80:5672

4.启动demo-user-provider、demo-user-consumer

5.产生数据

  • 使用postman多次访问消费者接口(要能够访问提供者服务的接口)

6.查看监控

  • 输入条件
  • 点击Find Traces查看
    • 点击某一个trace查看详细数据

存储跟踪数据

数据丢失

  • Zipkin Server对数据的存储默认是在内存中的
  • 在企业生产环境中,一旦Service关闭重启或者服务崩溃,就会导致历史数据消失,需要持久化这些数据。

数据持久化存储

  • MySQL
  • Elasticsearch

实现

1.创建zipkin数据库:从官网下载脚本

  • 官网:https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql

2.启动ZipkinServer

  • 启动脚本

    java -jar zipkin-server-2.12.9-exec.jar --MYSQL_HOST=192.168.2.220 --MYSQL_TCP_PORT=3306 --MYSQL_USER=root --MYSQL_PASS=123456 --MYSQL_DB=zipkin --STORAGE_TYPE=mysql  --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.29.80:5672
    

3.启动demo-user-provider、demo-user-consumer

4.产生数据

  • 使用postman多次访问消费者接口(要能够访问提供者服务的接口)

5.查看监控

  • 输入条件
  • 点击Find Traces查看
  • 点击某一个trace查看详细数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/340630.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shell脚本快速入门

为什么要学shell&#xff1f;能做什么&#xff1f; 答&#xff1a;CI/CD 持续集成&#xff0c;自动化部署作业方式&#xff0c;需要将一系列linux命令程序化&#xff0c;shell 就能做到&#xff0c;提高运维人员的工作效率。 指定解析器&#xff1a; (1) shell解析器 #…

Linux网络-自定义协议、序列化和反序列化、网络计算服务器的实现和Windows端客户端

文章目录 前言一、自定义协议传结构体对象 序列化和反序列化什么是序列化&#xff1f;反序列化 二、计算器服务端&#xff08;线程池版本&#xff09;1.main.cc2.Socket.hpp3.protocol.hpp4.Calculator.hpp5.serverCal.hpp6.threadPool.hpp7.Task.hpp8. log.hpp 客户端Windows客…

小白级教程—安装Ubuntu 20.04 LTS服务器

下载 本教程将使用20.04版进行教学 由于官方速度可能有点慢&#xff0c;可以下方的使用清华镜像下载 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/ 点击20.24版本 选择 ubuntu-20.04.6-live-server-amd64.iso 新建虚拟机 下载好后 我们使用 VMware 打开它 这里选…

一篇文章讲透排序算法之归并排序

0.前言 本篇文章将详细解释归并排序的原理&#xff0c;以及递归和非递归的代码原理。 一.概念 归并排序是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使…

苹果或面临退一赔三,新iPad悄悄砍了核心规格

618 快过去了一半&#xff0c;各家都卖的如火如荼&#xff0c;这其中当属苹果搞得最热火朝天。 某东手机竞速榜中&#xff0c;iPhone15 Pro Max 销量稳坐头把交椅&#xff0c;平板方面虽然没有统计表&#xff0c;但是相信销量也是不差。 加上今年刚刚发布的新系列的 iPad&…

求助!什么软件可以人声分离?手机上可以进行人声分离操作吗?

在数字时代&#xff0c;音频处理变得越来越重要&#xff0c;而人声分离技术则是其中的一项关键技术。很多人可能都有过这样的疑问&#xff1a;什么软件可以实现人声分离&#xff1f;手机上能否进行人声分离操作&#xff1f;今天&#xff0c;我们就来为大家解答这些问题&#xf…

提取伴奏与人声分离软件:5款手机必备音频软件

在数字音乐的浪潮中&#xff0c;音频处理软件已经成为手机用户不可或缺的工具。特别是在音乐制作、卡拉OK伴奏制作以及日常音频编辑中&#xff0c;人声与伴奏的分离显得尤为重要。本文将为您介绍五款免费且实用的手机音频软件&#xff0c;它们都具有人声与伴奏分离的功能&#…

spring boot 3.x版本 引入 swagger2启动时报错

一&#xff0c;问题 Spring Boot 3.x版本的项目里&#xff0c;准备引入Swagger2作为接口文档&#xff0c;但是项目启动报错&#xff1a; java.lang.TypeNotPresentException: Type javax.servlet.http.HttpServletRequest not present at java.base/sun.reflect.generics.…

安装windows x64的开源录屏软件GifCapture

下载压缩包 GIF软件 安装报错 下载.NET桌面版运行 .NET 即可在最近安装部分找到GifCapture打开使用

容器项目之前后端分离

容器化部署ruoyi项目 #需要的镜像nginx、java、mysql、redis、 #导入maven镜像、Java镜像和node镜像 docker load -i java-8u111-jdk.tar docker load -i maven-3.8.8-sapmachine-11.tar docker load -i node-18.20.3-alpine3.20.tar #拉取MySQL和nginx镜像 docker pull mysql…

【JavaScript】ECMAS6(ES6)新特性概览(二):解构赋值、扩展与收集、class类全面解析

🔥 个人主页:空白诗 🔥 热门专栏:【JavaScript】 文章目录 🌿 引言五、 Destructuring Assignment - 解构赋值,数据提取的艺术 🎨📌 数组解构📌 对象解构&

文件夹突变解析:类型变文件的数据恢复与预防

在数字化时代&#xff0c;文件夹作为我们存储和组织数据的基本单元&#xff0c;其重要性不言而喻。然而&#xff0c;有时我们可能会遇到一种令人困惑的情况——文件夹的类型突然变为文件&#xff0c;导致无法正常访问其中的内容。这种现象不仅会影响我们的工作效率&#xff0c;…

Solon2分布式事件总线的应用价值探讨

随着现代软件系统的复杂性日益增加&#xff0c;微服务架构逐渐成为开发大型应用的主流选择。在这种架构下&#xff0c;服务之间的通信和协同变得至关重要。Solon2作为一个高性能的Java微服务框架&#xff0c;其分布式事件总线&#xff08;Distributed Event Bus&#xff09;为微…

FastAPI给docs/配置自有域名的静态资源swagger-ui

如果只是要解决docs页面空白的问题&#xff0c;可先看我的这篇博客&#xff1a;FastAPI访问/docs接口文档显示空白、js/css无法加载_fastapi docs打不开-CSDN博客 以下内容适用于需要以自用域名访问swagger-ui的情况&#xff1a; 1. 准备好swagger-ui的链接&#xff0c;如&am…

读后感:《SQL数据分析实战》运营SQL实用手册

学习SQL&#xff0c;先有用起来&#xff0c;有了使用价值&#xff0c;之后才是去了解它的原理&#xff0c;让使用更加顺畅。 在大部分业务场景中&#xff0c;通过SQL可以快速的实现数据处理与统计。《SQL数据分析实战》区别于其他工具书&#xff0c;它并没有介绍SQL是什么&…

为何限定项目的 Node.js 版本

首先区分三个概念nvm&#xff0c;npm&#xff0c;nodejs。 Node.js: Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境。它允许开发者使用 JavaScript 在服务器端编写应用程序,而不仅限于在浏览器中运行 JavaScript。Node.js 提供了一系列内置的模块和 API,使得开发…

Redis之常用实战场景

1.Redis数据丢失场景 1.1 持久化丢失 采用RDB或者不持久化&#xff0c;就会有数据丢失&#xff0c;因为是手动或者配置以快照的形式来进行备份。 解决: 启用AOF&#xff0c;以命令追加的形式进行备份&#xff0c;但是默认也会有1s丢失&#xff0c;这是在性能与数据安全性中寻…

2021 hnust 湖科大 数据结构课设报告+代码

2021 hnust 湖科大 数据结构 课设报告代码 描述 hnust大一下学期数据结构课设的报告和源代码&#xff08;放在了附录里面&#xff09; 目录 项目名称完成日期页码复杂度分析(Ⅰ)2021-06-211—2复杂度分析(Ⅱ)2021-06-213—4Josephus问题(Ⅰ)2021-06-215—6Josephus问题(Ⅱ…

做抖音小店掌握这些方法,轻松和达人合作!

大家好&#xff0c;我是喷火龙。 抖店的新手商家想要出单&#xff0c;最快速稳定的出单方法无疑是与达人合作&#xff0c;通过达人的自身流量来帮助我们进行产品的转化。 接下来我就教大家怎么和达人合作。 首先我们可以通过蝉妈妈、达人广场、抖音私信等方式来找到我们想要…

Linux之线程互斥

线程简单封装 试着用线程控制力介绍的一些系统调用, 将线程的创建、执行和等待等都封装起来. 我们在程序中指定一个函数Print, 让多个线程不断地执行该函数. myThread.hpp #pragma once #include <functional> #include <pthread.h> #include <string>//假…