本文为博主原创,转载请注明出处
1.Zipkin 与 Sleuth 简介
zipkin 的官网地址:
https://zipkin.io/
Zipkin
和 Sleuth
都是由 Twitter 开源的一套用于分布式系统的应用监控工具,它们的主要用途是帮助开发者理解系统的行为,以便更好地优化系统。
Zipkin是一个分布式追踪系统,它可以帮助开发者理解服务之间的调用关系,以及每个服务的性能。Zipkin
的基础架构包括四个核心组件:
- Collector:收集器组件,主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为
Zipkin
内部处理的Span
格式,以支持后续的存储、分析、展示等功能。 - Storage:存储组件,主要对处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改此存储策略,通过使用其他存储组件将跟踪信息存储到数据库中。
- RESTful API:API组件,主要用来提供外部访问接口。比如给客户端展示跟踪信息,或是外接系统访问以实现监控等。
- UI:基于API组件实现的上层应用。通过UI组件用户可以方便而有直观地查询和分析跟踪信息。
Zipkin
的信息默认是存储在内存中,服务端一旦重启信息将会丢失,但是Zipkin
提供了可插拔式的存储。Zipkin
支持以下四种存储方式:
- 内存:服务重启将会失效,不推荐
- MySQL:数据量越大性能较低
- Elasticsearch:主流的解决方案,推荐使用
- Cassandra:技术太牛批,用的人少,自己选择,不过官方推荐
Sleuth是一个用于在基于Spring Cloud的应用中实现分布式追踪的库。Sleuth
可以自动收集应用的调用链数据,并将这些数据发送给Zipkin
。
在Spring Cloud中,我们可以采用Sleuth
加Zipkin
来实现全链路追踪,Sleuth
负责采集链路信息,Zipkin
负责处理展示这些信息。
2.spring cloud项目使用
在Java项目中使用Zipkin
和Sleuth
,需要在项目中添加Sleuth
和Zipkin
的依赖,然后在配置文件中启用Sleuth
和Zipkin
。以下是一个使用Maven
添加Sleuth
和Zipkin
依赖的例子:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency>
在配置文件中,需要启用 Sleuth 和 Zipkin ,并指定 Zipkin 的服务地址。以下是一个使用 application.properties配置文件启用 Sleuth 和 Zipkin 的例子:
spring.zipkin.baseUrl=http://localhost:9411/ spring.sleuth.sampler.probability=1.0
在这个配置中,spring.zipkin.baseUrl
是Zipkin
服务的地址,spring.sleuth.sampler.probability
是采样率,用于控制Sleuth
收集跟踪信息的频率。
在Spring Cloud中,Sleuth
和Zipkin
可以帮助我们实现全链路追踪。在使用这两个工具的过程中,我们不需要在代码中写链路追踪相关的功能接入,这是因为Sleuth
会自动收集应用的调用链数据,并将这些数据发送给Zipkin
。
3.zipkin 接入 Elasticsearch
在结合Elasticsearch
使用时,你需要在Zipkin
的配置文件中指定存储类型为Elasticsearch
,并提供Elasticsearch
的连接信息。以下是一个使用Elasticsearch
作为存储的Zipkin
配置文件的例子:
1.Zipkin 启动时只需要指定好 Elasticsearch 连接信息即可。如果是通过 jar 包运行,则执行如下命令:
java -jar zipkin-server-2.19.3-exec.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS=192.168.60.133:9200
2. 如果通过 Docker 镜像运行,则执行如下命令:
docker run --name zipkin -d -p 9411:9411 -e STORAGE_TYPE=elasticsearch -e ES_HOSTS=192.168.60.133:9200 openzipkin/zipkin
3. Docker Compose 进行启动
services: zipkin: image: openzipkin/zipkin container_name: zipkin environment: - STORAGE_TYPE=elasticsearch - ES_HOSTS=192.168.60.133:9200 #- RABBIT_ADDRESSES=192.168.60.133:5672 #- RABBIT_USER=hangge #- RABBIT_PASSWORD=123 ports: - 9411:9411
4.链路追踪过程
以下是Sleuth
和Zipkin
的工作过程:
- 当一个请求到达系统的入口时,
Sleuth
会创建一个唯一ID(traceId
),这个traceId
会在服务之间传递,直到请求的返回,那么就可以使用这个traceId
将整个请求串联起来,形成一条完整的链路。 Sleuth
会记录每个服务调用的开始时间(cs
,Client Send)和结束时间(cr
,Client Received),以及服务端接受请求的时间(sr
,Server Received)和服务端处理完毕准备发送到客户端的时间(ss
,Server Send)。通过这些时间戳,我们可以统计服务调用的耗时。Sleuth
会将这些数据作为Span
(基本的工作单元)发送给Zipkin
。Zipkin
会接收到Sleuth
发送过来的Span
,然后将这些Span
按照traceId
进行排序,形成一个完整的调用链。- 我们可以通过
Zipkin
的Web界面查看这个调用链,以及每个服务的耗时等信息。
5.启动zipkin
zipkin-server最新版本下载地址:
https://repo1.maven.org/maven2/io/zipkin/zipkin-server/2.23.2/zipkin-server-2.23.2-exec.jar
Zipkin server是一个java1.8+服务,打包为一个可执行jar。
java -jar zipkin-server-2.23.2-exec.jar
浏览器打开地址进入到Zipkin监控页面:
http://127.0.0.1:9411/
标签: spring cloud