Spring Cloud Sleuth & Zipkin & Kafka链路追踪

3 篇文章 0 订阅

使用背景

生产环境中,服务越来越多、内部调用关系越来越复杂,需要搭建一套链路追踪系统来分析、评测调用链的各个环节快慢以及系统拓扑图。

 

简介&说明

链路追踪其实就是个数据上报和收集展示的过程

zipkin是一款链路追踪系统,由服务端和客户端两方组成,服务端由Zipkin提供了,客户端就是我们的应用程序,它不限定是springboot应用,只要按照规范进行上报,服务端就能解析调用链,其中有trace、span、annotation等相关概念不再赘述。

spring sleuth 就是实现了上报规范(traceId传递等),帮我们在rpc调用前后进行了上报,因此我们可以很简单地使用链路追踪功能!

Zipkin architecture

开发环境

MAC \ STS \ JDK8.0 \ SpringBoot 2.1.3.RELEASE


Zipkin Server搭建

Zipkin官方:https://zipkin.io/pages/quickstart.html

SpringBoot 2.x起,Zipkin Server直接下载或编译jar包启动即可,不用自己再搭建了。

下载方式1:直接下载,

curl -sSL https://zipkin.io/quickstart.sh | bash -s

下载方式2:编码编译 

# get the latest source
git clone https://github.com/openzipkin/zipkin
cd zipkin
# Build the server and also make its dependencies
./mvnw -DskipTests --also-make -pl zipkin-server clean install
# Run the server
java -jar ./zipkin-server/target/zipkin-server-*exec.jar

通过以上两种方式都会得到一个可执行的jar包,下面启动Zipkin:

java -DKAFKA_BOOTSTRAP_SERVERS=10.1.172.181:9092,10.1.172.181:9093,10.1.172.181:9094 -jar zipkin.jar

-DKAFKA_BOOTSTRAP_SERVERS:Zipkin可以通过Http接口、rabbitmq、kafka接收上报数据,本例通过kafka进行数据收集,kafka搭建点我

(zipkin默认使用内存存储,也可使用Mysql或者Es进行存储,以后再来补...)

默认9411端口(基于spring boot,可通过--server.port=xxx修改),启动后可直接通过浏览器访问http://127.0.0.1:9411,页面如下:

刚搭起来没有数据,下面开始在应用程序中通过Sleuth进行上报。


 Zipkin客户端(Spring Boot应用)搭建

首先增加起步依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

那么sleuth在哪里?实际上spring-cloud-starter-zipkin是对sleuth和zipkin-client的打包

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-sleuth</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-sleuth-zipkin</artifactId>
		</dependency>
	</dependencies>

修改application.properties,让zipkin客户端使用kafka进行上报:

# 采样比例,1.0表示100%
spring.sleuth.sampler.probability=1.0

# kafka集群地址
spring.kafka.bootstrap-servers=10.1.172.181:9092,10.1.172.181:9093,10.1.172.181:9094
# 重试次数
spring.kafka.producer.retries=3
# 不配置则使用http
spring.zipkin.sender.type=kafka

Spring Cloud中所有服务提供者、消费者都可以通过以上配置进行链路追踪数据上报,本文搭建了两个Zipkin Client,仅对关键关键的信息进行展示

下面由CUST通过Ribbon调用SP提供的服务。然后再回到Zipkin的页面

可以看到出现了几条调用链记录,其中红色表示调用链中出现了错误,一目了然。

两条报错是因为cust在rpc调用时把sp的名字配错了,改对之后重启cust再次调用成功了。


其他补充

有没有注意到文中并没有提到要为Zipkin在kafka中创建Topic?

其实在使用kafka时进行上报时,就自动创建了名为zipkin的Topic

在kafka所在机器上通过指令观察一下:

bin/kafka-topics.sh --describe --zookeeper localhost:2181

可以看到自动创建了1个分区两个副本(1主1从)的Topic

深度探讨一下,可不可以把Topic改为多个分区呢

bin/kafka-topics.sh --alter --zookeeper 10.1.172.181:2181 --partitions 2  --topic zipkin

通过以上指令成功改成两个分区,再次调用接口测试,数据依然正常,那么在一开始就自己创建个zipkin的Topic应该也是可行的!

 

如有问题,欢迎交流!

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值