Spring Boot 已經讓我們的開發變得超級簡單,但你有沒有想過,如果能夠即時監控應用程式的狀態,那該有多好
這就是 Spring Boot Actuator
的魔力所在!
Spring Boot Actuator
是 Spring Boot 框架中的一個子項目
為應用程式提供了一系列的監控
和管理
功能
這也是應用程式上線後,不可或缺的一環
Actuator 提供了許多 HTTP 端點(endpoints),每個端點都負責特定的監控或管理功能
例如
/health
:顯示應用程式的健康狀態/metrics
:顯示各種應用指標/info
:顯示應用信息/env
:顯示環境變量因為 Actuator 的端點非常多,這裡只列出一些常見的端點,和一些相關的範例
可以利用 IDE 的功能,方便的加上 Spring Boot Actuator
的依賴
為了測試方便,這裡沒有設定任何存取限制。在實際上,應該要設定特定的角色
才能存取
// 這裡只列出 spring actuator 相關的程式碼,而不是全部的程式碼
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((requests) -> requests
.requestMatchers("/actuator/**").permitAll()
// .requestMatchers("/actuator/**").hasRole("ADMIN")
);
return http.build();
}
# 測試使用,可以全部打開看看
management.endpoints.web.exposure.include=*
# 實務上會根據需要打開
#management.endpoints.web.exposure.include=health,info,metrics,env
# 是不是要顯示完整的 health 資料
management.endpoint.health.show-details=always
# 是否啟用相關 info 資訊
management.info.java.enabled=true
management.info.os.enabled=true
# 是否呈現相關 env 的內容
# 測試使用,可以全部打開看看,在正式環境中,應謹慎使用此設定,以避免敏感資訊洩露
management.endpoint.env.show-values=always
也可以使用程式碼來自定應用程式資訊 (Info
) 的內容
@Controller
public class AppInfoContributor implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
builder.withDetail("customInfo", getCustomInfo());
}
private Map<String, Object> getCustomInfo() {
Map<String, Object> customInfo = new HashMap<>();
customInfo.put("version", "1.0.0");
customInfo.put("description", "This is a custom info");
customInfo.put("author", "cash");
return customInfo;
}
}
沒有啟用 show-details
有啟用 show-details
會列出所有的 metrics 指標
查看應用程式的單一指標,這裡以 system.cpu.count
為例
沒有啟用 show-values
有啟用 show-values
Spring Boot Actuator 就像是為你的應用程式安裝了一個儀表板
它讓你能夠實時監控和管理你的應用,大大提升了開發和維護的效率
無論是在開發階段還是正式環境,Actuator 都是一個非常有用的工具
在正式環境中,務必特別注意相關的存取安全性問題,以確保應用程式的安全性
同步刊登於 Blog 「Spring Boot API 開發:從 0 到 1」Day 36 Spring Boot Actuator 監控與管理
我的粉絲專頁
圖片來源:AI 產生