开发者

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

开发者 https://www.devze.com 2025-08-19 10:41 出处:网络 作者: yifanghub
目录一、Spring Boot Actuator简介Actuator 的核心功能二、开启Http接口监控1.为SpringBoot项目添加依赖2.添加yml配置3.声明存储Bean4.写测试API接口总结一、Spring Boot Actuator简介
目录
  • 一、Spring Boot Actuator简介
    • Actuator 的核心功能
  • 二、开启Http接口监控
    • 1.为SpringBoot项目添加依赖
    • 2.添加yml配置
    • 3.声明存储Bean
    • 4.写测试API接口
  • 总结

    一、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:javascript
        endpoint:
            health:
         www.devze.com       show-details: always
        trace:
            http:
                enabled: true # 启用HTTP追踪
                include:
        endpoints:
            jmx:
                exposure:
                    include:javascript '*'
            web:
                exposure:
                    include: '*'# 暴露端点,这里开启所有默认Web端点
        servejsr:
            port: 8081 # 这里访问/actuator 端点的端口
    

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

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

    我们可以看到返回了很多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,可以看到:

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

    注意: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,结果如下:

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

    其中:

    • timestamp,请求发生www.devze.com的时间戳(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的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号