You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Spring Boot微服务配置Sleuth对接AWS CloudWatch追踪日志

实现Spring Boot微服务Sleuth+AWS CloudWatch日志追踪的三种方式

方式一:原生集成Sleuth + AWS CloudWatch Logs SDK

适合需要自定义日志发送逻辑、完全掌控上传流程的场景。

    1. 添加依赖
      在pom.xml中引入Spring Cloud Sleuth和AWS CloudWatch Logs SDK:
<dependencies>
    <!-- Spring Cloud Sleuth -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    <!-- AWS CloudWatch Logs SDK -->
    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>cloudwatchlogs</artifactId>
    </dependency>
    <!-- AWS SDK自动配置 -->
    <dependency>
        <groupId>io.awspring.cloud</groupId>
        <artifactId>spring-cloud-starter-aws</artifactId>
    </dependency>
</dependencies>
    1. 配置Sleuth基础参数
      在application.yml中开启Sleuth并设置采样率:
spring:
  cloud:
    sleuth:
      sampler:
        probability: 1.0 # 全量采样,生产环境可根据需求调整
    1. 实现CloudWatch日志发送逻辑
      创建配置类初始化CloudWatch客户端,编写日志工具类从MDC中获取Sleuth生成的traceId并嵌入日志事件:
@Configuration
public class CloudWatchConfig {
    @Bean
    public CloudWatchLogsClient cloudWatchLogsClient() {
        return CloudWatchLogsClient.create();
    }
}

@Component
public class CloudWatchLogger {
    private final CloudWatchLogsClient logsClient;
    private final String logGroupName = "your-service-log-group";
    private final String logStreamName = "your-service-log-stream";

    @Autowired
    public CloudWatchLogger(CloudWatchLogsClient logsClient) {
        this.logsClient = logsClient;
    }

    public void log(String message) {
        String traceId = MDC.get("traceId");
        String logMessage = String.format("[traceId: %s] %s", traceId, message);
        
        InputLogEvent logEvent = InputLogEvent.builder()
                .message(logMessage)
                .timestamp(Instant.now().toEpochMilli())
                .build();
        
        PutLogEventsRequest request = PutLogEventsRequest.builder()
                .logGroupName(logGroupName)
                .logStreamName(logStreamName)
                .logEvents(logEvent)
                .build();
        
        logsClient.putLogEvents(request);
    }
}
    1. 业务中使用自定义日志工具
      在业务代码中注入CloudWatchLogger,直接调用日志方法即可,日志会自动携带traceId。

方式二:Sleuth + Logback/Log4j2 CloudWatch Appender

更简洁的方案,通过日志框架的Appender直接推送日志到CloudWatch,无需手动编写SDK调用逻辑。

以Logback为例:

    1. 添加依赖
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    <dependency>
        <groupId>com.github.mgurov</groupId>
        <artifactId>logback-cloudwatch-appender</artifactId>
        <version>1.7</version>
    </dependency>
</dependencies>
    1. 配置Logback Appender
      在src/main/resources/logback-spring.xml中配置CloudWatch Appender,确保日志格式包含Sleuth的traceId:
<configuration>
    <appender name="CLOUDWATCH" class="com.github.mgurov.logback.cloudwatch.CloudWatchAppender">
        <logGroupName>your-service-log-group</logGroupName>
        <logStreamName>your-service-log-stream</logStreamName>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [traceId: %X{traceId}] - %msg%n</pattern>
        </layout>
    </appender>

    <root level="INFO">
        <appender-ref ref="CLOUDWATCH"/>
    </root>
</configuration>
    1. 验证日志
      启动服务后,日志会自动通过Appender发送到CloudWatch,每条日志都会携带traceId,可在CloudWatch控制台通过traceId关键词过滤查询全链路日志。

方式三:OpenTelemetry替代Sleuth + AWS CloudWatch

由于Spring Cloud Sleuth已进入维护模式,官方推荐使用OpenTelemetry作为替代方案,兼容Sleuth的追踪能力,同时更好地支持CloudWatch生态。

    1. 添加依赖
      替换Sleuth为OpenTelemetry的Spring Boot Starter和CloudWatch Exporter:
<dependencies>
    <!-- OpenTelemetry Spring Boot Starter -->
    <dependency>
        <groupId>io.opentelemetry.instrumentation</groupId>
        <artifactId>opentelemetry-spring-boot-starter</artifactId>
        <version>1.32.0</version>
    </dependency>
    <!-- AWS CloudWatch Exporter -->
    <dependency>
        <groupId>io.opentelemetry.contrib</groupId>
        <artifactId>opentelemetry-aws-cloudwatch-exporter</artifactId>
        <version>1.32.0-alpha</version>
    </dependency>
</dependencies>
    1. 配置OTel和CloudWatch
      在application.yml中配置追踪导出和日志关联:
opentelemetry:
  traces:
    exporter:
      aws:
        cloudwatch:
          log-group-name: your-service-trace-group
          region: us-east-1
  logs:
    exporter:
      aws:
        cloudwatch:
          log-group-name: your-service-log-group
          region: us-east-1
  resource:
    attributes:
      service.name: your-service-name
    1. 配置日志框架关联Trace ID
      以Logback为例,修改日志格式包含OTel的trace_id(与Sleuth的traceId值一致):
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [traceId: %X{trace_id}] - %msg%n</pattern>
    1. 验证追踪与日志
      启动服务后,OTel会自动生成Trace ID并注入MDC,日志和追踪数据都会同步到CloudWatch,可通过Trace ID在CloudWatch的日志和追踪面板中关联查询全链路请求。

内容的提问来源于stack exchange,提问作者Whiteox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:25:26