spring boot 单体项目如何实现Tracing(追踪)

在Spring Boot的单体项目中实现Tracing(追踪)通常是为了监控和记录请求的生命周期,以便更好地理解应用内部的执行流。即使在单体应用中,追踪也能帮助你诊断性能问题、查看执行时间和日志关联、监控服务调用等。

1. 引入依赖

首先,在Spring Boot项目中添加Spring Cloud Sleuth和Zipkin的依赖。Spring Cloud Sleuth负责自动生成追踪信息,Zipkin负责存储和展示这些追踪信息。
Maven配置

<dependencies>
    <!-- Spring Cloud Sleuth -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    
    <!-- Zipkin (用于存储追踪信息) -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zipkin</artifactId>
    </dependency>
</dependencies>

2. 配置Spring Cloud Sleuth和Zipkin

然后,你需要在application.properties或application.yml中配置追踪系统,像Zipkin。
application.properties配置

# 启用Spring Cloud Sleuth
spring.sleuth.enabled=true

# Zipkin配置
spring.zipkin.baseUrl=http://localhost:9411  # Zipkin的地址
spring.zipkin.sender.type=web              # 使用HTTP发送数据到Zipkin

# 设置追踪采样率,1.0表示所有请求都会被追踪
spring.sleuth.sampler.probability=1.0

# 自定义日志输出格式,包含traceId和spanId
logging.pattern.level=%5p [traceId=%X{X-B3-TraceId}, spanId=%X{X-B3-SpanId}] %m%n

3. 查看日志中的追踪信息

Spring Cloud Sleuth会自动生成traceId和spanId,并将它们包含在应用的日志中。你可以通过日志查看请求的追踪信息,方便你分析请求的生命周期。

通过上述配置,你的应用日志将会像这样输出:

INFO [traceId=bb1e4cb28c9b5c91, spanId=9a99cdd902e0a850] Hello, world!

4. 启动Zipkin服务(可选)

如果你想使用Zipkin来存储和可视化追踪数据,你可以启动一个Zipkin服务。最简单的方式是通过Docker来启动Zipkin:

docker run -d -p 9411:9411 openzipkin/zipkin

访问http://localhost:9411,你就可以查看到通过Spring Cloud Sleuth发送的追踪信息。

5. 控制器示例(自动追踪)

Spring Cloud Sleuth会自动为所有的HTTP请求生成追踪信息。你不需要为每个控制器或者方法手动添加代码。它会为所有的HTTP请求自动创建Span并将它们传递给日志系统。你可以在日志中查看这些信息。
示例Controller:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.cloud.sleuth.Tracer;

@RestController
public class HelloController {

    private final Tracer tracer;

    public HelloController(Tracer tracer) {
        this.tracer = tracer;
    }

    @GetMapping("/hello")
    public String hello() {
        // 获取当前traceId
        String traceId = tracer.currentSpan().context().traceId();
        return "Hello, traceId: " + traceId;
    }
}

在上面的代码中,Tracer对象是Spring Cloud Sleuth提供的,它可以用来访问当前的追踪信息(如traceId和spanId)。每次调用/hello接口时,都会输出当前的traceId,并通过日志将该信息记录下来。

6. 自定义Span(可选)

如果你希望手动控制Span(比如在非HTTP请求中),可以通过Spring Cloud Sleuth提供的Tracer来创建自定义的Span。

import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Service;

@Service
public class MyService {

    private final Tracer tracer;

    public MyService(Tracer tracer) {
        this.tracer = tracer;
    }

    public void executeCustomLogic() {
        // 手动创建一个新的Span
        tracer.nextSpan().name("customSpan").start();
        
        // 执行某些操作
        // ...

        // 完成Span
        tracer.currentSpan().end();
    }
}

总结

在Spring Boot单体项目中实现Tracing,可以通过以下步骤:

  • 引入Spring Cloud Sleuth和Zipkin依赖。
  • 配置Zipkin或其他追踪系统的基本信息。
  • 通过日志查看traceId和spanId。
  • 使用Spring Cloud Sleuth自动追踪HTTP请求,或者手动创建Span进行追踪。

Spring Cloud Sleuth能够为你提供强大的分布式追踪能力,便于分析和排查问题,即使在单体应用中也能帮助你更好地监控系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值