SpringBoot實現(xiàn)對Http接口進行監(jiān)控的代碼
一、前言
Spring Boot Actuator是Spring Boot提供的一個模塊,用于監(jiān)控和管理Spring Boot應用程序的運行時信息。它提供了一組監(jiān)控端點(endpoints),用于獲取應用程序的健康狀態(tài)、性能指標、配置信息等,并支持通過 HTTP 或 JMX 進行訪問。
使用 Actuator 可以方便地了解應用程序的運行狀況,監(jiān)控等關鍵指標,并根據(jù)需要采取相應的措施。它為開發(fā)人員和運維人員提供了一種簡單而有效的方式來監(jiān)控和管理Spring Boot應用程序。例如:在項目中監(jiān)控記錄接口請求的相關信息,它對于提升系統(tǒng)穩(wěn)定性、優(yōu)化性能、快速定位問題以及保障數(shù)據(jù)安全等方面都起著至關重要的作用。
本文將介紹一下Spring Boot Actuator以及代碼示例,以及如何進行接口請求監(jiān)控。
二、Spring Boot Actuator主要特性和功能
1. 健康檢查(Health Checks):通過 /actuator/health 端點暴露應用程序的健康狀態(tài)。這可以包括數(shù)據(jù)庫連接、外部服務可達性等多種健康指標。支持自定義健康檢查指標。
①. 配置健康檢查的詳細程度(通過 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 內存使用情況、系統(tǒng) CPU 負載、HTTP 請求統(tǒng)計等??梢酝ㄟ^ /actuator/metrics 端點獲取度量指標信息。
4. 日志管理(Logging Management):通過 /actuator/loggers 端點動態(tài)調整日志級別。允許在運行時查看和修改日志配置,而無需重啟應用程序。
5. 環(huán)境屬性(Environment Properties):通過 /actuator/env 端點展示配置的屬性來源,如系統(tǒng)屬性、環(huán)境變量、配置文件等。
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 端點來安全地關閉或重啟應用程序。但請注意,這些功能通常不推薦在生產(chǎn)環(huán)境中使用,因為它們可能帶來安全風險。
11. 自定義端點(Custom Endpoints):允許開發(fā)者創(chuàng)建自定義的 Actuator 端點,以擴展監(jiān)控和管理功能。
三、Actuator監(jiān)控分類
Actuator 監(jiān)控分成兩類:原生端點和用戶自定義端點
①. 自定義端點主要是指擴展性,用戶可以根據(jù)自己的實際應用,定義一些比較關心的指標,在運行期進行監(jiān)控。
②. 原生端點是在應用程序里提供眾多Web接口,通過它們了解應用程序運行時的內部狀況。
原生端點又可以分成三類:
①. 應用配置類 :可以查看應用在運行期的靜態(tài)信息:例如自動配置信息、加載的 springbean 信息、yml 文件配置信息、環(huán)境信息、請求映射信息。
②. 度量指標類 :主要是運行期的動態(tài)信息,例如堆棧、請求連、一些健康指標、metrics 信息等。
③. 操作控制類 :主要是指 shutdown,用戶可以發(fā)送一個請求將應用的監(jiān)控功能關閉。
Actuator 提供了13 個接口,具體如下表所示
四、代碼示例
1. 引入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2. 添加application.properties配置
打開所有的監(jiān)控點 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 主要用來檢查應用的運行狀態(tài),這是我們使用最高頻的一個監(jiān)控點。通常使用此接口提醒我們應用實例的運行狀態(tài),以及應用不”健康“的原因,比如數(shù)據(jù)庫連接、磁盤空間不夠等。
②.查看日志級別情況
比如我們生產(chǎn)環(huán)境日志級別一般都是 info,但是現(xiàn)在有一個bug通過info級別無法排查,那么我們就可以臨時修改 log 級別。
五、http接口監(jiān)控
- 要使用Actuator的http接口監(jiān)控功能,需要注冊一個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 { @Bean InMemoryHttpTraceRepository inMemoryHttpTraceRepository() { return new InMemoryHttpTraceRepository() ; } }
- 添加application.properties配置
management.endpoints.web.exposure.include=httptrace
- 訪問http://localhost:8027/actuator
- 訪問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實現(xiàn)對Http接口進行監(jiān)控的代碼的詳細內容,更多關于SpringBoot監(jiān)控Http接口的資料請關注腳本之家其它相關文章!
相關文章
SpringBoot之返回json數(shù)據(jù)的實現(xiàn)方法
這篇文章主要介紹了SpringBoot之返回json數(shù)據(jù)的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12Spring定時任務只執(zhí)行一次的原因分析與解決方案
在使用Spring的@Scheduled定時任務時,你是否遇到過任務只執(zhí)行一次,后續(xù)不再觸發(fā)的情況?這種情況可能由多種原因導致,如未啟用調度、線程池問題、異常中斷等,本文將深入分析Spring定時任務只執(zhí)行一次的原因,并提供完整的解決方案,需要的朋友可以參考下2025-03-03Spring Bean實例的創(chuàng)建及構造器的挑選
這篇文章主要介紹了Spring Bean實例的創(chuàng)建及構造器的挑選,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04Java 創(chuàng)建動態(tài)類和查看方法列表信息的實例
這篇文章主要介紹了 Java 創(chuàng)建動態(tài)類和查看方法列表信息的實例的相關資料,需要的朋友可以參考下2017-06-06