记录一下前几日学习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破论坛居然搞实名认证,果断换地方。