Zipkin 服务:理解配置和分布式追踪
1. 什么是Zipkin?
Zipkin是一个分布式追踪系统,用于收集和查询来自分布式系统中的跟踪数据。它帮助开发人员分析和可视化请求在不同服务之间的传递情况,以诊断性能问题和延迟瓶颈。
2. Zipkin 的核心组件
- Zipkin Server:核心服务器,负责收集、存储和查询追踪数据。
- Zipkin Collector:从不同的服务收集追踪数据。
- Zipkin Storage:存储追踪数据,支持多种存储后端(例如内存、MySQL、Elasticsearch等)。
- Zipkin UI:用于可视化和查询追踪数据的用户界面。
3. 分布式追踪的基本概念
- 追踪(Trace):一个请求在系统中的生命周期,从进入到完成,包含多个跨度(spans)。
- 跨度(Span):追踪中的一个单元,表示一次操作或一次请求。跨度包含操作的开始和结束时间、元数据和标签等。
- 上下文传播(Context Propagation):在服务之间传播追踪上下文,使每个服务都能记录并报告请求的追踪信息。
4. Zipkin 的配置
在Docker Compose文件中,Zipkin服务的配置如下:
version: "3.7"
services:
zipkin:
container_name: zipkin
image: openzipkin/zipkin
extra_hosts: [ 'host.docker.internal:host-gateway' ]
ports:
- "9411:9411"
配置解释
- container_name: zipkin:容器的名称设置为zipkin。
- image: openzipkin/zipkin:使用官方的Zipkin镜像。
- extra_hosts: [ ‘host.docker.internal’ ]:添加额外的主机条目,用于跨容器通信。
- ports: [“9411:9411”]:将主机的9411端口映射到容器的9411端口,以便通过http://localhost:9411访问Zipkin UI。
5. 集成Zipkin到微服务中
要在你的微服务中集成Zipkin,需要进行以下步骤:
- 添加依赖 在Spring Boot应用程序中,可以添加
spring-cloud-starter-zipkin
依赖来集成Zipkin。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
- 配置Zipkin地址 在应用程序的配置文件(
application.yml
或application.properties
)中,设置Zipkin服务器的地址。
spring:
zipkin:
base-url: http://zipkin:9411
sleuth:
sampler:
probability: 1.0
运行应用程序 确保你的微服务与Zipkin服务在同一个网络中运行,以便它们可以将追踪数据发送到Zipkin服务器。
6. 分布式追踪的工作流程
当一个请求进入系统时:
- 生成追踪ID:第一个服务生成一个唯一的追踪ID,并创建一个跨度(span)。
- 传播追踪上下文:追踪ID和跨度ID在服务之间传播。每个服务接收到这些ID后,会创建新的跨度,并报告给Zipkin。
- 收集追踪数据:所有服务的追踪数据通过Zipkin Collector收集,并存储在Zipkin Storage中。
- 查询和可视化:开发人员可以通过Zipkin UI查询和可视化追踪数据,分析请求的路径和延迟情况。
7. 实践
- 运行Zipkin服务bash复制代码
docker-compose up -d zipkin
通过浏览器访问http://localhost:9411,查看Zipkin UI。 - 集成到微服务中 将上述配置添加到你的Spring Boot微服务中,并运行微服务。
- 生成追踪数据 通过调用微服务的API生成一些请求,观察Zipkin UI中是否能够看到相应的追踪数据。