前言:
監聽器相信熟悉 Spring、Spring Boot 的都知道,但是監視器又是什么?估計很多人一臉懵的狀態,本篇分享一下 Spring Boot 的監視器。
Spring Boot 系列文章傳送門
Spring Boot 啟動流程源碼分析(2)
Spring Boot 啟動流程源碼分析(2)
Spring Boot 自動配置實現原理(源碼分析)
Spring Boot 自定義 starter 啟動器
Spring Boot 事件監聽機制工作原理
Spring Boot 事件監聽機制實戰【自定義 Spring Boot 事件監聽】
Spring Boot 的監視器是什么?
Spring Boot 的監視器一種特殊的應用程序或組件,用于監控和管理整個應用程序的運行狀態和性能,它提供了一種可視化的方式,可以實時跟蹤和監視應用程序的各種指標,例如響應時間、CPU使用率、內存使用情況等,Spring Boot 提供了一些內置的監視器功能,可以集成到應用程序中,Spring Boot 監視器功能由各種監視器監視器 Bean 實現,比如 Spring Boot Actuator。
什么是 Spring Boot Actuator?
Spring Boot Actuator 是一個用于監控和管理 Spring Boot 應用程序的模塊,它提供了許多端點,可以通過 HTTP 請求來訪問這些端點,來獲取應用程序的各種信息,如健康狀況、度量指標、配置信息等,Actuator還可以通過配置開啟或關閉特定的端點,并提供自定義的端點。
Spring Boot Actuator 可以做什么?
- 指標監控:實時跟蹤應用程序的各種指標,例如響應時間、CPU使用率、內存使用情況等,以便進行性能優化和故障排查。
- 健康檢查:檢查應用程序的健康狀況,包括是否正常運行(非常實用)。
- 日志管理:記錄應用程序的日志信息,包括錯誤日志、警告日志、調試日志等,以便進行性能優化和故障排查。。
- 端點監控:監控應用程序中的各種端點(HTTP接口),包括請求數量、請求時間、響應時間等。
Spring Boot Actuator 使用演示
在 pom.xml 中引入 management.endpoints.web.exposure.include=*
組件,如下:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在程序的配置文件中啟用 Actuator
#暴露所有的端點
management.endpoints.web.exposure.include=*
- 號的配置是允許所有的 Actuator 端點通過 HTTP 請求訪問,生產環境不建議這樣配置。
啟動應用程序獲取程序的健康情況:http://localhost:port/actuator/health
結果如下:
符合預期,我們的程序是健康的。
自定義 Endpoint
注解說明
- @Endpoint:可通過JMX和web應用程序訪問。
- @JmxEndpoint:只能通過 JMX 訪問。
- @WebEndpoint:只能通過 WEB 應用訪問。
- @ReadOperation:相當于 GET 請求。
- @WriteOperation:相當于 POST 請求。
- @DeleteOperation:相當于 DELETE 請求。
有時候我們需要自定義自己的端點,我們可以通過 @Endpoint注解 + @ReadOperation、@WriteOperation、@DeleteOperation 注解來實現自定義端點,代碼如下:
@Component
@Endpoint(id = "myActuatorEndpoint")
public class MyActuatorController {@ReadOperationpublic Map<String, Object> get() {Map<String, Object> map = new HashMap<>();map.put("httpMethod", HttpMethod.GET.toString());return map;}@WriteOperationpublic Map<String, Object> post() {Map<String, Object> map = new HashMap<>();map.put("httpMethod", HttpMethod.POST.toString());return map;}@DeleteOperationpublic Map<String, Object> delete() {Map<String, Object> map = new HashMap<>();map.put("httpMethod", HttpMethod.DELETE.toString());return map;}
}
GET 方式測試結果:
結果符合預期,另外兩種方式這里不做測試了,有興趣的可以自己去測試一下。
自定義端口
我們還可以自定義監控的端口
#自定義端口
management.server.port=8082
如有不正確的地方請各位指出糾正。