文档章节

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

Reiner
 Reiner
发布于 2017/06/05 15:01
字数 1063
阅读 1301
收藏 3

记录一下前几日学习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=1
spring.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、cassandraelasticsearch 三个组件,在这里我们使用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破论坛居然搞实名认证,果断换地方。

 

© 著作权归作者所有

Reiner
粉丝 0
博文 4
码字总数 1348
作品 0
徐汇
私信 提问
加载中

评论(1)

2
2016shuai
您好,问一下,dubbo-zipkin-start的GITHUB地址:https://github.com/jessyZu/dubbo-zipkin-spring-starter工程下面的测试跑不起来,您的跑起来了吗?
java.lang.IllegalArgumentException: Invalid source 'classpath:spring/dubbo-demo-service2-provider.xml'
有时间你的话麻烦解答一下,谢谢!
分布式调用链调研(pinpoint,skywalking,jaeger,zipkin等对比)

APM简述 APM (Application Performance Management)是对企业的应用系统进行实时监控,它是用于实现对应用程序性能管理和故障管理的系统化的解决方案。 2.APM主要解决的问题: 集中式度量系...

helplove
01/24
5.7K
0
服务化改造实践(三) | Dubbo + Zipkin

随着业务的发展,应用的规模不断的扩大,传统的应用架构无法满足诉求,服务化架构改造势在必行,以 Dubbo 为代表的分布式服务框架成为了服务化改造架构中的基石。随着微服务理念逐渐被大众接...

阿里云云栖社区
2018/10/24
0
0
个推基于Zipkin的分布式链路追踪实践

作者:个推应用平台基础架构高级研发工程师 阿飞 01业务背景 随着微服务架构的流行,系统变得越来越复杂,单体的系统被拆成很多个模块,各个模块通过轻量级的通信协议进行通讯,相互协作,共...

个推大数据
05/30
0
0
springcloud(十二):使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪

随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时...

ityouknow
2018/10/28
0
0
java B2B2C电子商务平台分析之十三-----Spring Cloud Zipkin

Zipkin是什么 Zipkin分布式跟踪系统;它可以帮助收集时间数据,解决在microservice架构下的延迟问题;它管理这些数据的收集和查找;Zipkin的设计是基于谷歌的Google Dapper论文。愿意了解源码...

明理萝
2018/12/04
30
1

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部