二十、Zipkin持久化链路跟踪
目录
Zipkin持久化
使用mysql数据库持久化
1、创建zipkin数据库
2、启动zipkin使用以下脚本
3、访问接口(配置了sleuth链路跟踪)
使用ElasticSearch持久化
zipkin启动脚本
Zipkin持久化
Zipkin server默认会将追踪数据信息保存在内存中,但这种方法不适合生产环境,因为如果zipkin服务宕机了,则记录数据会消失,后续生产需要追寻问题我们就没办法了,所以我们需要将数据持久化到硬盘中(Mysql数据库或者ElasticSearch)
使用mysql数据库持久化
1、创建zipkin数据库
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,`remote_service_name` VARCHAR(255),`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',PRIMARY KEY (`trace_id_high`, `trace_id`, `id`)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;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(`remote_service_name`) COMMENT 'for getTraces and getRemoteServiceNames';
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 and autocomplete values';
ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces and autocomplete values';
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,`error_count` BIGINT,PRIMARY KEY (`day`, `parent`, `child`)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;
Tips:可以使用记事本将上面的脚本保存成zipkin.sql脚本,然后导入数据库中执行下创建数据库表

2、启动zipkin使用以下脚本
java -jar zipkin-server-2.24.0-exec.jar --STORAGE_TYPE=mysql
--MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=root
参数说明
----STORAGE_TYPE:持久化方式
--MYSQL_HOST:mysql主机
--MYSQL_TCP_PORT:mysql端口
--MYSQL_DB:mysql持久化使用的数据库
--MYSQL_USER:mysql数据库用户名
--MYSQL_PASS:mysql数据库密码
3、访问接口(配置了sleuth链路跟踪)
可以看到记录数据被持久化到了mysql数据库中,此时强制重启Zipkin server(使用步骤2带mysql信息的运行),此时点击http://localhost:9411中设置按钮选择请求时间作为条件,然后点击RUN QUERY按钮zipkin会去数据库中查询相应的数据返回
Table (zipkin_spans)

Table (zipkin_annotations)

使用ElasticSearch持久化
zipkin启动脚本
java -jar zipkin-server-2.24.0-exec.jar --STORAGE_TYPE=elasticsearch --ES_HOST=localhost:9200
如果我们链接的是ES集群,只需要在我们指定地址后面用逗号分割即可,如下: --ES_HOSTS=http://192.168.1.1:9200,http://192.168.1.2:9200
相关文章:
二十、Zipkin持久化链路跟踪
目录 Zipkin持久化 使用mysql数据库持久化 1、创建zipkin数据库 2、启动zipkin使用以下脚本 3、访问接口(配置了sleuth链路跟踪) 使用ElasticSearch持久化 zipkin启动脚本 Zipkin持久化 Zipkin server默认会将追踪数据信息保存在内存中࿰…...
大学毕业设计这样做可以吗
前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…...
NSUserDefaults
目录 1. 简介2. 基本使用2.1 步骤2.2 对应接口2.2 示例代码 3. 常用接口及属性3.1 存储3.2 获取 4. 注意点4.1 NSUserDefaults 存储的对象全是不可变的4.2 将自定义类型数据读写 NSUserDefaults4.3 非即时写入 5.参考链接 1. 简介 NSUserDefaults是一个单例,在整个程…...
Windows下通过cwRsync备份到服务器服务器之间使用rsync备份传输
Windows下通过cwRsync备份到服务器&服务器之间使用rsync备份传输 Linux服务器配置Rsync服务端1、安装Rsync2、配置rsyncd.conf3、创建目录、密码文件并修改权限4、启动rsync服务 Windows配置cwRsync客户端1、下载并解压cwRsync客户端2、打开cmd,执行同步命令 Wi…...
IS420UCSBH4A 用于高速应用中的Mark VIe系列
控制器IS420UCSBH4A由通用电气公司设计,用于高速应用中的Mark VIe系列,采用1066 MHz EP80579英特尔处理器。该控制器可与Mark VIe系列一起用于EX2100e和LS2100e应用。 IS420UCSBH4A技术规格 系列马克维处理机类型1066兆赫EP80579英特尔型号IS420UCSBH4A…...
将JSON写入文件
首先需要引入fastjson的依赖文件,以下是maven的依赖: <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.73</version></dependency> 然后是将json字符串写到…...
effective c++ 35 考虑virtual函数以外的其他选择
effective c 35 考虑virtual函数以外的其他选择 在本节中,作者给出了一些可以替代调用virtual函数的方法。下面就一一进行介绍。 分析 1.考虑NVI的实现方式(模板方法设计模式) 父类和子类都调用healthValue同一接口,但是返回值不同。这是一种public非…...
Akura Medica:新型静脉血栓切除系统,完成首次人体试验
Akura Medical公司宣布,其机械血栓切除平台在人体首次使用成功,这是一项具有突破性的技术,可以有效地治疗肺栓塞、深静脉血栓等血栓栓塞疾病。该平台使用了一种与众不同的方法,可以高效地清除血管内的血栓,同时保护血管…...
大型央企集团财务经营分析框架系列(三)
01集团经营管理分析的切入点 集团经营管理分析的切入点往往是从财务分析开始。 往往在一家企业里面,财务方面的信息化建设是要早于其它方面的信息化建设的,业务标准化程度比较高,数据标准化程度也比较高,分析框架也相对成熟。 …...
C++并发编程:std::future、std::async、std::packaged_task与std::promise的深度探索
C并发编程:std::future、std::async、std::packaged_task与std::promise的深度探索 一、引言 (Introduction)1.1 并发编程的概念 (Concept of Concurrent Programming)1.2 C并发编程的重要性 (Importance of Concurrent Programming in C)1.3 关于std::future、std:…...
测牛学堂:2023软件测试学习教程之sql的单表查询排序和模糊查询
单表查询的排序 关键字:order by 排序的类型,升序字段:ASC ,省略的话默认就是升序。 降序的字段:DESC 语法: order by 字段名 ASC| DESC返回的表则会按照给定的字段排序 例子:查询学生的考试成…...
CSS第一天总结
css第一天总结 css简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称. 有时我们也会称之为 CSS 样式表或级联样式表。 CSS 是也是一种标记语言 CSS 主要用于设置 HTML 页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、…...
js中各种console使用方法大全
console 1.console.log() (1)用于标准输出流的输出,也就是在控制台中显示一行信息。 (2)当传递多个参数时,控制台输出时将以空格分隔这些参数。 (3)也可以用占位符来定义输出的格…...
江西棒球未来发展规划·棒球1号位
关于江西棒球未来发展规划: 一、总体思路 江西棒球运动要立足当前,着眼长远,切实增强鼓励支持体育运动的社会氛围,弘扬体育精神,深化体育改革,加强体育基层建设,努力建设中国棒球之乡。把打造品牌赛事和培养明星运动员作为两手抓的发展方向,不断增强江西棒球运动的整体实力和…...
【笔记】做二休五
在记录去超市购物,菜场买菜,社区团购的花费时,将每个物品的价格记录下来。 大家应该善加利用自己所拥有的事物,若勉强想要利用自己没有的,只会让自己痛苦。 打扫&洗衣服 小苏打是可用于家庭清洁的万能清洁剂&…...
Qt6之字符串类内存分配新变化——16的次方增加
qt提供了比标准c string更强大,更丰富,更实用的字符串类QString,它的主要功能22个已经在之前逐一分析过,感兴趣的可前往以下链接查看,本文主要重点分析下qt在字符串类上面做的优化,主要是两个方面ÿ…...
C++ 名称空间
一、名称空间 1.1、引入名称空间的背景 在C中的名称可以是变量,函数,类以及类的成员。随着项目的增大,名称相互冲突的可能性也在增大。使用多个厂商的类库时,可能导致名称冲突。例如,两个库都定义了名为Listÿ…...
作为一名普通的java程序员,我想和大家分享一下4年来的工作内容
一直有小伙伴想了解更多关于我的工作内容,所以今天我来分享一下我作为一名普通java程序员,4年来工作内容发生了哪些变化,以及我有什么感悟。 我是16届毕业生,我的第一份工作是做外包,第一年的时间里测试偏多ÿ…...
CyberLink的专业视频编辑软件ActionDirector Ultra 3.0版本在win10系统的下载与安装配置教程
目录 前言一、ActionDirector Ultra安装二、使用配置总结 前言 ActionDirector Ultra是CyberLink公司开发的专业视频编辑软件,旨在帮助用户创作高质量的运动和冒险视频。该工具提供了一些先进的特效和编辑工具,让用户能够轻松地剪辑、修剪、调整颜色和添…...
在外远程访问公司局域网用友畅捷通T财务软件 - 远程办公
文章目录 前言1.本地访问简介2. cpolar内网穿透3. 公网远程访问4. 固定公网地址 前言 用友畅捷通T适用于异地多组织、多机构对企业财务汇总的管理需求;全面支持企业对远程仓库、异地办事处的管理需求;全面满足企业财务业务一体化管理需求。企业一般将其…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
