当前位置: 首页 > news >正文

Spring Boot 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: alwaystrace: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 {@BeanInMemoryHttpTraceRepository 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")@ResponseBodypublic String hello(@RequestParam(name = "name", defaultValue = "unknown user") String name) {return "Hello " + name;}// http://127.0.0.1:8080/user@RequestMapping("/user")@ResponseBodypublic 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")@ResponseBodypublic String saveUser(User u) {return "user will save: name=" + u.getName() + ", age=" + u.getAge();}@ModelAttributepublic 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工具。

参考:

https://docs.spring.io/spring-boot/reference/actuator/endpoints.html#page-title
https://docs.spring.io/spring-boot/docs/3.1.0/reference/html/actuator.html#actuator.http-exchanges
https://github.com/spring-projects/spring-boot/issues/17047

http://www.lqws.cn/news/478387.html

相关文章:

  • 【数据结构与算法】数据结构初阶:详解顺序表和链表(一)
  • C++,Qt事件处理机制编程开发练习全解析,23000字解析!!
  • RabbitMQ从入门到实践:消息队列核心原理与典型应用场景
  • Oracle 数据库查询:单表查询
  • 嵌入式通信协议框架的四层架构设计与实现
  • 【云原生】Docker 部署 Elasticsearch 9 操作详解
  • 华为OD-2024年E卷-字符串化繁为简[200分] -- python
  • 「Linux文件及目录管理」vi、vim编辑器
  • Ragflow 源码:task_executor.py
  • Sqlserver 设置对特定数据库特定表只读访问权限
  • 1928: 日期差值 codeup
  • MySQL安装与配置【windowsMac】
  • Unity3D仿星露谷物语开发69之动作声音
  • Unity Addressable使用之服务器远程加载
  • leetcode:面试题 08.01. 三步问题
  • AWS认证系列:考点解析 - cloud trail,cloud watch,aws config
  • JavaEE-Mybatis初阶
  • ubuntu24.04+5090显卡驱动安装踩坑
  • C4.5算法深度解析:决策树进化的里程碑
  • 低空经济三大赛道深度解析:交通、安防、能源领域的革命性突破
  • 华为公布《鸿蒙编程语言白皮书》V1.0 版:解读适用场景
  • es中向量索引的增量更新
  • Linux:早期操作系统的系统调用
  • 【论文阅读笔记】TransparentGS:当高斯溅射学会“看穿”玻璃,如何攻克透明物体重建难题?
  • Day56打卡 @浙大疏锦行
  • 【threejs】一天一个小案例讲解:控制面板(GUI)
  • 扩散模型与强化学习(1):字节Seedance中的人类偏好优化实践
  • 华为云Flexus+DeepSeek征文|基于Dify构建解析网页写入Notion笔记工作流
  • sqlite3 数据库反弹shell
  • 开发语言本身只是提供了一种解决问题的工具