news 2026/5/25 20:56:03

链路追踪实现完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
链路追踪实现完全指南

链路追踪实现完全指南

前言

链路追踪是微服务架构中实现可观测性的关键组件,用于追踪一个请求在分布式系统中的完整调用路径。本文将详细介绍链路追踪的实现机制、工具选择和最佳实践。

一、链路追踪概述

1.1 分布式追踪原理

┌─────────────────────────────────────────────────────┐ │ Distributed Tracing Flow │ │ │ │ Client │ │ │ │ │ │ Trace: abc123 │ │ │ Span: 1 │ │ ▼ │ │ Service A ────────────────────────────────────── │ │ │ │ Trace: abc123 │ │ │ │ Span: 2 │ │ ▼ ▼ │ │ Service B Service C │ │ │ │ Trace: abc123 │ │ │ │ Span: 3 (Child of 2) │ │ │ ▼ │ │ │ Database │ │ │ │ └─────────────────────────────────────────────────────┘

1.2 核心概念

  • Trace:完整的请求链路
  • Span:链路中的一个操作单元
  • Annotation:附带的时间戳事件

二、Sleuth集成

2.1 依赖配置

<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>

2.2 Sleuth配置

spring: application: name: order-service zipkin: base-url: http://zipkin-server:9411 sender: type: web sampler: probability: 1.0 sleuth: sampler: probability: 1.0 rate: 1000 instrumentation: web: enabled: true jdbc: enabled: true spans: maximumSpans: 1000 keepSpansWithLocalComponents: true

三、OpenTelemetry集成

3.1 OpenTelemetry配置

spring: application: name: order-service otlp: tracing: endpoint: http://otel-collector:4318/v1/traces
@Configuration public class OpenTelemetryConfig { @Bean public OpenTelemetry openTelemetry() { return OpenTelemetry.builder() .setTracerProvider(tracerProvider()) .build(); } @Bean public Tracer tracer(OpenTelemetry openTelemetry) { return openTelemetry.getTracer("order-service", "1.0.0"); } }

3.2 自定义Span

@Service @RequiredArgsConstructor public class OrderService { private final Tracer tracer; public Order createOrder(OrderCreateRequest request) { Span span = tracer.spanBuilder("createOrder") .setAttribute("order.customerId", request.getCustomerId()) .setAttribute("order.amount", request.getAmount().doubleValue()) .setSpanKind(SpanKind.INTERNAL) .startSpan(); try (Scope scope = span.makeCurrent()) { Order order = orderRepository.save(request.toOrder()); span.setAttribute("order.id", order.getId()); span.setAttribute("order.status", order.getStatus().name()); return order; } catch (Exception e) { span.recordException(e); span.setStatus(StatusCode.ERROR, e.getMessage()); throw e; } finally { span.end(); } } }

四、总结

链路追踪是微服务可观测性的核心组件。通过Sleuth或OpenTelemetry实现链路追踪,可以清晰地看到请求在各个服务间的调用关系,便于性能分析和问题定位。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 20:55:51

教育科技产品如何通过Taotoken低成本接入多种大模型能力

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 教育科技产品如何通过Taotoken低成本接入多种大模型能力 对于教育科技公司而言&#xff0c;开发智能辅导、作业批改或个性化内容生…

作者头像 李华
网站建设 2026/5/25 20:55:52

特征归约:给数据“减肥”,让模型不再“虚胖”

一、为什么要给特征“减肥”&#xff1f;想象你在训练一个模型来预测房价。一开始你有这些特征&#xff1a;面积卧室数量地段小区绿化率附近奶茶店数量 ☕附近奶茶店老板星座 ♌模型看到这么多特征&#xff0c;感动得眼泪掉下来&#xff1a;“你这是要我算房价&#xff0c;还是…

作者头像 李华
网站建设 2026/5/22 14:12:05

终极指南:5步轻松突破Cursor限制,无限畅享AI编程

终极指南&#xff1a;5步轻松突破Cursor限制&#xff0c;无限畅享AI编程 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Your request has been blocked as our system has detected suspicious activity / Youve reached your trial request l…

作者头像 李华
网站建设 2026/5/22 14:12:00

自动接电话 App 怎么选?看懂 AI 接听助理的技术逻辑

很多人搜索“有没有自动接电话的 App”&#xff0c;表面上是在找一个能帮自己接电话的工具&#xff0c;但真正的需求往往不是“自动接起”&#xff0c;而是&#xff1a;不方便接电话时&#xff0c;能不能先判断来电意图&#xff1b;重要信息会不会被遗漏&#xff1b;接完后是否…

作者头像 李华
网站建设 2026/5/22 14:11:01

创新视角:如何用LLM数据标注工具重塑AI开发效率

创新视角&#xff1a;如何用LLM数据标注工具重塑AI开发效率 【免费下载链接】autolabel Label, clean and enrich text datasets with LLMs. 项目地址: https://gitcode.com/gh_mirrors/au/autolabel Autolabel是一个革命性的Python库&#xff0c;它利用大型语言模型&am…

作者头像 李华