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.pswp.cn/news/911879.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/911879.shtml
英文地址,請注明出處:http://en.pswp.cn/news/911879.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java底層原理:深入理解線程與并發機制

一、線程的基本概念 線程是操作系統能夠進行運算調度的最小單位。它被包含在進程之中&#xff0c;是進程中的實際運作單位。一個進程可以包含多個線程&#xff0c;這些線程共享進程的資源&#xff0c;但每個線程有其獨立的執行路徑。 &#xff08;一&#xff09;線程與進程的…

使用Dockerfile定制化鏡像和私有網盤案例

使用Dockerfile定制化鏡像和私有網盤案例 鏡像的分層結構是docker很重要的環節&#xff0c;如同搭積木一樣。 也主要是為了節省資源。 理解docker build的工作原理 Docker在運行的時候分為Docker引擎&#xff0c;和客戶端工具。docker的引擎提供一組API&#xff0c;被稱為Docke…

分享一些實用的PHP函數(對比js/ts實現)

檢查數組所有元素是否滿足給定條件 如果提供的函數對數組的所有元素返回 true&#xff0c;則返回 true&#xff0c;否則返回 false。 思路 實現思路如下: 使用數組的filter方法對數組執行給定的函數&#xff0c;然后使用count方法獲取執行后的結果&#xff0c;再和count方法…

HuggingFace下載的模型緩存到了C盤,如何安全遷移到其他盤

HuggingFace下載的模型緩存到了C盤&#xff0c;如何安全遷移到其他盤 ? 方法一&#xff1a;通過環境變量永久遷移緩存目錄&#xff08;**推薦**&#xff09;步驟如下&#xff1a;1?? 在 D 盤創建一個目錄&#xff08;比如&#xff09;&#xff1a;2?? 設置環境變量&#x…

vue 開啟 source-map 后構建速度會很慢

vue.config.js 的 configureWebpack.devtool 設置為 source-map 后&#xff0c;編譯速度會變慢&#xff0c;嚴重影響開發進度。 改善方法&#xff1a; 一&#xff1a;改為 module-eval-source-map 改為 module-eval-source-map 在打包速度和源碼信息還原程度都屬于良好程度。…

三維空間數據格式全景圖:OSGB | 3Dtiles | I3S | S3M

前言 當城市數字孿生遇上國產化替代&#xff0c;開發者該如何選型&#xff1f; ——深入解析四大主流格式的技術基因與落地場景 &#x1f52e; 趨勢預言&#xff1a; 2025年國土空間規劃全面實景三維化 ? S3M市占率將突破60%Cesium開源生態持續領跑Web端 ? 3Dtiles仍是跨國項…

【服務器】服務器選型設計

一、服務器產品說明 1.1 基礎服務器說明 1.1.1、服務器產品分類與核心指標?? ??1. 通用分類體系?? ??類型?? ??適用場景?? ??代表產品指標?? 塔式服務器 中小企業應用 ≤2路CPU&#xff0c;32G內存&#xff0c;支持熱插拔HDD 機架服務器 數據中心主…

【C++】noexcept的作用

【C】noexcept的作用 noexcept是C11引入的關鍵字&#xff0c;用于指定函數是否會拋出異常。它既是一個修飾符也是一個操作符&#xff0c;在現代C編程中扮演著重要角色。 一、noexcept的基本概念 noexcept主要有兩種形式&#xff1a; 無條件形式?&#xff1a;void func() n…

Docker 到底是個什么?

Docker 技術全面解析&#xff1a;從安裝到應用 一、引言 在當今的軟件開發和運維領域&#xff0c;Docker 已經成為了一個不可或缺的工具。它以其輕量級、可移植性和高效性等特點&#xff0c;改變了開發者和運維人員的工作方式&#xff0c;使得應用的打包、分發、運行變得更加…

Python 可迭代的對象、迭代器 和生成器(Sentence類第3版:生成器函數)

Sentence類第3版&#xff1a;生成器函數 實現相同功能&#xff0c;但卻符合 Python 習慣的方式是&#xff0c;用生成器函數代替 SentenceIterator 類。先看示例 14-5&#xff0c;然后詳細說明生成器函數。 示例 14-5 sentence_gen.py&#xff1a;使用生成器函數實現 Sentence…

5G自協商

好的&#xff0c;下面是一個基于裸機 C 環境的自協商實現示例代碼&#xff0c;支持 **最高 5G 并向下兼容**。這個代碼框架假設你使用的是 IEEE 802.3 規范下的 **MDIO** 接口和常見的 **Marvell PHY**&#xff08;或類似支持 5G/2.5G 的PHY&#xff09;。 c #include <std…

sublime 4200 激活

目錄 下載激活方式一&#xff1a;sublime 打開方式二&#xff1a;https://hexed.it 打開 下載 sublime官方下載 sublime_text_build_4200_x64.zip 激活 方式一&#xff1a;sublime 打開 1、復制 sublime_text.exe 為 sublime_text_activation.exe 2、直接使用 sublime_ 打開…

Ceph 和 MinIO

Ceph 和 MinIO 是兩種主流的分布式存儲系統&#xff0c;但它們的設計目標、架構和使用場景存在顯著差異。以下是清晰的對比解析&#xff1a; &#x1f9e9; 核心定位對比 維度CephMinIO定位統一存儲平臺&#xff08;塊/對象/文件&#xff09;純對象存儲&#xff08;S3兼容&…

cili3d筆記20 正交投影3d重建筆記1

正交視圖轉3d mostFrequentCluster.lines.forEach(line > {const [x1, y1, x2, y2] line;let xhat{x1,x2};let yhat{y1,y2};}); 沒考慮到側視圖 const clusters clusterLines(inputlines, 5);const lines3d:[number,number,number,number,number,number][][]const { mostM…

【Docker基礎】Docker容器生命周期管理:從創建到刪除的完整指南

目錄 1 容器生命周期概述 2 容器創建&#xff08;docker create&#xff09; 2.1 docker create命令詳解 2.2 創建流程解析 2.3 創建與運行的區別 3 容器啟動&#xff08;docker start&#xff09; 3.1 docker start命令詳解 3.2 啟動流程解析 3.3 啟動與運行的區別 …

Docker、Docker composer與Docker desktop

文章目錄 Docker、Docker composer與Docker desktop一、docker、docker composer、docker desktop1.1 Docker1.2 Docker Compose1.3 Docker Desktop1.4 三者之間的區別 二、docker desktop的安裝和換源2.1 前期準備WSL2 2.1 Docker Desktop 安裝下載 Docker Desktop安裝 Docker…

H5錄音、圖文視頻IndexDB儲存最佳實踐:用AI生成語音備忘錄

引言 早在大學的時候&#xff0c;我就期望做一款屬于自己的 APP&#xff0c;可惜那時不懂技術。現在有了技術&#xff0c;但卻沒有時間。好在 AI 的快速發展終于讓我完成了這個愿望。于是&#xff0c;我用半天的時間&#xff0c;用 AI 生成了一個純前端的 H5 程序&#xff1a;…

簡述C++ nlohmann/json 庫

目錄 JSON概述 nlohmann/json 庫的使用 創建json數組/對象 字符串解析&#xff08;parse反序列化&#xff09; 數據訪問 序列化 文件讀寫 JSON概述 JSON(JavaScrip Object Notation)是一種輕量級、跨語言的數據交換格式。它基于 ECMAScript 子集&#xff0c;以獨立于編程…

定制開發開源AI智能名片與S2B2C商城小程序的內容分發體系構建:基于“1+N“素材復用模型的創新實踐

摘要&#xff1a;在數字內容爆炸式增長的當下&#xff0c;本文針對內容分發效率低下的行業痛點&#xff0c;提出基于"定制開發開源AI智能名片S2B2C商城小程序"的一體化解決方案。通過構建"1篇長文10條長視頻20條短視頻10個平臺"的素材復用公式&#xff0c;…

c++26新功能—hive容器

一、容器的演進 科學進步的過程一般來說都是從先解決常用的、迫切的問題開始&#xff0c;然后再逐步解決一些少見不迫切的問題&#xff0c;直到最終解決到認知程度內的諸多問題。舉一個網上的例子&#xff0c;以前說咱們無法生產水筆的尖頭上的鋼球&#xff0c;其實這對于國內…