Sleuth--链路追踪(二)

news2024/11/19 0:27:34

1 Zipkin的集成

1.1 1 ZipKin介绍

        Zipkin 是 Twitter 的一个开源项目,它基于Google Dapper实现,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。
        我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的REST API接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序,从而及时地发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。
        除了面向开发的 API 接口之外,它也提供了方便的UI组件来帮助我们直观的搜索跟踪信息和分析请求链路明细,比如:可以查询某段时间内各用户请求的处理时间等。
        Zipkin 提供了可插拔数据存储方式:In-Memory、MySql、Cassandra 以及 Elasticsearch。

上图展示了 Zipkin 的基础架构,它主要由 4 个核心组件构成:

  • Collector:收集器组件,它主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为Zipkin内部处理的 Span 格式,以支持后续的存储、分析、展示等功能。
  • Storage:存储组件,它主要对处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改此存储策略,通过使用其他存储组件将跟踪信息存储到数据库中。
  • RESTful API:API 组件,它主要用来提供外部访问接口。比如给客户端展示跟踪信息,或是外接系统访问以实现监控等。
  • Web UI:UI 组件, 基于API组件实现的上层应用。通过UI组件用户可以方便而有直观地查询和分析跟踪信息。

        Zipkin分为两端,一个是 Zipkin服务端,一个是 Zipkin客户端,客户端也就是微服务的应用。 客户端会配置服务端的 URL 地址,一旦发生服务间的调用的时候,会被配置在微服务里面的 Sleuth 的监听器监听,并生成相应的 Trace 和 Span 信息发送给服务端。

1.2 ZipKin服务端安装

第1步: 下载ZipKin的jar包

https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-
server&v=LATEST&c=exec

 访问上面的网址,即可得到一个jar包,这就是ZipKin服务端的jar包
第2步: 通过命令行,输入下面的命令启动ZipKin Server

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

 第3步:通过浏览器访问 http://localhost:9411访问

1.3 Zipkin客户端集成

ZipKin客户端和Sleuth的集成非常简单,只需要在微服务中添加其依赖和配置即可。
第1步:在每个微服务上添加依赖

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

第2步:添加配置

spring:
zipkin:
 base-url: http://127.0.0.1:9411/  #zipkin server的请求地址
discoveryClientEnabled: false #让nacos把它当成一个URL,而不要当做服务名
sleuth:
 sampler:
  probability: 1.0  #采样的百分比

第3步: 访问微服务

http://localhost:7000/order-serv/order/prod/1

第4步: 访问zipkin的UI界面,观察效果

第5步:点击其中一条记录,可观察一次访问的详细线路。

2 ZipKin数据持久化

        Zipkin Server默认会将追踪数据信息保存到内存,但这种方式不适合生产环境。Zipkin支持将追踪数据持久化到mysql数据库或elasticsearch中。

2.1 使用mysql实现数据持久化

第1步: 创建mysql数据环境

 CREATE TABLE IF NOT EXISTS zipkin_spans ( 
   `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
means the trace uses 128 bit traceIds instead of 64 bit', 
   `trace_id` BIGINT NOT NULL, 
   `id` BIGINT NOT NULL, 
   `name` VARCHAR(255) NOT NULL, 
   `parent_id` BIGINT, 
   `debug` BIT(1), 
   `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs
query and to implement TTL', 
     `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration
and maxDuration query' 
 ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE
utf8_general_ci; 
  ALTER TABLE zipkin_spans ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `id`)
COMMENT 'ignore insert on duplicate'; 
  ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`, `id`)
COMMENT 'for joining with zipkin_annotations'; 
  ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for
getTracesByIds'; 
  ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and
getSpanNames'; 
  ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces
ordering and range'; 
  CREATE TABLE IF NOT EXISTS zipkin_annotations ( 
   `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this
means the trace uses 128 bit traceIds instead of 64 bit', 
   `trace_id` BIGINT NOT NULL COMMENT 'coincides with
zipkin_spans.trace_id', 
   `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id', 
   `a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or
Annotation.value if type == -1', 
   `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller
than 64KB', 
   `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if
Annotation', 
   `a_timestamp` BIGINT COMMENT 'Used to implement TTL;
Annotation.timestamp or zipkin_spans.timestamp', 
   `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is
null', 
   `endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint
is null, or no IPv6 address', 
   `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint
is null', 
   `endpoint_service_name` VARCHAR(255) COMMENT 'Null when
Binary/Annotation.endpoint is null' 
 ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE
utf8_general_ci; 
  ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`,
`span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate'; 
  ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`,
`span_id`) COMMENT 'for joining with zipkin_spans'; 
  ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`)
COMMENT 'for getTraces/ByIds'; 
  ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT
'for getTraces and getServiceNames'; 
 ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces';
  ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces'; 
  ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`)
COMMENT 'for dependencies job'; 
  CREATE TABLE IF NOT EXISTS zipkin_dependencies ( 
   `day` DATE NOT NULL, 
   `parent` VARCHAR(255) NOT NULL, 
   `child` VARCHAR(255) NOT NULL, 
   `call_count` BIGINT 
 ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE
utf8_general_ci; 
  ALTER TABLE zipkin_dependencies ADD UNIQUE KEY(`day`, `parent`, `child`);

第2步: 在启动ZipKin Server的时候,指定数据保存的mysql的信息

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

 2.2 使用elasticsearch实现数据持久化

第1步: 下载elasticsearch
下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-6-8-4
第2步: 启动elasticsearch

第3步: 在启动ZipKin Server的时候,指定数据保存的elasticsearch的信息

java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=elasticsearch --ES-
HOST=localhost:9200

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

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

相关文章

InnoDB的页分裂与页合并

数据组织方式 在 InnoDB 存储引擎中&#xff0c;表数据都是根据主键顺序组织存放的&#xff0c;这种存储方式的表称为索引组织表 行数据&#xff0c;都是存储在聚集索引的叶子节点上的。 在 InnoDB 引擎中&#xff0c;数据行是记录在逻辑结构 page 页中的&#xff0c;而每一…

每日一博 - 闲聊 API GateWay

文章目录 概念图解小结 概念 API Gateway&#xff08;API 网关&#xff09;是一个在现代应用程序和服务架构中起关键作用的组件&#xff0c;它具有多种功能和作用&#xff0c;主要包括以下方面&#xff1a; 路由和请求分发&#xff1a;API 网关充当前端入口&#xff0c;根据请…

css中BFC外边距塌陷解决办法

什么是BFC 块级格式化上下文&#xff0c;独立的渲染区域&#xff0c;与外部毫不相干&#xff0c;上下两个元素都设置了外边距&#xff0c;结果会出现重叠的部分合并 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /&…

2020-2023中国高等级自动驾驶产业发展趋势研究-中国高等级自动驾驶发展近况

1.2 中国高等级自动驾驶发展近况 通过对中国高等级自动驾驶行业的观察和分析&#xff0c;亿欧汽车认为&#xff0c;除技术解决方案提供商外&#xff0c;如今的车企、政府、资本同样在产业链中扮演重要角色。此外&#xff0c;车路协同技术的发展也为高等级自动驾驶的发展提供了更…

解密(2023寒假每日一题 20)

给定一个正整数 k k k &#xff0c;有 k k k 次询问&#xff0c;每次给定三个正整数 n i , e i , d i n_i,e_i,d_i ni​,ei​,di​ &#xff0c;求两个正整数 p i , q i p_i,q_i pi​,qi​ &#xff0c;使 n i p i q i &#xff0c; e i d i ( p i − 1 ) ( q i − 1 …

肖sir__mysql之三表__008

mysql之三表 create table student( stu_no int, stu_name varchar(10), sex char(1), age int(3), edit varchar(20) ) DEFAULT charsetutf8; insert into student values (1,‘wang’,‘男’,21,‘hello’), (2,‘小明’,‘女’,22,‘haha2’), (3,‘hu’,‘女’,23,‘haha3…

数据结构基础8:二叉树oj+层序遍历。

二叉树oj层序遍历 题目一&#xff1a;二叉树的销毁&#xff1a;方法一&#xff1a;前序遍历&#xff1a;方法二&#xff1a;后序遍历&#xff1a; 题目二&#xff1a;二叉树查找值为x的节点方法一&#xff1a;方法二&#xff1a;方法三&#xff1a; 题目三&#xff1a;层序遍历…

全球与中国双壳鼻夹板市场:增长趋势、竞争格局与前景展望

双壳鼻夹板是一种医疗器械&#xff0c;用于鼻部手术后的支撑和稳定&#xff0c;以及减轻手术区域的肿胀和出血。它是由柔软的材料制成&#xff0c;通常是塑料或硅胶。双壳鼻夹板的设计呈现类似于两个壳体或半壳体&#xff0c;可以覆盖整个鼻部或其一侧。它的形状和大小可以根据…

网络基础-应用层协议-HTTP/HTTPS

HTTP/HTTPS HTTP基本概念协议格式请求报文请求方法请求资源地址协议版本 应答报文 常见Header常见状态码与状态描述Cookie&Sessionhttp协议特点 HTTPS基本概念对称加密与非对称加密数据摘要&数据指纹HTTPS工作过程探究只采用对称加密只采用非对称加密双方都采用非对称加…

酷开系统音乐频道,用音乐治愈你!

音乐作为娱乐生活中的一部分&#xff0c;它可以起到调节心情让身体放松的作用&#xff0c;同时还可以舒缓压力&#xff0c;给大脑一个休息的时间。有句话说得好&#xff1a;“耳机是人类的避难所&#xff0c;音乐是心脏的救命丸”。音乐是一种疗愈身心的存在&#xff0c;耳机线…

strncpy

strncpy&#xff1a; 函数介绍&#xff1a; 函数原型&#xff1a; char *strncpy(char *dest, const char *src, int n) 返回值&#xff1a;dest字符串起始地址 说明&#xff1a; 1、当src字符串长度小于n时&#xff0c;则拷贝完字符串后&#xff0c;剩余部分将用空字节填…

【PHP图片托管】CFimagehost搭建私人图床 - 无需数据库支持

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

Bigemap在土地规划行业是怎么应用的?

选择Bigemap的原因&#xff1a; 获取途径&#xff1a;国土部门内部使用的是arcgis专用的系统&#xff0c;也安装不来arcgis软件&#xff0c;所以在网上找的我们软件软件上有影像地图&#xff0c;可以看高程海拔,有测量画图工具&#xff0c;可以导入和导出SHP和CAD文件&#xf…

远程ssh连接manjaro无法使用系统剪切板

文章目录 背景本机环境 vim的复制粘贴查看vim寄存器各种寄存器的含义 使用系统剪切板ssh访问系统剪切板安装配置X11再次查看vim寄存器 后记 背景 使用vim打开文件&#xff0c;把a文件中的内容&#xff0c;复制一部分到b文件中去。 大概步骤如下&#xff1a; 1、搜索要复制的…

SD系列——图像高清化算法方法

图像高清化算法方法 文章目录 图像高清化算法方法一、通过 Extras 选项卡执行放大算法二、通过 SD upscale 脚本增强细节三、txt2img 页面下的 Hires Fix四、扩展插件 Ultimate SD upscale ControlNet Tile参数调整单用 Ultimate SD Upscale小结 五、Tiled Diffusion & VA…

怎么把两首歌曲拼接在一起?

怎么把两首歌曲拼接在一起&#xff1f;音乐的美妙旋律能够陶冶人们的心灵&#xff0c;在日常生活和工作中&#xff0c;许多用户会使用各种歌曲来进行剪辑和制作。尤其在媒体行业工作的用户&#xff0c;每天都需要使用大量不同歌曲的片段&#xff0c;进行拼接和剪辑来进行视频制…

深入理解Linux网络笔记(一):内核是如何接收网络包的

本文为《深入理解Linux网络》学习笔记&#xff0c;使用的Linux源码版本是3.10&#xff0c;网卡驱动是Intel的igb网卡驱动 Linux源码在线阅读&#xff1a;https://elixir.bootlin.com/linux/v3.10/source 1、内核是如何接收网络包的 1&#xff09;、Linux网络收包总览 在TCP/I…

数字IC验证23915--寄存器方法

文章目录 镜像值与期望值predication的分类自动预测显示预测 uvm_reg的访问方法寄存器健康检查![在这里插入图片描述](https://img-blog.csdnimg.cn/8b1832ab43854068970bb5a66d851d06.png) 镜像值与期望值 寄存器模型中的每一个寄存器&#xff0c;都应该有两个值&#xff0c;…

【计算机基础】Git系列2:配置多个SSH

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

Python 07面向对象的三大特点【封装、继承、多态】

&#x1f600;前言 在软件开发的过程中&#xff0c;面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称 OOP&#xff09;已经成为了一种不可或缺的编程范式。它允许开发人员创建属于自己的对象&#xff0c;具有其特征和行为&#xff0c;通过将数据和方法绑定…