侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

使用分布式跟踪系统Zipkin来追踪dubbo请求

2023-11-07 星期二 / 0 评论 / 0 点赞 / 65 阅读 / 6919 字

记录一下前几日学习ZIPKIN的笔记 一、下载ZIPKIN-SERVER 点击下面的链接下载 https://search.maven.org/remote_content?g=io.zipki

记录一下前几日学习ZIPKIN的笔记

 

一、下载ZIPKIN-SERVER

    点击下面的链接下载

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

 

二、启动ZIPKIN-SERVER

    使用JAVA命令启动该JAR,zipkin-server.jar是一个打包好的springBoot应用,springBoot自带tomcat因此只要启动JAR包就可以访问了。

java -jar zipkin-server-xxx.jar

启动完后访问localhost:9411可以查看统计界面。

三、配置ZIPKIN

    ZIPKIN支持追踪多种RPC框架,不仅仅是DUBBO,这里我使用的是DUBBO,如果是其他RPC框架,请自行百度ZIPKIN配置。

1、首先添加依赖包:

<dependency>				<groupId>com.github.jessyZu</groupId>				<artifactId>dubbo-zipkin-spring-starter</artifactId>				<version>${dubbozipkin.version}</version>			</dependency>

这个dubbo-zipkin-spring-starter开源框架 已经帮我们整合了dubbo和zipkin的配置,只需要在SpringBoot的框架下引入依赖即可(注意:必须要在SpringBoot环境下)。

dubbo-zipkin-start的GITHUB地址:https://github.com/jessyZu/dubbo-zipkin-spring-starter

2、ZIPKIN配置

如果你是在本地运行那么到这一步已经完成了,启动你的项目发起请求,你会发现所有请求(前提采样率是100%)都会被记录下来,如果是运行在不同服务器,请看下面配置

spring.sleuth.sampler.percentage=1spring.zipkin.base-url=http://192.168.1.100:9411

spring.sleuth.sampler.percentage=1 这个是采样率,配置为1表示100%  0.5为50%
spring.zipkin.base-url=xxx:9411  这个是你的zipkin-server.jar包所在的服务器地址,表示收集来的追踪数据发送给该程序。

这里提一下ZIPKIN-SERVER默认是存储在内存的,也就是说如果你重启了zipkin-server.jar的话数据就没了,为了解决这个问题必须使其持久化。

四、ZIPKIN-SERVER持久化

    ZIPKIN支持MYSQL、cassandra、elasticsearch 三个组件,在这里我们使用MYSQL

   1、首先建表:

运行下面的SQL代码建表:

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

然后重新启动ZIPKIN-SERVER,注意这次多了几个参数,例:

java -DSTORAGE_TYPE=mysql -DMYSQL_USER=root -DMYSQL_DB=zipkin -jar zipkin-server-1.24.0-exec.jar

linux上也是一样

参数的意思应该不用解释了,这里放上官方参数说明:

`MYSQL_DB`: The database to use. Defaults to "zipkin".* `MYSQL_USER` and `MYSQL_PASS`: MySQL authentication, which defaults to empty string.* `MYSQL_HOST`: Defaults to localhost* `MYSQL_TCP_PORT`: Defaults to 3306* `MYSQL_MAX_CONNECTIONS`: Maximum concurrent connections, defaults to 10* `MYSQL_USE_SSL`: Requires `javax.net.ssl.trustStore` and `javax.net.ssl.trustStorePassword`, defaults to false.

更多内容请访问官方GTIHUB:

https://github.com/openzipkin/zipkin/tree/master/zipkin-server

至此结束,然后发起请求看看是不是所有请求都记录在了MYSQL里,重启ZIPKIN-SERVER数据也不会消失了!

 

最后狠狠鄙视下CSDN破论坛居然搞实名认证,果断换地方。

 

广告 广告

评论区