Spring Boot Actuator - 應用監控與管理

一、 Spring Boot Actuator 概述

Spring Boot Actuator是Spring Boot 提供的生產級監控與管理工具集,用于實時監控和運維管理應用。Actuator 通過HTTP 端點(或 JMX 端點)暴露應用的健康狀態、性能指標、日志信息、環境配置等關鍵數據,使開發者和運維人員能夠高效地監測應用狀態、優化性能、排查問題,尤其適用于生產環境。

核心功能:

1.健康檢查(Health Checks)

? 提供應用的運行健康狀態,可監控數據庫、緩存、消息隊列等依賴服務,通常用于服務可用性探測(如 Kubernetes 健康檢查)。

? 通過/actuator/health端點訪問,返回UP(正常)或 DOWN(異常),支持自定義健康檢查。

2.度量指標(Metrics)

? 提供應用的性能指標,包括JVM 內存使用、GC 狀態、線程數、數據庫連接池狀態等。

? 通過/actuator/metrics端點訪問,可與Prometheus、Grafana、Micrometer結合,實現完整的應用監控方案。

3.日志管理(Logging)

? 通過/actuator/loggers端點,支持實時調整日志級別,避免生產環境修改配置后必須重啟應用的麻煩。

? /actuator/logfile端點可直接查看應用日志文件(需額外配置logging.file.name或logging.file.path)。

4.環境信息(Environment Info)

? 通過/actuator/env端點,查看應用當前的環境變量、配置屬性、系統參數等,方便排查配置問題。

? /actuator/configprops端點可查看所有@ConfigurationProperties 配置項,直觀了解 Spring Boot 自動配置細節。

二、 集成 Spring Boot Actuator

Spring Boot Actuator 提供了一套開箱即用的監控和管理工具,集成非常簡單,只需添加依賴、啟用端點并配置訪問權限即可。

步驟1:Maven 依賴配置

在pom.xml文件中引入 Spring Boot Actuator 依賴。

<dependencies><!-- Spring Boot Actuator --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
</dependencies>

添加依賴后,Actuator 的部分端點會默認啟用,無需額外代碼即可使用。

步驟2: 啟用 Actuator 端點

Actuator 端點分為默認啟用端點和需手動啟用端點。

默認啟用的端點:

? /actuator/health:應用健康狀況

? /actuator/info:應用基本信息

非默認啟用端點:

以下端點默認可用但未暴露,需要手動啟用:

? /actuator/metrics:應用性能指標(JVM 內存、GC、請求數等)

? /actuator/env:應用環境變量、系統屬性

? /actuator/logfile:訪問日志文件(需額外配置日志路徑)

? /actuator/heapdump:下載 JVM 堆轉儲文件

? /actuator/threads:查看線程信息

? /actuator/configprops:查看@ConfigurationProperties配置項

? /actuator/caches:查看緩存狀態

? /actuator/beans:列出 Spring Beans

? /actuator/auditevents:Spring Security 審計事件

啟用非默認端點

在application.properties或application.yml中配置。

在 application.properties 中:

# 啟用指定端點
management.endpoints.web.exposure.include=metrics,logfile
# 啟用所有端點
management.endpoints.web.exposure.include=*
在 application.yml 中:management:endpoints:web:exposure:include: env,metrics

配置日志路徑(適用于 /logfile 端點)

/logfile端點顯示暴露后,還需在application.properties配置日志文件路徑:

management.endpoint.logfile.external-file=/var/log/myapp.log

步驟3:訪問Actuator端點

1.訪問健康檢查端點(Health Check):

http://localhost:8080/actuator/health

響應示例:

{"status": "UP"
}

? UP表示應用正常運行。

? DOWN表示應用不健康。

? OUT_OF_SERVICE表示應用正在停止。

2.訪問度量指標端點(Metrics):

http://localhost:8080/actuator/metrics

響應示例:

{"names": ["jvm.memory.used","jvm.gc.pause","http.server.requests"]
}

訪問特定指標,查看具體數值:

http://localhost:8080/actuator/metrics/jvm.memory.used

返回的內容:

{"name": "jvm.memory.used","measurements": [{"statistic": "VALUE","value": 12345678}],"availableTags": [{"tag": "area","values": ["heap", "non-heap"]}]
}

3.訪問信息端點(Info):

http://localhost:8080/actuator/info

響應示例:

{"app": {"name": "MyApp","version": "1.0.0"}
}

三、 自定義 Actuator 端點

Spring Boot Actuator 提供了豐富的內置端點,但在某些情況下,需要自定義端點以滿足特定的監控需求。Actuator 支持兩種方式創建自定義端點:

? 實現 Endpoint 接口

? 繼承 AbstractEndpoint(已在較早版本使用,現推薦 @Endpoint 注解方式)

步驟1:創建自定義端點類

簡單示例:

import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.stereotype.Component;@Component
@Endpoint(id = "custom")
public class CustomEndpoint {@ReadOperationpublic String customEndpoint() {return "這是自定義的 Actuator 端點";}
}

代碼解析:

? @Endpoint(id = “custom”):定義自定義端點/actuator/custom。

? @ReadOperation:指定該方法用于 GET 請求,返回端點的數據。

步驟2:配置暴露自定義端點

默認情況下,Spring Boot 僅暴露health和info端點。要使自定義端點可訪問,需要在application.properties或application.yml配置:

management.endpoints.web.exposure.include=custom

或在application.yml中:

management:endpoints:web:exposure:include: custom

步驟3:訪問自定義端點

應用啟動后,可通過以下 URL 訪問:

http://localhost:8080/actuator/custom

響應:

"這是自定義的 Actuator 端點"

四、端點擴展

在 Spring Boot Actuator 中,除了自定義端點,還可以對已有端點進行擴展,以增強其功能。在不重新創建端點的情況下,滿足特定業務需求。

1. 擴展健康檢查(HealthIndicator)

/actuator/health端點默認檢查應用的基本健康狀態。我們可以通過實現HealthIndicator接口,擴展健康檢查邏輯,例如,檢查應用的數據庫連接、第三方服務的狀態等。

代碼示例:檢查數據庫是否正常

@Component
public class DatabaseHealthIndicator implements HealthIndicator {@Overridepublic Health health() {// 數據庫連接檢查boolean isDatabaseHealthy = checkDatabase();// 根據數據庫健康狀態返回健康狀態if (isDatabaseHealthy) {return Health.up().withDetail("Database", "OK").build();} else {return Health.down().withDetail("Database", "Not reachable").build();}}// 模擬數據庫連接檢查的方法private boolean checkDatabase() {// 這里可以寫實際的數據庫連接檢查邏輯// 如,通過 JDBC 或連接池檢查數據庫連接return true;  // 假設數據庫連接正常}
}

代碼解析:

? @Component: 標記DatabaseHealthIndicator為 Spring Bean,確保被 Spring 掃描并注冊。

? HealthIndicator接口:自定義健康檢查邏輯的基類。

? health():檢查數據庫連接。正常返回UP,否則返回DOWN。

健康檢查結果:

訪問/actuator/health,如果數據庫正常:

{"status": "UP","details": {"Database": "OK"}
}

如果數據庫不可用:


{"status": "DOWN","details": {"Database": "Not reachable"}
}

2. 擴展日志管理(動態修改日志級別)

/actuator/logfile端點提供了日志內容的查看功能。Spring Boot 允許通過logback-spring.xml配置文件動態控制日志級別。

代碼示例:

<configuration><!-- 控制根日志級別為INFO --><root level="INFO"><appender-ref ref="CONSOLE"/></root><!-- 定義日志級別為DEBUG --><logger name="com.example" level="DEBUG"/><!-- 控制日志輸出格式 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern></encoder></appender>
</configuration>

代碼解析:

?  <root level="INFO">: 設置根日志級別為INFO,即顯示INFO及更高級別的日志(如WARN,ERROR)。?  <logger name="com.example" level="DEBUG"/>: 為特定包(com.example)設置DEBUG級別日志,使得它顯示更多細節。?  <appender>: 定義日志輸出方式(例如,輸出到控制臺)。

動態修改日志級別:

通過/actuator/loggers端點動態修改日志級別,例如:

1.查看當前日志級別:

GET /actuator/loggers/com.example

2.動態修改日志級別:

POST /actuator/loggers/com.example
Content-Type: application/json
{"configuredLevel": "DEBUG"
}

修改后,日志系統會立即生效,而無需重啟應用。

3. 擴展度量指標(Metrics)

使用MeterRegistry注冊自定義指標,例如,添加自定義計數器:

@Component
public class CustomMetrics {private final MeterRegistry meterRegistry;public CustomMetrics(MeterRegistry meterRegistry) {this.meterRegistry = meterRegistry;}@PostConstructpublic void init() {Counter counter = meterRegistry.counter("custom.counter");counter.increment();  // 每次調用時遞增}
}

訪問/actuator/metrics可查看custom.counter指標。

4. 其他常見端點擴展

除了健康檢查、度量指標和日志管理,Spring Boot Actuator 還支持其他端點的擴展,以提供更豐富的監控和管理能力,例如:

? 環境配置(Environment)

通過擴展/actuator/env端點,可以暴露更多的環境變量或系統屬性,以便在運行時查看和調試應用配置。

? 審計事件(Audit Events)

通過擴展/actuator/auditevents端點,可以自定義審計事件的記錄和查詢,例如用戶登錄、權限變更等關鍵事件的追蹤。

? 配置屬性(Config Props)

通過擴展/actuator/configprops端點,可以暴露更多的應用配置屬性,以便分析 Spring Boot 自動配置的內容,幫助開發者更好地理解應用的運行狀態。

總結

? 自定義端點:使用@Endpoint創建新端點,如/actuator/custom。

? 端點擴展:

? 健康檢查:使用HealthIndicator擴展/actuator/health。

? 日志管理:通過/actuator/loggers端點動態調整日志級別。

? 度量指標:使用MeterRegistry添加自定義指標。

五、端點安全管理

為了確保 Spring Boot Actuator 端點的訪問安全,推薦使用 Spring Security 配置權限控制。以防止未授權的訪問,保護敏感數據。以下是配置端點安全的基本步驟:

步驟1:引入 Spring Security 依賴

在pom.xml文件中添加 Spring Security 依賴:

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

步驟2:配置安全策略

使用@EnableWebSecurity注解和WebSecurityConfigurerAdapter配置 Actuator 端點的訪問權限,例如:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/actuator/**").hasRole("ADMIN") // 僅允許 ADMIN 角色訪問.anyRequest().authenticated() // 其他請求需認證.and().httpBasic(); // 啟用基本認證}
}

步驟3:配置用戶名和密碼

Spring Boot 默認會生成隨機用戶名和密碼。要使用自定義憑據,可在application.properties或application.yml配置:

spring.security.user.name=admin
spring.security.user.password=secret

步驟4:精細化保護 Actuator 端點

配置哪些端點對外開放。例如:

management.endpoints.web.exposure.include=health,info  // 開放 health 和 info 端點
management.endpoints.web.exposure.exclude=metrics,env  // 排除 metrics 和 env 端點

端點安全的最佳實踐:

? 最小化暴露端點:僅開放必要的端點,減少安全風險。

? 使用角色權限控制:確保敏感端點只能由特定角色訪問。

? 啟用 HTTPS:在生產環境中,強制使用 HTTPS 保護數據傳輸安全。

? 結合 API 網關或身份認證服務:如 Keycloak、OAuth2 進行細粒度訪問控制。

通過以上安全策略,可以有效保護 Actuator 端點,確保監控數據的安全性。

六、監控與管理常用示例

Spring Boot Actuator 提供了豐富的端點,可用于監控和管理應用。下面介紹幾個常見的使用場景,幫助你在生產環境中高效監控應用狀態。

1. 健康檢查端點的應用

健康檢查是 Actuator 最常用的功能之一,常用于:

? 應用存活檢測:判斷服務是否正常運行,可用于負載均衡器的健康檢查。

? 外部依賴檢查:檢測數據庫、緩存、第三方 API 是否可用,保障系統穩定性。

最佳實踐

? 自定義健康檢查

如,檢查數據庫狀態、MQ 消息隊列是否正常。

? 與負載均衡器集成

負載均衡器(如 Nginx、Kubernetes)可通過/actuator/health判斷服務健康狀態,自動進行流量分配或故障轉移。

2.自定義度量指標的應用

Actuator 端點/actuator/metrics提供 JVM 運行時、線程池、HTTP 請求等性能指標。可以使用MeterRegistry添加自定義度量指標。

最佳實踐:

? 添加 API 請求計數、耗時統計:監控接口調用頻率和性能瓶頸。

? 集成 Prometheus/Grafana:通過可視化工具實時查看度量數據。

3.日志管理擴展

日志是調試和運維的重要工具,Actuator 允許動態修改日志級別,無需重啟應用。

最佳實踐:

? 生產環境下,日志級別默認設置為 WARN 或 ERROR,僅記錄關鍵信息。

? 調試時,可動態調整為 DEBUG 級別,快速排查問題。

? 結合 ELK(Elasticsearch + Logstash + Kibana)等日志分析工具,提高故障診斷效率。

七、總結

1. 核心要點

? 集成 Spring Boot Actuator

提供開箱即用的監控和管理功能,幫助監控應用健康和性能。

? 自定義和擴展端點

可根據業務需求定制健康檢查、度量指標等,擴展 Actuator 的功能。

? 端點安全管理

使用 Spring Security 配置權限控制,確保端點訪問的安全性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/77775.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77775.shtml
英文地址,請注明出處:http://en.pswp.cn/web/77775.shtml

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

相關文章

不同類型插槽的聲明方法和對應的調用方式

在 Vue 3 中&#xff0c;slot 用于讓組件的使用者可以向組件內部插入自定義內容。Vue 3 提供了多種聲明和使用插槽的方式&#xff0c;下面為你詳細介紹不同類型插槽的聲明方法和對應的調用方式。 1. 匿名插槽 聲明方法 在組件模板中直接使用 標簽來定義匿名插槽&#xff0c;它可…

DeepSeek 聯手 Word,開啟辦公開掛模式

目錄 一、DeepSeek 與 Word 結合的神奇之處二、前期準備&#xff0c;萬事俱備2.1 了解 DeepSeek2.2 確認軟件版本2.3 賬號與密鑰獲取 三、接入方法全解析3.1 OfficeAI 插件接入3.1.1 下載與安裝插件3.1.2 配置 API 密鑰 3.2 VBA 宏接入3.2.1 啟用開發者工具3.2.2 調整信任設置3…

云鑰科技紅外短波工業相機

云鑰科技的紅外短波相機是一款基于短波紅外&#xff08;SWIR&#xff0c;波長范圍約1-3微米&#xff09;技術的成像設備&#xff0c;專為高精度檢測、全天候成像及特殊場景應用設計。以下從核心技術、性能參數、應用場景及產品優勢等方面進行詳細介紹&#xff1a; ??一、核心…

得物 小程序 6宮格 分析

聲明 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 逆向過程 部分python代碼 if result …

第十六屆藍橋杯 2025 C/C++B組 第二輪省賽 全部題解(未完結)

目錄 前言&#xff1a; 試題A&#xff1a;密密擺放 試題B&#xff1a;脈沖強度之和 試題C&#xff1a;25之和 試題D&#xff1a;旗幟 試題H&#xff1a;破解信息 前言&#xff1a; 這是我后續刷到的第二輪省賽的題目&#xff0c;我自己也做了一下&#xff0c;和第一輪省賽…

conda和bash主環境的清理

好的&#xff01;要管理和清理 Conda&#xff08;或 Bash&#xff09;安裝的包&#xff0c;可以按照以下步驟進行&#xff0c;避免冗余依賴&#xff0c;節省磁盤空間。 &#x1f4cc; 1. 查看已安裝的包 先列出當前環境的所有安裝包&#xff0c;找出哪些可能需要清理&#xff…

【Linux】服務自啟動設置的方式

關于服務自啟動設置的方式,本文將介紹兩種方法。分別是systemd服務單元文件的配置和起容器的方式。 目錄 1 systemd服務單元文件的配置 [Unit] 部分 [Service] 部分 [Install] 部分 2 docker 1 systemd

面試篇 - LoRA(Low-Rank Adaptation) 原理

1. 問題背景 大模型微調的挑戰&#xff1a; 預訓練模型&#xff08;如GPT-3、LLaMA&#xff09;參數量巨大&#xff08;數十億至萬億級&#xff09;&#xff0c;直接微調所有參數&#xff1a; 計算開銷大&#xff1a;需更新全部權重&#xff0c;GPU顯存不足。 存儲冗余&#…

Flink Docker Application Mode 命令解析

Flink官方提供的 Docker 運行 Flink Application Mode 模式&#xff0c;逐句解讀含義&#xff0c;并且給予操作實例&#xff1a; 以下是 Flink 官方提供的 Docker 命令&#xff0c;用于在 Application Mode 下運行 Flink Job&#xff08;standalone-job 作為 JobManager&#…

20250427 對話1: 何東山的宇宙起源理論

對話1: 何東山的宇宙起源理論 以下內容綜述了何東山團隊有關宇宙起源的主要理論成果、方法體系及其學術影響。 何東山團隊基于惠勒-德威特方程&#xff08;Wheeler–DeWitt Equation, WDWE&#xff09;和德布羅意–玻姆量子軌道理論&#xff0c;推導出帶有額外“量子勢”項的…

Python實例題:ebay在線拍賣數據分析

目錄 Python實例題 題目 實現思路 代碼實現 代碼解釋 read_auction_data 函數&#xff1a; clean_auction_data 函數&#xff1a; exploratory_analysis 函數&#xff1a; visualize_auction_data 函數&#xff1a; 主程序&#xff1a; 運行思路 注意事項 Python實…

2025年具身智能科技研報

引言 本報告系統梳理了2025年具身智能領域的最新進展&#xff0c;基于國內外權威新聞源與行業研究報告&#xff0c;通過數據可視化與深度分析相結合的方式&#xff0c;呈現該領域多維發展態勢。從技術突破層面看&#xff0c;多模態大模型的突破性進展為具身智能注入新動能&…

緩存與數據庫一致性深度解析與解決方案

緩存與數據庫一致性深度解析與解決方案 一、一致性問題本質與挑戰 1. 核心矛盾分析 緩存與數據庫一致性問題源于數據存儲的異步性與分布性&#xff0c;核心挑戰包括&#xff1a; 讀寫順序不確定性&#xff1a;并發場景下寫操作順序可能被打亂&#xff08;如先寫緩存后寫數據…

npm如何安裝pnpm

在 npm 中安裝 pnpm 非常簡單,你可以通過以下步驟完成: 1. 使用 npm 全局安裝 pnpm 打開終端(命令行工具),運行以下命令: npm install -g pnpm2. 驗證安裝 安裝完成后,可以檢查 pnpm 的版本以確保安裝成功: pnpm --version如果正確顯示版本號(如 8.x.x),說明安…

【Java 數據結構】List,ArrayList與順序表

目錄 一. List 1.1 什么是List 1.2 List 的常見方法 1.3 List 的使用 二. 順序表 2.1 什么是順序表 2.2 實現自己的順序表 2.2.1 接口實現 2.2.2 實現順序表 三. ArrayList 3.1 ArrayList簡介 3.2 ArrayList的三個構造方法 3.2.1 無參構造方法 3.2.2 帶一個參數的…

18.第二階段x64游戲實戰-MFC列表框

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 本次游戲沒法給 內容參考于&#xff1a;微塵網絡安全 上一個內容&#xff1a;17.第二階段x64游戲實戰-人工遍歷二叉樹結構 現在找到了附近npc列表&#xff0…

如何解決 Xcode 簽名證書和 Provisioning Profile 過期問題

在 iOS 應用開發過程中&#xff0c;簽名證書和 Provisioning Profile 是確保應用安全性和合法性的關鍵組件。然而&#xff0c;當這些證書或配置文件過期時&#xff0c;開發者可能會遇到編譯或歸檔失敗的問題。本文將詳細介紹如何解決 Xcode 中“iOS Distribution”證書未找到和…

SpringBoot Actuator未授權訪問漏洞的全面解析與解決方案

引言 SpringBoot Actuator 作為應用監控與管理的核心組件,為開發者提供了豐富的系統自省和運維能力。然而,其默認配置中可能存在的未授權訪問漏洞,已成為企業安全防護的潛在風險。本文將從漏洞原理、影響范圍、檢測方法到解決方案,系統性地剖析該問題,并提供覆蓋開發、運維…

gin框架學習筆記

Gin 是一個基于 Go 語言的高性能 Web 框架 gin下載 在已有的go項目直接終端輸入 go get -u github.com/gin-gonic/gin hello world快速上手 package mainimport ("github.com/gin-gonic/gin" )func main() {router : gin.Default()router.GET("/", func…

linux中由于編譯選項-D_OS64BIT導致的核心已轉儲問題

linux中由于編譯選項-D_OS64BIT導致的核心已轉儲問題排查解決&#xff1a; 原因&#xff1a; a.so b.so a.so使用b.so 程序1 程序2 使用a.so 程序1運行正常&#xff0c;程序2啟動后提示核心已轉儲。 程序1和程序2運行的代碼都一致&#xff0c;只執行創建xApplication app&…