前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Cloud Sleuth 和 Zipkin 搭建分布式链路追踪方案

Spring Cloud Sleuth 和 Zipkin 搭建分布式链路追踪方案

作者头像
用户7353950
发布2024-06-04 15:57:05
1770
发布2024-06-04 15:57:05
举报
文章被收录于专栏:IT技术订阅IT技术订阅
Spring Cloud Sleuth 和 Zipkin 是两个用于实现分布式追踪(Distributed Tracing)的工具,它们一起帮助开发者更好地理解和排查分布式系统中的请求链路和性能瓶颈。

Spring Cloud Sleuth:

Spring Cloud Sleuth 是 Spring Cloud 生态系统的一部分,它为分布式系统提供了追踪解决方案。Sleuth 主要功能包括:

1. 追踪标识(Trace Id)和跨度标识(Span Id):Sleuth 为每一个通过系统的服务请求生成一个唯一的 Trace ID,以及一组按层级组织的 Span ID,以此来表示请求在整个服务调用链中的生命周期。

2. 链路追踪:Sleuth 自动为微服务间的 HTTP 请求添加追踪信息(如 Trace ID 和 Span ID)到请求头中,使得在跨服务调用时可以串联起完整的调用链路。

3. 日志增强:Sleuth 可以与 SLF4J 或 Logback 等日志框架集成,将追踪标识信息附加到日志输出中,便于关联日志和调用链路。

Zipkin:

Zipkin 是一个开源的分布式追踪系统,最初由 Twitter 开发,现在隶属于 OpenZipkin 社区。它主要功能包括:

1. 数据收集:Zipkin 收集来自各个服务的追踪数据(Spans),这些数据由 Sleuth 或其他兼容 Zipkin 的客户端库产生。

2. 存储和检索:Zipkin 提供了存储 Spans 的后端存储解决方案,可以存储在内存、MySQL、Cassandra 或 Elasticsearch 等多种存储介质中。

3. 可视化分析:Zipkin 提供了一个 Web UI,用户可以通过 UI 查看、搜索和分析请求的调用链路,了解服务间的调用关系、请求耗时、是否存在性能瓶颈等问题。

技术原理:

当一个请求从客户端发起,贯穿整个微服务体系时,Spring Cloud Sleuth 会在每个服务节点上生成相应的 Span,并将 Trace ID 和 Span ID 传递给下一个服务节点。每个 Span 记录了服务调用的基本信息,如开始时间、结束时间、服务名、操作名以及请求参数等。

当所有的 Span 数据收集完成后,Sleuth 会将其发送给 Zipkin Server。Zipkin Server 接收到这些数据后,存储并整理这些 Span 信息,最后在前端界面展示出完整的请求调用链路图,帮助开发者定位问题、优化性能和理解系统的整体运行状况。

Spring Cloud Sleuth+Zipkin的搭建步骤及Java代码示例: 1. 搭建Zipkin Server 首先,你需要安装并运行Zipkin Server。可以选择Docker快速部署: shell

docker run -d -p 9411:9411 openzipkin/zipkin 这将在本地主机的9411端口启动一个Zipkin服务器。 2. 在Spring Cloud应用中引入Sleuth和Zipkin依赖 在你的Spring Boot应用的`pom.xml`中添加如下依赖: <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> 3. 配置Spring Cloud Sleuth与Zipkin 在应用的`application.yml`或`application.properties`中配置Zipkin服务器地址: yaml

spring: sleuth: sampler: probability: 1.0 # 设置采样率为100% zipkin: baseUrl: http://localhost:9411 sender: type: web 4. 使用Spring Cloud Sleuth的注解进行链路跟踪 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import brave.Span; import brave.Tracer; @RestController @RequestMapping("/api") public class SampleController { @Autowired private Tracer tracer; @GetMapping("/trace") public ResponseEntity<String> traceRequest() { Span currentSpan = tracer.currentSpan(); // 添加自定义标签或日志 currentSpan.tag("custom_tag", "value"); currentSpan.annotate("Doing some processing..."); // 业务逻辑... String response = "This is a traced request."; return ResponseEntity.ok(response); } } 现在,每次对`/api/trace`的请求都将被Sleuth自动跟踪,并将跟踪信息发送至Zipkin Server。你可以在Zipkin UI中查看完整的请求链路和时间消耗。 注意 - 以上示例仅展示了基本的链路跟踪配置和使用,实际项目中可能需要根据具体需求进行更详尽的配置和调整。 - 在大型微服务环境中,通常会结合服务注册发现组件(如Eureka、Consul)自动配置Sleuth和Zipkin。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT技术订阅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档