Sleuth(Micrometer) +ZipKin分布式链路追踪的解析以及使用

1、用另一种场景来类比Sleuth和Zipkin的作用

我们来设想一个快递公司的物流追踪系统。设你在网上购买了一本书,当你的订单提交后,后台系统会生成一个唯一的订单号,这个订单号就相当于Sleuth中的Trace ID。你的订单会经过几个主要的处理阶段:接单、打包、运输、配送,每个阶段都可以看作是微服务中的一个服务节点。
Sleuth的角色

  • 接单:订单系统接收订单,标记订单状态为“待打包”,并将订单信息传递给打包部门。
  • 打包:打包部门收到订单信息,开始准备商品,打包完成后,订单状态变为“待运输”,并通知运输部门。
  • 运输:运输部门接到通知,将包裹发往目的地,途中可能经过多个中转站。
  • 配送:最后,配送员从最近的仓库取出包裹,送到你的家门口。

在这个过程中,每个环节都是一个“Span”,Sleuth会记录每个Span的开始和结束时间,以及它与上一个Span的关系,比如打包环节是由接单环节触发的。这就像在每个包裹上贴上一个条形码,每次包裹经过一个处理点,条形码都会被扫描,记录下时间戳。

Zipkin的角色
Zipkin就像是快递公司的物流追踪网站,你可以输入订单号(Trace ID)来查看包裹的实时位置和历史轨迹。它收集了所有这些条形码扫描的信息,把它们整合起来,让你看到包裹从仓库到你手中的完整路径,包括每个处理点花费的时间。

为什么需要它们

在快递公司的场景中,如果没有物流追踪系统,一旦包裹丢失或延迟,查找原因会非常困难。同样,在微服务架构中,如果没有Sleuth和Zipkin,当某个服务调用失败或响应缓慢时,很难快速定位问题所在。有了Sleuth和Zipkin,开发人员可以像快递公司那样,迅速追踪到问题发生在哪个服务节点,以及它与其它服务的交互情况,从而更快地修复问题。

接下来我们就带着以下的问题走进微服务的世界里。
在分布式与微服务场景下,我们需要解决如下问题:

  1. 如何实时观测系统的整体调用链路情况。
  2. 如何快速发现并定位到问题。
  3. 如何尽可能精确的判断故障对系统的影响范围与影响程度。
  4. 如何尽可能精确的梳理出服务之间的依赖关系,并判断出服务之间的依赖关系是否合理。
  5. 如何尽可能精确的分析整个系统调用链路的性能与瓶颈点。
  6. 如何尽可能精确的分析系统的存储瓶颈与容量规划。

Spring Cloud Sleuth官方地址
ZipKin官方下载地址

提示:注意版本问题
在这里插入图片描述
在这里插入图片描述

2、分布式链路追踪的原理

分布式链路追踪是一种在分布式系统中跟踪请求流经多个服务的机制。在微服务架构中,一个用户请求可能需要跨越多个服务边界才能完成,而每个服务又可能调用其他服务。这种复杂的服务调用链使得传统的监控和日志记录难以有效诊断问题。分布式链路追踪正是为了解决这一难题而生,它的主要原理可以概括为以下几个关键点:

  1. Trace 和 Span 概念
  • Trace:一个 Trace 代表一个完整的请求链路,即从客户端发起请求直到最终响应返回的全过程。每个 Trace 都有一个全局唯一的 ID。
  • Span:Span 是 Trace 中的最小单位,表示一次服务调用,它可以包含开始时间、结束时间、调用耗时、调用的状态以及一些元数据(例如标签和注释)。每个 Span 也有一个唯一的 ID,并且可能关联到一个或多个 Tags。
  1. 传播 Context
    在请求跨服务边界时,链路追踪系统会传播一个上下文(Context),其中包含了 Trace ID 和 Span ID,以及可能的采样决策。这样,每个服务节点都能识别出它属于哪一个 Trace,以及它在 Trace 中的位置。
  2. 数据收集和报告
    每个服务节点在其本地会收集 Span 数据,包括时间戳、持续时间、状态代码等。这些数据随后会被报告给一个中央化的数据收集器,如 Zipkin 或 SkyWalking Server。
  3. 数据存储和查询
    收集到的数据会被存储在一个持久化存储中,以便后续分析和查询。存储系统通常支持基于 Trace ID 的查询,以及更复杂的查询条件,如服务名称、时间范围等。
  4. 可视化和分析
    通过可视化界面,链路追踪数据可以以图形化的方式展现出来,形成调用树或者调用链。这有助于快速识别瓶颈、异常和依赖关系。

3、ZipKin的使用

cmd中:java -jar zipkin-server-3.0.0-rc0-ex

Java分布式项目中,使用Grafana、Prometheus和ZipKin实现分布式链路追踪可以按照以下步骤进行: ### 1. 引入依赖 在项目的`pom.xml`文件中添加相关依赖: ```xml <!-- Spring Cloud Sleuth 用于生成链路ID --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> </dependency> <!-- Spring Cloud Zipkin 用于将追踪数据发送到Zipkin --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> <!-- Micrometer Prometheus 用于将指标暴露给Prometheus --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> ``` ### 2. 配置应用 在`application.properties`或`application.yml`中进行配置: ```yaml # 配置Zipkin服务地址 spring.zipkin.base-url: http://localhost:9411 # 配置采样率,这里设置为100%,表示所有请求都进行追踪 spring.sleuth.sampler.probability: 1.0 # 配置Micrometer将指标暴露给Prometheus management.metrics.export.prometheus.enabled: true management.endpoints.web.exposure.include: prometheus ``` ### 3. 启动Zipkin服务 可以使用Docker快速启动Zipkin服务: ```bash docker run -d -p 9411:9411 openzipkin/zipkin ``` ### 4. 启动Prometheus服务 下载并配置Prometheus,在`prometheus.yml`中添加对Java应用的监控配置: ```yaml scrape_configs: - job_name: 'your_java_app' metrics_path: '/actuator/prometheus' static_configs: - targets: ['localhost:8080'] # 替换为你的Java应用地址和端口 ``` 启动Prometheus服务: ```bash ./prometheus --config.file=prometheus.yml ``` ### 5. 启动Grafana服务 同样可以使用Docker启动Grafana服务: ```bash docker run -d -p 3000:3000 grafana/grafana ``` 启动后,访问`http://localhost:3000`,使用默认用户名和密码(`admin/admin`)登录。 ### 6. 配置Grafana数据源和仪表盘 - **配置数据源**:在Grafana中添加Prometheus作为数据源,填写Prometheus的地址(如`http://localhost:9090`)。 - **导入仪表盘**:可以从Grafana官方仪表盘库中搜索并导入与Prometheus和Zipkin相关的仪表盘,用于展示追踪数据和指标。 ### 7. 运行Java分布式项目 启动Java分布式项目,请求会被Sleuth追踪,追踪数据会发送到Zipkin进行存储和展示,同时应用的指标会暴露给Prometheus,Grafana可以从Prometheus获取指标数据进行可视化展示。 通过以上步骤,就可以在Java分布式项目中使用Grafana、Prometheus和ZipKin实现分布式链路追踪
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-今非昔比°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值