一、前言
??Spring Boot Actuator是Spring Boot提供的一個模塊,用于監控和管理Spring Boot應用程序的運行時信息。它提供了一組監控端點(endpoints),用于獲取應用程序的健康狀態、性能指標、配置信息等,并支持通過 HTTP 或 JMX 進行訪問。
??使用 Actuator 可以方便地了解應用程序的運行狀況,監控等關鍵指標,并根據需要采取相應的措施。它為開發人員和運維人員提供了一種簡單而有效的方式來監控和管理Spring Boot應用程序。例如:在項目中監控記錄接口請求的相關信息,它對于提升系統穩定性、優化性能、快速定位問題以及保障數據安全等方面都起著至關重要的作用。
??本文將介紹一下Spring Boot Actuator以及代碼示例,以及如何進行接口請求監控。
二、Spring Boot Actuator主要特性和功能
??1. 健康檢查(Health Checks):通過 /actuator/health 端點暴露應用程序的健康狀態。這可以包括數據庫連接、外部服務可達性等多種健康指標。支持自定義健康檢查指標。
????①. 配置健康檢查的詳細程度(通過 management.endpoint.health.show-details 屬性)。可配置的值有 never(默認,不顯示詳細信息)、when-authorized(詳細信息將展示給通過認證的用戶)和 always(對所有用戶暴露詳細信息)。
????②. 可以通過 management.health.defaults.enabled 或針對特定組件的 management.health.xxxx.enabled 配置項來啟用或禁用默認的健康指示器。
??2. 信息端點:通過 /actuator/info 端點展示應用程序的自定義信息,如版本號、構建信息等。允許在 application.properties 或 application.yml 文件中配置這些信息。
??3. 度量指標(Metrics):提供應用程序的度量指標,如 JVM 內存使用情況、系統 CPU 負載、HTTP 請求統計等。可以通過 /actuator/metrics 端點獲取度量指標信息。
??4. 日志管理(Logging Management):通過 /actuator/loggers 端點動態調整日志級別。允許在運行時查看和修改日志配置,而無需重啟應用程序。
??5. 環境屬性(Environment Properties):通過 /actuator/env 端點展示配置的屬性來源,如系統屬性、環境變量、配置文件等。
??6. 線程轉儲(Thread Dump):通過 /actuator/threaddump 端點生成當前線程的轉儲快照,有助于診斷性能問題或死鎖情況。
??7. HTTP 跟蹤(HTTP Trace):通過 /actuator/httptrace 端點展示最近的 HTTP 請求和響應的跟蹤信息,有助于分析請求處理流程。
??8. 審計事件(Audit Events):通過 /actuator/auditevents 端點訪問應用程序的審計事件,如安全事件。
??9. JMX Beans:除了 HTTP 端點外,Actuator 還提供了 JMX Beans,允許通過 JMX 控制臺來訪問和管理應用程序。
??10. 關機和重啟(Shutdown and Restart):在某些配置下,可以通過 /actuator/shutdown 或 /actuator/restart 端點來安全地關閉或重啟應用程序。但請注意,這些功能通常不推薦在生產環境中使用,因為它們可能帶來安全風險。
??11. 自定義端點(Custom Endpoints):允許開發者創建自定義的 Actuator 端點,以擴展監控和管理功能。
三、Actuator監控分類
Actuator 監控分成兩類:原生端點和用戶自定義端點
??①. 自定義端點主要是指擴展性,用戶可以根據自己的實際應用,定義一些比較關心的指標,在運行期進行監控。
??②. 原生端點是在應用程序里提供眾多Web接口,通過它們了解應用程序運行時的內部狀況。
原生端點又可以分成三類:
??①. 應用配置類 :可以查看應用在運行期的靜態信息:例如自動配置信息、加載的 springbean 信息、yml 文件配置信息、環境信息、請求映射信息。
??②. 度量指標類 :主要是運行期的動態信息,例如堆棧、請求連、一些健康指標、metrics 信息等。
??③. 操作控制類 :主要是指 shutdown,用戶可以發送一個請求將應用的監控功能關閉。
Actuator 提供了13 個接口,具體如下表所示
四、代碼示例
1. 引入依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2. 添加application.properties配置
打開所有的監控點
management.endpoints.web.exposure.include=*
3. 定義一些請求接口
@GetMapping("/v1/test")public Object Test1() {String name = "hello";return name;}// 異常情況下@GetMapping("/v2/test2")public Object Test2() {String name = "hello new";System.out.println(1 / 0) ;return name;}
4. 瀏覽器訪問
訪問http://localhost:8027/actuator
①查看項目運行情況,通過訪問 /actuator/health
??health 主要用來檢查應用的運行狀態,這是我們使用最高頻的一個監控點。通常使用此接口提醒我們應用實例的運行狀態,以及應用不”健康“的原因,比如數據庫連接、磁盤空間不夠等。
②.查看日志級別情況
??比如我們生產環境日志級別一般都是 info,但是現在有一個bug通過info級別無法排查,那么我們就可以臨時修改 log 級別。
五、http接口監控
- 要使用Actuator的http接口監控功能,需要注冊一個HttpTraceRepository類型的Bean
package com.example.yddemo.actuator;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() ;}}
- 添加application.properties配置
management.endpoints.web.exposure.include=httptrace
- 訪問http://localhost:8027/actuator
??出現下面鏈接,表示配置成功
4. 訪問http://localhost:8027/actuator/httptrace
請求一些上面我們定義的接口,然后訪問/actuator/httptrace,展示如下信息
列如:timeTaken屬性記錄的是該接口請求的耗時情況(單位:毫秒)
- 自定義記錄的信息,可以通過如下配置
訪問/actuator/httptrace,展示的信息,也可以自定義展示需要的信息。
management.trace.http.include=
五、安全管理
1.在application.properties禁用接口
management.endpoint.health.enabled=false
2. 配置訪問權限驗證,這時再訪問actuator功能時就會彈出登錄窗口,需要輸入賬號密碼驗證后才允許訪問。例如Spring Security,shiro等
3. 使用Filter對訪問actuator做限制
??以上就是對SpringBoot中Actuator的介紹以及代碼示例,了解了如何查看健康檢查,如何使用Actuator來實現對Http接口進行監控。