【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-provider
  sleuth:
    sampler:
      probability: 1 #设置抽样采集率
logging:
  level:
    #为了更详细地查看服务通讯时的日志信息,将sleuth的日志级别设置为dubug
    org.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-provider
  sleuth:
    sampler:
      probability: 1 #设置抽样采集率
  zipkin:
    #指定Zipkin服务器的地址和端口
    base-url: http://localhost:9411
    #设置用HTTP方式传输数据
    sender:
      type: web
logging:
  level:
    #为了更详细地查看服务通讯时的日志信息,将sleuth和openfeign的日志级别设置为dubug
    org.springframework.cloud.sleuth: debug
    org.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-provider
  sleuth:
    sampler:
      probability: 1
  zipkin:
    base-url: http://localhost:9411
    sender:
      type: rabbit
  rabbitmq:
    host: 192.168.29.80
    port: 5672
    username: admin
    password: admin
    virtual-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查看详细数据

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

‘yarn’不是内部或外部命令,也不是可运行的程序或批处理文件。

目录 问题点 解决方式 # 安装 # 版本 # 本地发生变化&#xff08;了解&#xff09; # 安装项目依赖 新问题 解决方式 问题点 在vscode中&#xff0c;点击dev运行&#xff0c;项目报错【Q1】 * 正在执行任务: yarn run dev yarn : 无法将“yarn”项识别为 cmdlet、函数…

代码随想录算法训练营第26天(py)| 回溯 | 39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 力扣链接 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明&#xff1a; 所有数字&#xff08;包括 target&#xff09;都是正整数…

利用MaxKB+Ollama:搭建智能问答系统_Ubuntu部署maxkb

Docker方式&#xff0c;不建议使用 即使maxKB和ollama在同一目录下&#xff0c;API域名也显示无效。 Ollama下载网址&#xff1a;Download Ollama on Linux Linux下载&#xff1a;curl -fsSL https://ollama.com/install.sh | sh The Ollama API is now available at 127.0.…

PE文件结构详解之头信息解析

PE文件结构详解 一、前言1.概述2.PE文件结构3.所用工具 二、DOS头&#xff08;DOS Header&#xff09;解析1.作用2.图例3.参数详解4.总结 三、DOS Stub1.作用2.图例 四、NT头&#xff08;NT Header&#xff09;解析1.作用2.PE标识图例3.文件头&#xff08;COFF头&#xff09;图…

TinyMCE 富文本编辑器:打造个性化编辑体验

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 TinyMCE 富文本编辑器&#xff1a;打造个性化编辑体验 应用场景介绍 TinyMCE 是一款功能强大的富文本编辑器&#xff0c;广泛应用于网站内容管理、博客创作、在线文档编辑等场景。它提供了一系列丰富的编辑功…

LightDB pro*c迁移指南(游标模块)

文章目录 一、不使用SQLDA描述符范围的游标操作1.1 oracle 案例1.1.1 使用游标获取数据1.1.2 对于fetch结果集怎么去利用 1.2 LightDB 案例1.2.1 使用游标获取数据1.2.2 对于fetch结果集怎么去利用 3 总结&#xff1a;不同项 二、使用SQLDA描述符范围的游标操作2.1 Oracle样例2…

基于java的CRM客户关系管理系统(五)

目录 第五章 系统的详细设计与实现 5.1 持久层设计 5.1.1 创建关系映射 5.1.2 与数据库的连接 5.1.3 Hibernate的ORM映射 5.1.4 Struts的配置文件 5.1.5 Spring 的配置文件 5.1.6 DAO层设计 5.2 逻辑业务层设计 5.2.1 业务逻辑类的实现 前面内容请移步 基于java的C…

Jmeter干货分享:当你的Log viewer不显示日志时,可能是引入的Jar包冲突导致

问题描述 近期使用Jmeter时发现了一个非常奇怪的问题&#xff0c;就是Jmeter是可以正常使用运行脚本&#xff0c;但是在Log viewer中确没有任何日志&#xff0c;如下图&#xff1a; 问题排查过程 真是百思不得其解啊&#xff0c;在网上各种获取资料&#xff0c;大多数都是说跟…

001----flask

flask---001 flask与django对比今日概要问答今日详细1.flask快速使用1.2 快速使用flask1.3 用户名密码登录 flask与django对比 django是个大而全的框架&#xff0c;flask是一个轻量级的框架。 django内部为我们提供了非常多的组件&#xff1a;orm/session/cookie/admin/from/mo…

【学习】企业如何选择一个合适的DCMM咨询机构

DCMM是我国首个数据管理领域正式发布的国家标准。旨在帮助企业利用先进的数据管理理念和方法&#xff0c;建立和评价自身数据管理能力&#xff0c;持续完善数据管理组织、程序和制度&#xff0c;充分发挥数据在促进企业向信息化、数字化、智能化发展方面的价值。该标准借鉴了国…

Python学习从0开始——Kaggle机器学习003总结

Python学习从0开始——Kaggle机器学习003总结 一、加载及浏览数据二、机器学习模型三、模型验证四、欠拟合和过拟合五、随机森林 一、加载及浏览数据 # 路径 melbourne_file_path ../input/melbourne-housing-snapshot/melb_data.csv # 读取 melbourne_data pd.read_csv(mel…

为什么大家都要考CDA数据分析师认证

为什么学习数据分析&#xff1f; 2024年&#xff0c;是一个被数据影响的时代。数据&#xff0c;如同无形的燃料&#xff0c;驱动着现代社会的运转。从全球互联网的用户每天产生的2.5亿TB数据&#xff0c;到制造业的传感器、金融交易、医疗病历等领域的海量信息&#xff0c;数据…

排序算法——归并排序以及非递归实现

一、归并排序思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列…

使用Python绘制瀑布图

使用Python绘制瀑布图 瀑布图效果代码 瀑布图 瀑布图&#xff08;Waterfall Chart&#xff09;是一种数据可视化工具&#xff0c;用于展示累积数值的变化&#xff0c;尤其适合于展示随时间或过程中的增减变化。它通常用于财务分析&#xff0c;如展示收入、支出和净利润的变化过…

分离式光电液位传感器与浮球开关相比具有哪些优势

分离式光电液位传感器与浮球开关相比有哪些优势&#xff1f;分离式光电液位传感器依据光学原理&#xff0c;在传统光学传感器的基础上进行了改进。其特点是将光学组件分离出来&#xff0c;置于水箱外部感应&#xff0c;而传感器本身则独立于水箱外。这种设计有效解决了浮球开关…

CPU内部结构窥探·「1」

CPU内部逻辑运算单元是如何运行的 引言 中央处理器&#xff08;CPU&#xff09;是计算机的大脑&#xff0c;负责处理各种计算任务。在CPU里面&#xff0c;有一个重要的部分叫做逻辑运算单元&#xff08;ALU&#xff0c;Arithmetic Logic Unit&#xff09;。ALU就像一个超级计…

JS面试题:hash和history的区别

一、hash 模式和 history 模式的介绍 由于 Vue 项目为单页面应用&#xff0c;所以整个项目在开发和构建过程中&#xff0c;仅存在一个HTML物理文件。通过路由系统可以实现将项目的组件与可访问的URL路径进行绑定。由于Vue项目只有一个HTML物理文件&#xff0c;切换页面时既需要…

vivado BD_INTF_NET、BD_INTF_PIN

BD_INTF_NET 描述 接口是一组信号&#xff0c;它们共享一个共同的功能&#xff0c;同时包含 单个信号和多条总线。例如&#xff0c;AXI4Lite主机包含一个 单个信号的数量加上多条总线&#xff0c;这些都是制作 联系通过将这些信号和总线分组到一个接口中&#xff0c;Vivado IP积…

VisualStudio中:如果某个项目不显示SVN的show log等,而其他项目都正常

VisualStudio中&#xff1a;如果某个项目不显示SVN的show log等&#xff0c;而其他项目都正常。说明大概率是当前项目的问题&#xff0c;而不是VisualStudio的问题&#xff01; 1.这个项目内有一个“隐藏”文件夹.svn 》先删除&#xff01; 2.如果外层文件夹有红色感叹号&…

英伟达剧透新一代最强 GPU;奥特曼公开回应 AI 语音争议丨 RTE 开发者日报 Vol.217

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」&#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…