二十、Zipkin持久化链路跟踪

news/2024/12/15 16:38:01/

目录

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


http://www.ppmy.cn/news/71507.html

相关文章

借助TeeChart 图表控件,这家公司轻松创建了可视化图表看板

TeeChart for .NET是优秀的工业4.0 WinForm图表控件,官方独家授权汉化,集功能全面、性能稳定、价格实惠等优势于一体。TeeChart for .NET 中文版还可让您在使用和学习上没有任何语言障碍,至少可以节省30%的开发时间。技术交流Qqun&#xff1a…

如何防止网站被黑客攻击?黑客是怎样炼成的?

现在的黑客网站可谓是多如牛毛,不管在哪里只要你愿意学,都可以学到一招半式。看过别人的个性签名:卖菜的王大妈是黑客,烤红薯的李大爷也是黑客,对面成人用品店的老板,挖日,还是黑客-_-~!..黑客还真多啊!!!据…

Go语言中sync.Map、sync.Pool和Context的用法

目录 【sync.Map】 实现线程安全的 map 类型 使用 sync.Map 实现并发读写的map 【sync.Pool】 使用 带缓冲channel 实现对象池 使用 sync.Pool 创建临时对象池 【Context 上下文】 Context应用:实现带超时功能的远程调用 Context应用:监控指令…

华为OD机试真题 Java 实现【数字加减游戏】【2023Q1 200分】

一、题目描述 小明在玩一个数字加减游戏,只使用加法或者减法,将一个数字s变成数字t。 每个回合,小明可以用当前的数字加上或减去一个数字。 现在有两种数字可以用来加减,分别为a,其中b没有使用次数限制。 请问小明…

「直播精选问答」释放数据潜力,助力零售数智升级!

​5月10日的《释放数据潜力,助力零售数智升级》虹科零售专场BI直播课程活动,在各位观众的积极互动与热情反馈中落下帷幕! 为激发观众和读者朋友对于零售行业数智化趋势的思考与讨论,真正让BI知识在数字时代得以共享和碰撞&#xf…

frida反调试

frida是逆向人员的神器,有了它就事半功倍,但正是因为frida太有名了,因此出现了很多检测方案,这个软件就检测了frida,不管是attach模式还是spawn模式都附加不上。 一般来说,frida检测由如下几个方面: 检测frida-server文件名 检测27042默认端口 双进程保护 检测D-Bus 检…

音频品鉴与歌唱评价——音频内容理解实践

歌唱评价是K歌系统中核心技术之一。近年来,歌唱评价领域也发生着多元化和深度化的变革。本次LiveVideoStackCon 2022 北京站邀请到腾讯音乐天琴实验室高级研究员——江益靓,为大家介绍全民K歌的多维度评价技术和深度歌唱评价技术的实践,以及优…

Docker安装

1.前提说明 CentOS Docker 安装 前提条件 目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在CentOS 7 (64-bit)上, 要求系统为64位、Linux系统内核版本为 3.8以上,这里选用Centos7.x 查看自己的内核 [rootliqb ~]# cat /etc/re…