SpringBoot Actuator跟踪HTTP请求和响应的方法

 更新时间:2025年08月19日 09:22:43   作者:yifanghub  
Spring Boot Actuator 是 Spring Boot 提供的生产级监控和管理模块,旨在帮助开发者实时监控应用状态、收集运行时指标,并提供一系列管理端点,本文给大家介绍了SpringBoot Actuator跟踪HTTP请求和响应的方法,需要的朋友可以参考下

一、Spring Boot Actuator简介

什么是Spring Boot Actuator?Spring Boot Actuator 是 Spring Boot 提供的生产级监控和管理模块,旨在帮助开发者实时监控应用状态收集运行时指标,并提供一系列管理端点(Endpoints),它的关键特性是提供了一系列的Web接口,通过它们能够快速诊断问题、优化性能,并确保应用健康运行。

Actuator 的核心功能

  • 1.1 应用健康检查
    /health 端点:检查应用关键组件(如数据库、磁盘、消息队列)是否正常。
  • 1.2 性能指标监控
    /metrics 端点:提供 JVM 内存、CPU 使用率、HTTP 请求统计等指标。
  • 1.3 动态日志调整
    /loggers 端点:运行时修改日志级别(如临时开启 DEBUG 日志排查问题)。
  • 1.4 请求追踪(HTTP Trace)
    /httptrace 端点(Spring Boot 2.x):记录最近请求的 URL、方法、响应时间等。
  • 1.5 线程与堆栈分析
    /threaddump 端点:导出当前所有线程状态,用于诊断死锁或性能瓶颈。
    /heapdump 端点:生成 JVM 堆内存快照。

二、开启Http接口监控

在一般的分布式架构中,我们一般有查看API接口的请求/响应的需求,而Spring Boot Actuator通过其httptrace端点即能够返回基本的HTTP跟踪信息,本文介绍该功能的使用

环境:SpringBoot 2.7.6

1.为SpringBoot项目添加依赖

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
 </dependency>

2.添加yml配置

management:
    endpoint:
        health:
            show-details: always
    trace:
        http:
            enabled: true # 启用HTTP追踪
            include:
    endpoints:
        jmx:
            exposure:
                include: '*'
        web:
            exposure:
                include: '*'# 暴露端点,这里开启所有默认Web端点
    server:
        port: 8081 # 这里访问/actuator 端点的端口

此时,我们本地访问/actuator端点的地址为:http://127.0.0.1/actuator,返回结果如下

我们可以看到返回了很多Actuator的端点接口路径,但并没有发现httptrace模块,要开启接口监控功能我们还要注册一个HttpTraceRepository类型的Bean

3.声明存储Bean

Spring Boot Actuator 默认会把最近100次的HTTP请求记录到内存中,对应的实现类是InMemoryHttpTraceRepository

package com.example.springhttptrace.config;

import org.springframework.boot.actuate.trace.http.InMemoryHttpTraceRepository;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HttpActuatorConfig {
    @Bean
    InMemoryHttpTraceRepository inMemoryHttpTraceRepository() {
        return new InMemoryHttpTraceRepository() ;
    }
}

完成上面类配置,启动项目并访问:访问http://localhost:8081/actuator,可以看到:

注意:Spirngboot2.x版本可以通过注入 InMemoryHttpTraceRepository来开启httptrace,但Spirngboot3.x版本中是不能直接注入InMemoryHttpTraceRepository 开启,需要使用httpExchanges开启http trace,官方解释生产环境可能存在一些性能问题,官方建议使用 zipKinOpenTelemetry等开源框架

4.写测试API接口

@Controller
public class BasicController {

    // http://127.0.0.1:8080/hello?name=lisi
    @RequestMapping("/hello")
    @ResponseBody
    public String hello(@RequestParam(name = "name", defaultValue = "unknown user") String name) {
        return "Hello " + name;
    }

    // http://127.0.0.1:8080/user
    @RequestMapping("/user")
    @ResponseBody
    public User user() {
        User user = new User();
        user.setName("theonefx");
        user.setAge(666);
        return user;
    }

    // http://127.0.0.1:8080/save_user?name=newName&age=11
    @RequestMapping("/save_user")
    @ResponseBody
    public String saveUser(User u) {
        return "user will save: name=" + u.getName() + ", age=" + u.getAge();
    }

    @ModelAttribute
    public void parseUser(@RequestParam(name = "name", defaultValue = "unknown user") String name
            , @RequestParam(name = "age", defaultValue = "12") Integer age, User user) {
        user.setName("zhangsan");
        user.setAge(18);
    }
}

访问:http://127.0.0.1:8080/hello?name=lisi
返回结果后,再访问:http://localhost:8081/actuator/httptrace,结果如下:

其中:

  • timestamp,请求发生的时间戳(UTC 格式)
  • principal,认证用户信息(未认证时为 null)
  • session,会话 ID(未启用会话时为 null)
  • request,请求对象信息
  • response,响应对象信息
  • timeTaken,请求处理耗时(毫秒),未记录时为 null 值为 150 表示处理耗时 150ms

总结

Spring Boot Actuator的HTTP Trace功能为监控HTTP接口提供了便捷的解决方案,它开箱即用地记录请求方法、URL、状态码和耗时等基础信息,适合快速定位问题。然而,该功能默认不记录请求体/响应体等关键数据,内存存储仅保留100条记录,且高频请求下可能产生性能开销,生产环境建议优先考虑更专业的APM工具。

以上就是SpringBoot Actuator跟踪HTTP请求和响应的方法的详细内容,更多关于SpringBoot Actuator跟踪HTTP的资料请关注脚本之家其它相关文章!

相关文章

  • JAVA8 lambda表达式权威教程

    JAVA8 lambda表达式权威教程

    本文主要给大家讲解Java8中最重要的一个特征之一lambda表达式,本文通过实例图文解说给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习下吧
    2021-05-05
  • Spring Data JPA带条件分页查询实现原理

    Spring Data JPA带条件分页查询实现原理

    这篇文章主要介绍了Spring Data JPA带条件分页查询实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Mybatis如何传入多个参数(实体类型和基本类型)

    Mybatis如何传入多个参数(实体类型和基本类型)

    这篇文章主要介绍了Mybatis如何传入多个参数(实体类型和基本类型),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • FeignClient如何共享Header及踩坑过程记录

    FeignClient如何共享Header及踩坑过程记录

    这篇文章主要介绍了FeignClient如何共享Header及踩坑过程记录,
    2022-03-03
  • Java报错Non-terminating decimal expansion解决分析

    Java报错Non-terminating decimal expansion解决分析

    这篇文章主要为大家介绍了Java报错Non-terminating decimal expansion解决方案及原理分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Spring Data Jpa Mysql使用utf8mb4编码的示例代码

    Spring Data Jpa Mysql使用utf8mb4编码的示例代码

    这篇文章主要介绍了Spring Data Jpa Mysql使用utf8mb4编码的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Java实现的简单字符串反转操作示例

    Java实现的简单字符串反转操作示例

    这篇文章主要介绍了Java实现的简单字符串反转操作,结合实例形式分别描述了java遍历逆序输出以及使用StringBuffer类的reverse()方法两种字符串反转操作技巧,需要的朋友可以参考下
    2018-08-08
  • java智能问答图灵机器人AI接口(聚合数据)

    java智能问答图灵机器人AI接口(聚合数据)

    这篇文章主要介绍了java智能问答图灵机器人AI接口(聚合数据),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • JavaWeb踩坑记录之项目访问不到html文件

    JavaWeb踩坑记录之项目访问不到html文件

    这篇文章主要给大家介绍了关于JavaWeb踩坑记录之项目访问不到html文件的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用JavaWeb具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • 基于Java手写一个通用限流任务执行器

    基于Java手写一个通用限流任务执行器

    调用第三方API最怕什么,那就是怕被限流,今天分享一个自制的限流任务执行器,能帮你轻松控制请求频率,还能自动重试失败任务,指数退避不添乱,快跟随小编一起学习起来吧
    2026-04-04

最新评论