【SpringCloud Alibaba】(十二)学习 Sleuth + ZipKin

news2024/11/14 17:54:11

目录

  • 1、ZipKin 核心架构
    • 1.1、ZipKin 概述
    • 1.2、ZipKin 核心架构
  • 2、集成 ZipKin
    • 2.1、下载安装 ZipKin 服务端
    • 2.2、集成 ZipKin 客户端
  • 3、ZipKin 数据持久化
    • 3.1、ZipKin 数据持久化到 MySQL

在前面整合 Sleuth 实现链路追踪时,我们是通过查看日志的情况来了解系统调用的链路情况,这并不是一种很好的解决方案,如果系统所包含的微服务越来越多,通过查看日志的方式来分析系统的调用是非常复杂的,在实际项目中根本不可行。此时,我们可以将 Sleuth 和 ZipKin 进行整合,利用 ZipKin 将日志进行聚合,将链路日志进行可视化展示,并支持全文检索。

1、ZipKin 核心架构

Zipkin 是 Twitter 的一个开源项目,它基于 Google Dapper 论文实现,可以收集微服务运行过程中的实时链路数据,并进行展示

1.1、ZipKin 概述

Zipkin 是一种分布式链路跟踪系统,能够收集微服务运行过程中的实时调用链路信息,并能够将这些调用链路信息展示到 Web 界面上供开发人员分析,开发人员能够从 ZipKin 中分析出调用链路中的性能瓶颈,识别出存在问题的应用程序,进而定位问题和解决问题。

1.2、ZipKin 核心架构

ZipKin 的核心架构图如下所示:

在这里插入图片描述

其中,ZipKin 核心组件的功能如下所示:

  • Reporter:ZipKin 中上报链路数据的模块,主要配置在具体的微服务应用中。
  • Transport:ZipKin 中传输链路数据的模块,此模块可以配置为 Kafka,RocketMQ、RabbitMQ 等。
  • Collector:ZipKin 中收集并消费链路数据的模块,默认是通过 http 协议收集,可以配置为 Kafka消费。
  • Storage:ZipKin 中存储链路数据的模块,此模块的具体可以配置为 ElasticSearch、Cassandra 或者 MySQL,目前ZipKin支持这三种数据持久化方式。
  • API:ZipKin 中的 API 组件,主要用来提供外部访问接口。比如给客户端展示跟踪信息,或是开放给外部系统实现监控等。
  • UI: ZipKin 中的 UI 组件,基于 API 组件实现的上层应用。通过 UI 组件用户可以方便并且很直观地查询和分析跟踪信息。
  • Zipkin 在总体上会分为两个端,一个是 Zipkin 服务端,一个是 Zipkin 客户端,客户端主要是配置在微服务应用中,收集微服务中的调用链路信息,将数据发送给 ZipKin 服务端

2、集成 ZipKin

Zipkin 总体上分为服务端和客户端,我们需要下载并启动 ZipKin 服务端的 Jar 包,在微服务中集成ZipKin 的客户端

2.1、下载安装 ZipKin 服务端

1、下载 ZipKin 服务端 Jar 文件

下载地址

我通过浏览器下载的 ZipKin 服务端 Jar 文件为:zipkin-server-2.14.1-exec.jar

2、在命令行输入如下命令启动 ZipKin 服务端

java -jar zipkin-server-2.14.1-exec.jar

3、由于 ZipKin 服务端启动时,默认监听的端口号为 9411,所以,在浏览器中输入 http://localhost:9411 链接就可以打开 ZipKin 的界面,如下所示:

在这里插入图片描述

2.2、集成 ZipKin 客户端

1、在每个微服务(用户微服务 shop-user,商品微服务 shop-product,订单微服务 shop-order,网关服务 shop-gateway)中添加 ZipKin 依赖,如下所示:

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

2、在网关服务 shop-gatewayapplication.yml 文件中添加如下配置:

spring:
  sleuth:
    sampler:
      probability: 1.0                     # 采样率,0.0-1.0,1.0为全部采集
  zipkin:
    base-url: http://localhost:9411        # zipkin 服务地址
    discovery-client-enabled: false        # 关闭服务发现【关闭服务发现,使Nacos将其当成一个URL,不要按服务名处理】

3、分别启动用户微服务,商品微服务,订单微服务和服务网关,在浏览器中访问链接http://localhost:10001/server-order/order/submit_order?userId=1001&productId=1001&count=1

4、点击 Zipkin 界面上的【查找】按钮,如下所示:

在这里插入图片描述

点击后的界面:

在这里插入图片描述

可以看到,点击【查找】按钮后,会出现一个请求链路,包含:网关服务 server-gateway 耗时 405.302 毫秒,订单微服务 server-order 耗时 395.911 毫秒,用户微服务 server-user 耗时70.689 毫秒,商品微服务 server-product 耗时 155.499 毫秒

5、点击 ZipKin 界面上显示的调用链路,如下所示:

在这里插入图片描述

点开后的界面如下所示:

在这里插入图片描述

可以非常清晰的看到整个调用的访问链路。

我们还可以点击具体的节点来查看具体的调用信息。例如:我们点击网关微服务查看网关的具体链路,如下所示:

在这里插入图片描述

点开后的效果如下所示:

在这里插入图片描述

接下来,查看下订单微服务的调用链路具体信息,如下所示:

在这里插入图片描述

点开后的效果如下所示:

在这里插入图片描述

可以看到,通过 ZipKin 能够查看服务的调用链路,并且能够查看具体微服务的调用情况。我们可以基于 ZipKin 来分析系统的调用链路情况,找出系统的瓶颈点,进而进行针对性的优化。

另外,ZipKin 中也支持下载系统调用链路的 Json 数据,如下所示:

在这里插入图片描述

3、ZipKin 数据持久化

我们实现了在项目中集成 ZipKin,但是此时我们集成 ZipKin 后,ZipKin 中的数据是保存在系统内存中
的,如果我们重启了 ZipKin,则保存在系统内存中的数据就会丢失,那我如何避免数据丢失呢?

ZipKin 支持将数据进行持久化来防止数据丢失,可以将数据保存到 ElasticSearch、Cassandra 或 MySQL 中。

3.1、ZipKin 数据持久化到 MySQL

1、将 Zipkin 数据持久化到 MySQL,我们需要知道 MySQL 的数据表结构,ZipKin 提供了 MYSQL 脚本

在这里插入图片描述

将下载后的 MySQL 脚本放到了网关服务 shop-gatewayresources 目录下的 scripts 目录下:

在这里插入图片描述

2、在 MySQL 数据库中新建 zipkin 数据库,并运行mysql.sql脚本,,运行脚本后的效果如下所示:

在这里插入图片描述

在 zipkin 数据库中新建了 zipkin_annotationszipkin_dependencieszipkin_spans 三张数据表

3、启动 ZipKin 时指定 MySQL 数据源,如下所示:

java -jar zipkin-server-2.14.1-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=123456

4、启动 ZipKin 后,在浏览器中访问链接 http://localhost:10001/server-order/order/submit_order?userId=1001&productId=1001&count=1

5、查看 zipkin 数据库中的数据,发现 zipkin_annotations 数据表与 zipkin_spans 数据表已经存在系统的调用链路数据

  • zipkin_annotations 数据表部分数据如下所示:

在这里插入图片描述

  • zipkin_spans 数据表部分数据如下所示

在这里插入图片描述

可以看到,ZipKin 已经将数据持久化到 MySQL 中,重启 ZipKin 后就会从 MySQL 中读取数据,数据也不会丢失了

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

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

相关文章

【书生大模型实战营】进阶岛 第2关 Lagent 自定义你的 Agent 智能体

文章目录 【书生大模型实战营】进阶岛 第2关 Lagent 自定义你的 Agent 智能体学习任务Lagent 介绍环境配置Lagent Web Demo 使用基于 Lagent 自定义智能体 【书生大模型实战营】进阶岛 第2关 Lagent 自定义你的 Agent 智能体 学习任务 使用 Lagent 自定义一个智能体&#xff…

Nginx: 负载均衡基础配置, 加权轮序, hash算法, ip_hash算法, least_conn算法

负载均衡 在真正的反向代理场景中&#xff0c;必然涉及到的一个概念&#xff0c;就是负载均衡所谓负载均衡&#xff0c;也就是将Nginx的请求发送给后端的多台应用程序服务器通常的应用程序服务器&#xff0c;后面的每台服务器都是一个同等的角色&#xff0c;提供相同的功能 用…

阿里巴巴发布 Qwen2-VL 人工智能模型,具备先进的视频分析和推理能力

中国阿里巴巴集团的云计算部门阿里云周四宣布推出一款名为 Qwen2-VL 的新型人工智能模型&#xff0c;该模型具有高级视觉理解能力和多语言对话能力。 该公司在 Qwen-VL 人工智能模型的基础上&#xff0c;历时一年研发出了新模型&#xff0c;并表示它可以实现对长度超过 20 分钟…

easy_spring_boot Java 后端开发框架

Easy SpringBoot 基于 Java 17、SpringBoot 3.3.2 开发的后端框架&#xff0c;集成 MyBits-Plus、SpringDoc、SpringSecurity 等插件&#xff0c;旨在提供一个高效、易用的后端开发环境。该框架通过清晰的目录结构和模块化设计&#xff0c;帮助开发者快速构建和部署后端服务。…

基于Java+SpringBoot+Vue的学生评奖评优管理系统的设计与实现

基于JavaSpringBootVue的学生评奖评优管理系统的设计与实现 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345; 某信 gzh 搜索【智…

CGAL 2D Polygons

CGAL 2D Polygons 简单概述 CGAL 2D Polygons使用。 简述 2D Polygon多边形是由一条封闭的边链表组成。对于多边形的操作有若干种常见的算法&#xff0c;有些算法要求多边形是简单多边形。如果边不相交&#xff0c;则多边形为简单多边形&#xff0c;除非连续的边相交于它们的…

django外键表查询存储删除

查询 之前用get 现在用filter,get返回对象&#xff0c;filter返回列表django model的get和filter方法的区别_django模型objects.get-CSDN博客 存储 删除

[001-07-001].Redis中的BigKey使用分析

1、常见面试题&#xff1a; 1.阿里的广告平台&#xff0c;海量数据里面查询某一固定前缀的key2.小红书&#xff0c;如何在生产限制keys*/flushdb/flushall等危险命令以防止误删除误使用3.美团&#xff0c;MEMORU USAGE命令你使用过吗4.Bikey问题&#xff0c;多大算big&#xf…

Spring之配置类解析源码解析

解析配置类 解析配置类流程图&#xff1a;https://www.processon.com/view/link/5f9512d5e401fd06fda0b2dd 解析配置类思维脑图&#xff1a;https://www.processon.com/view/link/614c83cae0b34d7b342f6d14 在启动Spring时&#xff0c;需要传入一个AppConfig.class给Appli…

VMware安装Ubuntu Linux Server操作系统

本文主要描述在VMware虚拟机上安装Ubuntu Linux Server操作系统&#xff0c;本版本集成kubernetes云原生对应的microk8s组件。 如上所示&#xff0c;从Ubuntu官方网站上下载Ubuntu服务器版本的安装文件 如上所示&#xff0c;在VMware上新建虚拟机&#xff0c;指定已下载的Ubunt…

基于yolov5的明厨亮灶阳光厨房老鼠检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv5的明厨亮灶阳光厨房老鼠检测系统是一种高效、智能的食品安全监测解决方案。该系统利用YOLOv5网络模型&#xff0c;结合深度学习技术&#xff0c;实现对厨房环境的实时监控与智能分析。 YOLOv5以其高速和高精度的特性&#xff0c;在实时目标检测任务中…

chapter09-OOP高级部分——(内部类)——day13

413-四种内部类 414-局部内部类1 记住: (1)局部内部类定义在方法中/代码块(2)作用域在方法体或者代码块中(3)本质仍然是一个类 415-局部内部类2 416-匿名内部类本质 匿名内部类只能用一次&#xff0c;并实例化了一个tiger对象&#xff0c; tiger指向它的对象&#xff0c;tig…

18043 找出3个数中最大的数

### 思路 1. 从键盘输入三个整数&#xff0c;使用空格分隔。 2. 比较三个整数&#xff0c;找出其中最大的数。 3. 输出最大的数。 ### 伪代码 1. 读取输入的三个整数。 2. 比较三个整数&#xff0c;找出最大的数。 3. 输出最大的数。 ### C代码 #include <iostream>…

Python编码系列—Python调试秘籍:pdb调试工具的实战应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

《神话:悟空》的破晓之路:文化深度与技术巅峰的交响乐章

在八月的炽热中&#xff0c;《黑神话&#xff1a;悟空》如同一道璀璨的光芒&#xff0c;划破了国产游戏的寂静夜空&#xff0c;不仅以其惊人的销量速度震撼了业界&#xff0c;更以其深厚的文化底蕴与顶尖的游戏设计&#xff0c;在全球玩家心中留下了不可磨灭的印记。这款游戏的…

Masonry的入门学习

Masonry的学习 文章目录 Masonry的学习前言使用MasonryMasonry支持的属性修饰语基础APIAuto Boxing中心点设置边距优先级创建约束更新约束使用Masonry来布局UIScrollview 小结 前言 在日常的开发中&#xff0c;我们如果面对一些很复杂的UI布局&#xff0c;我们如果统一使用fram…

并发编程之AtomicUnsafe魔法类详解

并发编程之Atomic&Unsafe魔法类详解_并发魔法类-CSDN博客

京东2025校招/社招内推信息

社招链接&#xff1a;https://zhaopin.jd.com/web/job/job_info_list/3 社招内推码&#xff1a;JC8DI 校招链接&#xff1a;https://campus.jd.com/home#/ 校招内推码&#xff1a;C49D1 有需要的同学也可私信我姓名、电话、邮箱内推已经投递的同学可私信我获取最新进展哦

国内访问GitHub很卡,steam连接断开怎么办

目录 第一章、问题分析1.1&#xff09;问题1.2&#xff09;解决&#xff1a;下载个加速器就好了 友情提醒: 先看文章目录&#xff0c;大致了解文章知识点结构&#xff0c;点击文章目录可直接跳转到文章指定位置。 第一章、问题分析 1.1&#xff09;问题 国内访问GitHub很卡怎…

Docker容器技术详解

一、Docker简介及部署方法 1.1Docker简介 1.1.1什么是docker Docker是管理容器的引擎&#xff0c;为应用打包、部署平台&#xff0c;而非单纯的虚拟化技术 docker的重要特点和优势&#xff1a; 1. 轻量级虚拟化Docker 容器相较于传统的虚拟机更加轻量和高效&#xff0c;能够…