Spring Boot - 監控工具 Actuator

古古

2024/08/21


Spring Boot 版本:3.3.2

Actuator 是 Spring Boot 所提供的監控功能,可以用來查看當前的 Spring Boot 程式運行的情況,像是可以查看當前運行的健康指標、查看 Spring Boot 所創建的 beans、以及獲取當前的 applicaiton.properties 的屬性的值。

使用 SpringBoot Actuator #

如果要使用 SpringBoot Actuator 提供的監控功能,需要先加入相關的 maven dependency。

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

只要加上了這個 maven dependency,Spring Boot 在運行時,就會自動開啟 /actuator/health 這個 api 給我們使用,因此當我們去請求 http://localhost:8080/actuator/health 這個 api 時,就可以查看當前 Spring Boot 程式的運行狀況。

像是下圖中就顯示,當前的 Spring Boot 運行狀態為 UP,UP 即為正常運行的意思。

Actuator 提供的常見的 api #

除了上述自動開啟的 /actuator/health api 之外,Actuator 其實還提供更多樣化的 api,讓我們可以從不同的角度,去監控 Spring Boot 程式(不過因為安全因素考量,大部分的 api 都需要另外設定才能夠開啟,詳細的設定方式在下方介紹)。

因為監控 api 眾多,以下僅列出常用的監控 api,所有監控 api 可查閱 Spring 官方文件

HTTP 方法 Endpoint 描述
GET /actuator 查看有哪些監控的 api 有開放使用
GET /actuator/env 查看此 Spring Boot 程式載入了哪些 application.properties 的值(不過為了保護安全資訊,所以會自動碼掉帶有 key、password、secret 等關鍵字的 properties 的值)
GET /actuator/flyway 查看 flyway DB 的 migration 資訊
GET /actuator/health 查看當前 Spring Boot 程式的運行健康指標,UP 即為正常運行
GET /actuator/heapdump 取得 JVM 當下的 heap dump,會下載一個檔案
GET /actuator/metrics 查看有哪些指標的數據可以看(ex: jvm.memory.max、system.cpu.usage),可再使用 /actuator/metrics/{metric.name} 分別查看各個指標的詳細資訊
GET /actuator/scheduledtasks 查看定時任務的資訊
POST /actuator/shutdown 唯一一個需要 POST 請求的 api,關閉這個 Spring Boot 程式

開啟受保護的 Actuator 監控 api 的方法 #

因為安全的因素,所以 Actuator 預設只會開啟 /actuator/health 這個監控的 api 讓我們使用,如果要開放其他的 api 的話,需要額外在 application.properties 中進行設定

# 可以這樣寫,就會開啟所有的 api(但不包含 shutdown)
management.endpoints.web.exposure.include=*

# 也可以這樣寫,就只會開啟指定的 api,像是此處就只會再額外開啟 /actuator/beans 和 /actuator/mappings 這兩個 api
management.endpoints.web.exposure.include=beans,mappings

# exclude 可以用來關閉某些 api
# exclude 通常會和 include 一起搭配使用,就是先去 include 全部進來,然後再 exclude 想要關閉的部分
# 像是此處就是關閉 /actuator/info 這個 api
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=info

# 如果要開啟 /actuator/shutdown api 的話,需要額外再加這一行
management.endpoint.shutdown.enabled=true

除此之外,也可以改變 /actuator 的路徑,自定義成自己想要的 url 路徑

# 這樣寫的話,原本內建的 /actuator/xxx 的 url 路徑,就都會變成 /my/xxx
# 這樣做可以防止 Actuator 的監控 api 路徑被其他人猜到
management.endpoints.web.base-path=/my

結語 #

本篇文章介紹了 Spring Boot Actuator 的用法,以及列出的常見好用的監控 api 有哪些,提供給大家參考。

如果你對後端技術有興趣的話,也歡迎免費訂閱 《古古的後端筆記》電子報 ,每週二為你送上一篇後端技術分享,那我們就下一篇文章見啦!