【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.mzph.cn/news/845403.shtml

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

相关文章

自动控制:控制系统的稳定性

自动控制&#xff1a;控制系统的稳定性 在自动控制领域&#xff0c;控制系统的稳定性是一个至关重要的问题。稳定性决定了系统在受到扰动后是否能够恢复到平衡状态。本文将介绍控制系统稳定性的基本概念、如何利用特征值分析稳定性&#xff0c;并通过具体示例和Python代码展示…

【洛谷B3643】图的存储 解题报告

洛谷B3643 - 图的存储 题目描述 给定一个 n n n 个顶点 m m m 条边的无向图。请以邻接矩阵和邻接表的形式输出这一张图。 输入格式 第一行输入两个正整数 n n n 和 m m m&#xff0c;表示图的顶点数和边数。 第二行开始&#xff0c;往后 m m m 行&#xff0c;每行输入…

Docker中布置Jenkins实现Android项目的自动化构建

因项目需要&#xff0c;要在服务器上使用Jenkins完成Android项目的自动化构建&#xff0c;但服务器上登录的账户没有管理员权限&#xff0c;无法用sudo命令&#xff0c;因此需要把相应环境布置在docker中。 环境搭建 docker容器相关命令 创建容器 docker create -it contai…

【Python】解决Python报错:AttributeError: ‘function‘ object has no attribute ‘xxx‘

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

未来已来, AI将作为超级工具?

人工智能时代已来 1.AI将作为超级工具&#xff1a;AI是推动全产业数字化转型的高效工具&#xff0c;机遇比互联网时代大10倍&#xff0c;但只有1/3的机会留给初创企业。 2.硅谷AI市场分类中&#xff0c;特别看好开源平台&#xff0c;其将为初创企业和大企业提供更多选择。 3.…

C# 字节数组(byte[])拼接的性能对比测试

将C#中的三种字节数组拼接方式的性能做了一个对比测试&#xff0c;DEMO程序代码如下&#xff1a; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Byte数组拼接测…

使用 DuckDuckGo API 实现多种搜索功能

在日常生活中&#xff0c;我经常使用搜索引擎来查找信息&#xff0c;如谷歌和百度。然而&#xff0c;当我想通过 API 来实现这一功能时&#xff0c;会发现这些搜索引擎并没有提供足够的免费 API 服务。如果有这样的免费 API, 就能定时获取“关注实体”的相关内容&#xff0c;并…

Gbase 国产数据库

参考&#xff1a;参考&#xff1a; 5分钟学会Linux环境GBase 8t安装和部署 - 光洋山 - twt企业IT交流平台 (talkwithtrend.com)https://www.talkwithtrend.com/Article/197237 视频 GBase 8s快速入门-功能简介与演示-大数据教程-腾讯课堂 (qq.com)https://ke.qq.com/course/…

ADB日常使用命令

【ADB全称 Android Debug Bridge】 是Android SDK中的一个命令行工具adb命令可以直接操作管理Android模拟器或真实的Android设备&#xff08;手机&#xff09; 建立PC和模拟器连接 # 建立连接 adb connect 127.0.1: 模拟器端口号〈逍遥模拟器21503〉 # 验证是否连接成功 adb d…

整数乘除法练习题

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<time.h> #include<Windows.h>void show1(); .//开始界面 int getchoice(); //选择界面 int dowork(int n); //随机做乘除法 int num(); //用户确定做题的数量 v…

OrangePi AIpro 变身 Android 打包机

主板基本信息介绍 OrangePi AIpro&#xff0c;是香橙派联合华为精心打造&#xff0c;建设人工智能新生态而设计的一款开发板&#xff0c;这次为大家分享下我上手的这款 OrangePi AIpro 8GB&#xff08;算力达8TOPS&#xff09; 的一些小小的经验。 基本参数如下&#xff1a; …

首创十八道工艺,口味王引领槟榔产业高质量发展

说到槟榔&#xff0c;相信大伙都不会陌生&#xff0c;槟榔的历史可以追溯到汉代&#xff0c;不少文献有过记载&#xff0c;如汉代的沈约著的《咏竹槟榔盘》中提到“荐羞虽百品&#xff0c;所贵浮天实”&#xff1b;唐朝“诗仙”李白更是写道“何时黄金盘&#xff0c;一斛荐槟榔…

分享 ASP.NET Core Web Api 中间件获取 Request Body 两个方法

不废话&#xff0c;直接上正文。_ 方法一 思路&#xff1a;利用 BodyReader 直接读取 HttpContext 的 Request Body&#xff0c;再反序列化 var reqStream context.Request.BodyReader.AsStream(); var jsonObj JsonSerializer.Deserialize<CheckAndParsingMiddlewareM…

buuctf的RSA(五)

[RoarCTF2019]RSA 一看到题目&#xff0c;我就有些蒙了&#xff0c;A是代表了什么&#xff0c; 先来分解n 接下来可以暴力破解e了&#xff0c;因为e没有给出来&#xff0c;应该不会太大&#xff0c;猜测是四位数字 import gmpy2 import libnum from Crypto.Util.number import…

网卡配置基础知识

1、网络设置方式 首先科普下Virtual Box虚拟机的几种主流的网络设置方式&#xff0c;官方文档&#xff1a; 2解释 Host-only&#xff1a;仅主机模式 虚拟机和宿主机、虚拟机之间能互通&#xff0c;但是不能访问外网&#xff0c;虚拟机和宿主机同网段的其他主机不能互通这种…

数据结构---栈队列

栈和队列是我们数据结构中经常使用的数据结构&#xff0c;所以现在来了解一下栈和队列。 栈 特点&#xff1a; 栈是一种特殊的线性表&#xff0c;其中进行数据插入和弹出的部分叫做栈顶&#xff0c;另一端叫做栈底。 只允许数据从栈顶压入&#xff0c;从栈顶弹出即先进后出的…

最佳实践:REST API 的 HTTP 请求参数

HTTP 请求中的请求参数解释 当客户端发起 HTTP 请求 时&#xff0c;它们可以在 URL 末尾添加请求参数&#xff08;也叫查询参数或 URL 参数&#xff09;来传递数据。这些参数以键值对的形式出现在 URL 中&#xff0c;方便浏览和操作。 请求参数示例 以下是一些带有请求参数的…

JS-Lodash工具库

文档&#xff1a;Lodash Documentation orderBy函数&#xff1a;根据条件进行排序 注&#xff1a;第一个是要排序的数组&#xff0c;第二个是根据什么字段进行排序&#xff0c;第三个是排序的方式&#xff08;desc倒序&#xff09; 安装方式&#xff1a;Lodash npm i lodash…

小型企业网络组网与配置仿真实验

实验要求如下: 我这里以学号46为例 一、IP 地址规划表 &#xff08;一&#xff09;主类网络 &#xff08;二&#xff09;子网划分 需要自己计算有效ip范围 在C类主网络192.168.46.0/24中&#xff0c;我们需要先了解这个网络的子网掩码为255.255.255.0&#xff0c;其二进制…

『ZJUBCA MeetUP』 5月25日线下活动——Aptos 链的动态与应用

2024 求是创新 ZJUBCA Sponsored by the ALCOVE Community TIME&#xff1a;2024/05/25 ADD&#xff1a;浙江大学紫金港校区 --- Alcove 是 Aptos 公链与 Alibaba Cloud 共同打造的亚洲首个 Move 开发者社区&#xff0c;致力于支持开发者使用 Move 语言构建下一代 Web3 应用&am…