SpringBoot Actuator跟蹤HTTP請(qǐng)求和響應(yīng)的方法
一、Spring Boot Actuator簡(jiǎn)介
什么是Spring Boot Actuator?Spring Boot Actuator 是 Spring Boot 提供的生產(chǎn)級(jí)監(jiān)控和管理模塊,旨在幫助開(kāi)發(fā)者實(shí)時(shí)監(jiān)控應(yīng)用狀態(tài)、收集運(yùn)行時(shí)指標(biāo),并提供一系列管理端點(diǎn)(Endpoints),它的關(guān)鍵特性是提供了一系列的Web接口,通過(guò)它們能夠快速診斷問(wèn)題、優(yōu)化性能,并確保應(yīng)用健康運(yùn)行。
Actuator 的核心功能
- 1.1 應(yīng)用健康檢查
/health 端點(diǎn):檢查應(yīng)用關(guān)鍵組件(如數(shù)據(jù)庫(kù)、磁盤、消息隊(duì)列)是否正常。 - 1.2 性能指標(biāo)監(jiān)控
/metrics 端點(diǎn):提供 JVM 內(nèi)存、CPU 使用率、HTTP 請(qǐng)求統(tǒng)計(jì)等指標(biāo)。 - 1.3 動(dòng)態(tài)日志調(diào)整
/loggers 端點(diǎn):運(yùn)行時(shí)修改日志級(jí)別(如臨時(shí)開(kāi)啟 DEBUG 日志排查問(wèn)題)。 - 1.4 請(qǐng)求追蹤(HTTP Trace)
/httptrace 端點(diǎn)(Spring Boot 2.x):記錄最近請(qǐng)求的 URL、方法、響應(yīng)時(shí)間等。 - 1.5 線程與堆棧分析
/threaddump 端點(diǎn):導(dǎo)出當(dāng)前所有線程狀態(tài),用于診斷死鎖或性能瓶頸。
/heapdump 端點(diǎn):生成 JVM 堆內(nèi)存快照。
二、開(kāi)啟Http接口監(jiān)控
在一般的分布式架構(gòu)中,我們一般有查看API接口的請(qǐng)求/響應(yīng)的需求,而Spring Boot Actuator通過(guò)其httptrace端點(diǎn)即能夠返回基本的HTTP跟蹤信息,本文介紹該功能的使用
環(huán)境:SpringBoot 2.7.6
1.為SpringBoot項(xiàng)目添加依賴
<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: '*'# 暴露端點(diǎn),這里開(kāi)啟所有默認(rèn)Web端點(diǎn)
server:
port: 8081 # 這里訪問(wèn)/actuator 端點(diǎn)的端口
此時(shí),我們本地訪問(wèn)/actuator端點(diǎn)的地址為:http://127.0.0.1/actuator,返回結(jié)果如下

我們可以看到返回了很多Actuator的端點(diǎn)接口路徑,但并沒(méi)有發(fā)現(xiàn)httptrace模塊,要開(kāi)啟接口監(jiān)控功能我們還要注冊(cè)一個(gè)HttpTraceRepository類型的Bean
3.聲明存儲(chǔ)Bean
Spring Boot Actuator 默認(rèn)會(huì)把最近100次的HTTP請(qǐng)求記錄到內(nèi)存中,對(duì)應(yīng)的實(shí)現(xiàn)類是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() ;
}
}
完成上面類配置,啟動(dòng)項(xiàng)目并訪問(wèn):訪問(wèn)http://localhost:8081/actuator,可以看到:

注意:Spirngboot2.x版本可以通過(guò)注入 InMemoryHttpTraceRepository來(lái)開(kāi)啟httptrace,但Spirngboot3.x版本中是不能直接注入InMemoryHttpTraceRepository 開(kāi)啟,需要使用httpExchanges開(kāi)啟http trace,官方解釋生產(chǎn)環(huán)境可能存在一些性能問(wèn)題,官方建議使用 zipKin或OpenTelemetry等開(kāi)源框架
4.寫測(cè)試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);
}
}
訪問(wèn):http://127.0.0.1:8080/hello?name=lisi
返回結(jié)果后,再訪問(wèn):http://localhost:8081/actuator/httptrace,結(jié)果如下:

其中:
- timestamp,請(qǐng)求發(fā)生的時(shí)間戳(UTC 格式)
- principal,認(rèn)證用戶信息(未認(rèn)證時(shí)為 null)
- session,會(huì)話 ID(未啟用會(huì)話時(shí)為 null)
- request,請(qǐng)求對(duì)象信息
- response,響應(yīng)對(duì)象信息
- timeTaken,請(qǐng)求處理耗時(shí)(毫秒),未記錄時(shí)為 null 值為 150 表示處理耗時(shí) 150ms
總結(jié)
Spring Boot Actuator的HTTP Trace功能為監(jiān)控HTTP接口提供了便捷的解決方案,它開(kāi)箱即用地記錄請(qǐng)求方法、URL、狀態(tài)碼和耗時(shí)等基礎(chǔ)信息,適合快速定位問(wèn)題。然而,該功能默認(rèn)不記錄請(qǐng)求體/響應(yīng)體等關(guān)鍵數(shù)據(jù),內(nèi)存存儲(chǔ)僅保留100條記錄,且高頻請(qǐng)求下可能產(chǎn)生性能開(kāi)銷,生產(chǎn)環(huán)境建議優(yōu)先考慮更專業(yè)的APM工具。
以上就是SpringBoot Actuator跟蹤HTTP請(qǐng)求和響應(yīng)的方法的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Actuator跟蹤HTTP的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Mybatis Plugin攔截器開(kāi)發(fā)過(guò)程詳解
這篇文章主要介紹了Mybatis Plugin攔截器開(kāi)發(fā)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
解決myBatis中openSession()自動(dòng)提交的問(wèn)題
在學(xué)習(xí)MySQL過(guò)程中,發(fā)現(xiàn)插入操作自動(dòng)提交,問(wèn)題原因可能是myBatis中的openSession()方法設(shè)置了自動(dòng)提交,或者是MySQL的默認(rèn)引擎設(shè)置為不支持事務(wù)的MyISAM,解決辦法包括更改myBatis的提交設(shè)置或?qū)ySQL表的引擎改為InnoDB2024-09-09
使用Spring的注解方式實(shí)現(xiàn)AOP實(shí)例
本篇文章主要介紹了使用Spring的注解方式實(shí)現(xiàn)AOP實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
Spring Boot構(gòu)建系統(tǒng)安全層的步驟
這篇文章主要介紹了Spring Boot構(gòu)建系統(tǒng)安全層的步驟,幫助大家更好的理解和學(xué)習(xí)使用Spring Boot框架,感興趣的朋友可以了解下2021-04-04
java實(shí)現(xiàn)內(nèi)存調(diào)試與診斷的示例代碼
隨著現(xiàn)代應(yīng)用程序功能的日益復(fù)雜化以及大數(shù)據(jù)、微服務(wù)、云原生等架構(gòu)模式的廣泛應(yīng)用,Java應(yīng)用的運(yùn)行時(shí)內(nèi)存壓力不斷增大,所以本文就來(lái)和大家講講如何對(duì) Java 應(yīng)用進(jìn)行內(nèi)存調(diào)試與診斷吧2025-05-05
利用Java實(shí)現(xiàn)word導(dǎo)入導(dǎo)出富文本(含圖片)的詳細(xì)代碼
這篇文章主要為大家詳細(xì)介紹了利用Java實(shí)現(xiàn)word導(dǎo)入導(dǎo)出富文本(含圖片),文中的示例代碼講解詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下2024-02-02
Springboot實(shí)現(xiàn)獲取實(shí)時(shí)天氣
這篇文章主要為大家詳細(xì)介紹了如何使用Springboot實(shí)現(xiàn)獲取實(shí)時(shí)天氣功能,文中的示例代碼講解詳細(xì),有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
SpringBoot?注解?@AutoConfiguration?在?2.7?版本中被新增的使用方法詳解
這篇文章主要介紹了SpringBoot?注解?@AutoConfiguration?在?2.7?版本中被新增(使用方法),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09

