SpringBoot實(shí)現(xiàn)對Http接口進(jìn)行監(jiān)控的代碼
一、前言
Spring Boot Actuator是Spring Boot提供的一個(gè)模塊,用于監(jiān)控和管理Spring Boot應(yīng)用程序的運(yùn)行時(shí)信息。它提供了一組監(jiān)控端點(diǎn)(endpoints),用于獲取應(yīng)用程序的健康狀態(tài)、性能指標(biāo)、配置信息等,并支持通過 HTTP 或 JMX 進(jìn)行訪問。
使用 Actuator 可以方便地了解應(yīng)用程序的運(yùn)行狀況,監(jiān)控等關(guān)鍵指標(biāo),并根據(jù)需要采取相應(yīng)的措施。它為開發(fā)人員和運(yùn)維人員提供了一種簡單而有效的方式來監(jiān)控和管理Spring Boot應(yīng)用程序。例如:在項(xiàng)目中監(jiān)控記錄接口請求的相關(guān)信息,它對于提升系統(tǒng)穩(wěn)定性、優(yōu)化性能、快速定位問題以及保障數(shù)據(jù)安全等方面都起著至關(guān)重要的作用。
本文將介紹一下Spring Boot Actuator以及代碼示例,以及如何進(jìn)行接口請求監(jiān)控。
二、Spring Boot Actuator主要特性和功能
1. 健康檢查(Health Checks):通過 /actuator/health 端點(diǎn)暴露應(yīng)用程序的健康狀態(tài)。這可以包括數(shù)據(jù)庫連接、外部服務(wù)可達(dá)性等多種健康指標(biāo)。支持自定義健康檢查指標(biāo)。
①. 配置健康檢查的詳細(xì)程度(通過 management.endpoint.health.show-details 屬性)??膳渲玫闹涤?never(默認(rèn),不顯示詳細(xì)信息)、when-authorized(詳細(xì)信息將展示給通過認(rèn)證的用戶)和 always(對所有用戶暴露詳細(xì)信息)。
②. 可以通過 management.health.defaults.enabled 或針對特定組件的 management.health.xxxx.enabled 配置項(xiàng)來啟用或禁用默認(rèn)的健康指示器。
2. 信息端點(diǎn):通過 /actuator/info 端點(diǎn)展示應(yīng)用程序的自定義信息,如版本號、構(gòu)建信息等。允許在 application.properties 或 application.yml 文件中配置這些信息。
3. 度量指標(biāo)(Metrics):提供應(yīng)用程序的度量指標(biāo),如 JVM 內(nèi)存使用情況、系統(tǒng) CPU 負(fù)載、HTTP 請求統(tǒng)計(jì)等。可以通過 /actuator/metrics 端點(diǎn)獲取度量指標(biāo)信息。
4. 日志管理(Logging Management):通過 /actuator/loggers 端點(diǎn)動態(tài)調(diào)整日志級別。允許在運(yùn)行時(shí)查看和修改日志配置,而無需重啟應(yīng)用程序。
5. 環(huán)境屬性(Environment Properties):通過 /actuator/env 端點(diǎn)展示配置的屬性來源,如系統(tǒng)屬性、環(huán)境變量、配置文件等。
6. 線程轉(zhuǎn)儲(Thread Dump):通過 /actuator/threaddump 端點(diǎn)生成當(dāng)前線程的轉(zhuǎn)儲快照,有助于診斷性能問題或死鎖情況。
7. HTTP 跟蹤(HTTP Trace):通過 /actuator/httptrace 端點(diǎn)展示最近的 HTTP 請求和響應(yīng)的跟蹤信息,有助于分析請求處理流程。
8. 審計(jì)事件(Audit Events):通過 /actuator/auditevents 端點(diǎn)訪問應(yīng)用程序的審計(jì)事件,如安全事件。
9. JMX Beans:除了 HTTP 端點(diǎn)外,Actuator 還提供了 JMX Beans,允許通過 JMX 控制臺來訪問和管理應(yīng)用程序。
10. 關(guān)機(jī)和重啟(Shutdown and Restart):在某些配置下,可以通過 /actuator/shutdown 或 /actuator/restart 端點(diǎn)來安全地關(guān)閉或重啟應(yīng)用程序。但請注意,這些功能通常不推薦在生產(chǎn)環(huán)境中使用,因?yàn)樗鼈兛赡軒戆踩L(fēng)險(xiǎn)。
11. 自定義端點(diǎn)(Custom Endpoints):允許開發(fā)者創(chuàng)建自定義的 Actuator 端點(diǎn),以擴(kuò)展監(jiān)控和管理功能。
三、Actuator監(jiān)控分類
Actuator 監(jiān)控分成兩類:原生端點(diǎn)和用戶自定義端點(diǎn)
①. 自定義端點(diǎn)主要是指擴(kuò)展性,用戶可以根據(jù)自己的實(shí)際應(yīng)用,定義一些比較關(guān)心的指標(biāo),在運(yùn)行期進(jìn)行監(jiān)控。
②. 原生端點(diǎn)是在應(yīng)用程序里提供眾多Web接口,通過它們了解應(yīng)用程序運(yùn)行時(shí)的內(nèi)部狀況。
原生端點(diǎn)又可以分成三類:
①. 應(yīng)用配置類 :可以查看應(yīng)用在運(yùn)行期的靜態(tài)信息:例如自動配置信息、加載的 springbean 信息、yml 文件配置信息、環(huán)境信息、請求映射信息。
②. 度量指標(biāo)類 :主要是運(yùn)行期的動態(tài)信息,例如堆棧、請求連、一些健康指標(biāo)、metrics 信息等。
③. 操作控制類 :主要是指 shutdown,用戶可以發(fā)送一個(gè)請求將應(yīng)用的監(jiān)控功能關(guān)閉。
Actuator 提供了13 個(gè)接口,具體如下表所示
四、代碼示例
1. 引入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2. 添加application.properties配置
打開所有的監(jiān)控點(diǎ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
①查看項(xiàng)目運(yùn)行情況,通過訪問 /actuator/health
health 主要用來檢查應(yīng)用的運(yùn)行狀態(tài),這是我們使用最高頻的一個(gè)監(jiān)控點(diǎn)。通常使用此接口提醒我們應(yīng)用實(shí)例的運(yùn)行狀態(tài),以及應(yīng)用不”健康“的原因,比如數(shù)據(jù)庫連接、磁盤空間不夠等。
②.查看日志級別情況
比如我們生產(chǎn)環(huán)境日志級別一般都是 info,但是現(xiàn)在有一個(gè)bug通過info級別無法排查,那么我們就可以臨時(shí)修改 log 級別。
五、http接口監(jiān)控
- 要使用Actuator的http接口監(jiān)控功能,需要注冊一個(gè)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屬性記錄的是該接口請求的耗時(shí)情況(單位:毫秒)
- 自定義記錄的信息,可以通過如下配置
訪問/actuator/httptrace,展示的信息,也可以自定義展示需要的信息。
management.trace.http.include=
六、安全管理
1.在application.properties禁用接口
management.endpoint.health.enabled=false
2. 配置訪問權(quán)限驗(yàn)證,這時(shí)再訪問actuator功能時(shí)就會彈出登錄窗口,需要輸入賬號密碼驗(yàn)證后才允許訪問。例如Spring Security,shiro等
3. 使用Filter對訪問actuator做限制
以上就是SpringBoot實(shí)現(xiàn)對Http接口進(jìn)行監(jiān)控的代碼的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot監(jiān)控Http接口的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot之返回json數(shù)據(jù)的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot之返回json數(shù)據(jù)的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12Spring定時(shí)任務(wù)只執(zhí)行一次的原因分析與解決方案
在使用Spring的@Scheduled定時(shí)任務(wù)時(shí),你是否遇到過任務(wù)只執(zhí)行一次,后續(xù)不再觸發(fā)的情況?這種情況可能由多種原因?qū)е?如未啟用調(diào)度、線程池問題、異常中斷等,本文將深入分析Spring定時(shí)任務(wù)只執(zhí)行一次的原因,并提供完整的解決方案,需要的朋友可以參考下2025-03-03Spring Bean實(shí)例的創(chuàng)建及構(gòu)造器的挑選
這篇文章主要介紹了Spring Bean實(shí)例的創(chuàng)建及構(gòu)造器的挑選,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04Java 創(chuàng)建動態(tài)類和查看方法列表信息的實(shí)例
這篇文章主要介紹了 Java 創(chuàng)建動態(tài)類和查看方法列表信息的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-06-06深入理解Java定時(shí)調(diào)度(Timer)機(jī)制
這篇文章主要介紹了深入理解Java定時(shí)調(diào)度(Timer)機(jī)制,本節(jié)我們主要分析 Timer 的功能。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01