深入講解SpringBoot Actuator是什么
《Spring Boot Actuator詳解與深入應用》預計包括三篇,第一篇重點講Spring Boot Actuator 1.x的應用與定制端點;第二篇將會對比Spring Boot Actuator 2.x 與1.x的區(qū)別,以及應用和定制2.x的端點;第三篇將會介紹Actuator metric指標與Prometheus和Grafana的使用結(jié)合。這部分內(nèi)容很常用,且較為入門,歡迎大家的關(guān)注。
Actuator是什么
Spring Boot Actuator提供了生產(chǎn)上經(jīng)常用到的功能(如健康檢查,審計,指標收集,HTTP跟蹤等),幫助我們監(jiān)控和管理Spring Boot應用程序。這些功能都可以通過JMX或HTTP端點訪問。
通過引入相關(guān)的依賴,即可監(jiān)控我們的應用程序,收集指標、了解流量或數(shù)據(jù)庫的狀態(tài)變得很簡單。該庫的主要好處是我們可以獲得生產(chǎn)級工具,而無需自己實際實現(xiàn)這些功能。與大多數(shù)Spring模塊一樣,我們可以通過多種方式輕松配置或擴展它。
Actuator還可以與外部應用監(jiān)控系統(tǒng)集成,如Prometheus,Graphite,DataDog,Influx,Wavefront,New Relic等等。 這些系統(tǒng)為您提供出色的儀表板,圖形,分析和警報,以幫助我們在一個統(tǒng)一界面監(jiān)控和管理應用服務。
本文將會介紹Spring Boot Actuator 1.x 包括其中的端點(HTTP端點)、配置管理以及擴展和自定義端點。
快速開始
引入如下的依賴:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
Spring Boot Actuator 1.x
在1.x中,Actuator遵循讀寫模型,這意味著我們可以從中讀取信息或?qū)懭胄畔?。我們可以檢索指標或我們的應用程序的健康狀況,當然我們也可以優(yōu)雅地終止我們的應用程序或更改我們的日志配置。Actuator通過Spring MVC暴露其HTTP端點。
端點
當引入的Actuator的版本為1.x時,啟動應用服務,可以控制臺輸出如下的端點信息:
我們介紹一下常用的endpoints:
- /health:顯示應用程序運行狀況信息(通過未經(jīng)身份驗證的連接訪問時的簡單“狀態(tài)”或經(jīng)過身份驗證時的完整消息詳細信息),它默認不敏感
- /info:顯示應用程序信息,默認情況下不敏感
- /metrics:顯示當前應用程序的“指標”信息,它默認也很敏感
- /trace:顯示跟蹤信息(默認情況下是最后幾個HTTP請求)
有些端點默認并不會被開啟,如/shutdown。
配置端點
我們可以自定義每個端點的屬性,按照如下的格式:
endpoints.[endpoint name].[property to customize]
可以自定義的屬性有如下三個:
- id,暴露的http端點地址
- enabled,是否開啟
- sensitive,當為true時,需要認證之后才會通過http獲取到敏感信息
我們在配置文件中增加如下的配置,將會定制/beans端點。
endpoints.beans.id=springbeans
endpoints.beans.sensitive=false
endpoints.beans.enabled=true
/health端點
/health端點用于監(jiān)控運行的服務實例狀態(tài),當服務實例下線或者因為其他的原因變得異常(如DB連接不上,磁盤缺少空間)時,將會及時通知運維人員。
在默認未授權(quán)的情況下,通過HTTP的方式僅會返回如下的簡單信息:
{
"status": "UP"
}
獲取詳細的health信息
我們進行如下的配置:
endpoints:health:id: chealthsensitive: false
management.security.enabled: false
如上一小節(jié)所述,我們更改了/health端點的訪問路徑為/chealth,并將安全授權(quán)關(guān)閉。訪問http://localhost:8005/chealth
將會得到如下的結(jié)果。
{
"status": "UP",
"healthCheck": {
"status": "UP"
},
"diskSpace": {
"status": "UP",
"total": 999995129856,
"free": 762513104896,
"threshold": 10485760
}
}
自定義health的信息
我們還可以定制實現(xiàn)health指示器。它可以收集特定于應用程序的任何類型的自定義運行狀況數(shù)據(jù),并通過/health端點訪問到定義的信息。
@Component public class HealthCheck implements HealthIndicator {@Overridepublic Health health() {int errorCode = check(); // perform some specific health checkif (errorCode != 0) {return Health.down().withDetail("Error Code", errorCode).build();}return Health.up().build();}public int check() {// Our logic to check healthreturn 0;} }
實現(xiàn)HealthIndicator
接口,并覆寫其中的health()
方法即可自定義我們的/health端點。
/info端點
通過/info端點,我們可以為應用服務定義一些基本信息:
info.app.name=Spring Sample Application
info.app.description=This is my first spring boot application
info.app.version=1.0.0
我們在如上的配置中定義了服務名、描述和服務的版本號。
/metrics端點
/metrics端點展示了OS、JVM和應用級別的指標信息。當開啟之后,我們可以獲取內(nèi)存、堆、線程、線程池、類加載和HTTP等信息。
{
"mem": 417304,
"mem.free": 231678,
"processors": 4,
"instance.uptime": 248325,
"uptime": 250921,
"systemload.average": 1.9541015625,
"heap.committed": 375296,
"heap.init": 393216,
"heap.used": 143617,
"heap": 5592576,
"nonheap.committed": 43104,
"nonheap.init": 2496,
"nonheap.used": 42010,
"nonheap": 0,
"threads.peak": 30,
"threads.daemon": 18,
"threads.totalStarted": 46,
"threads": 20,
"classes": 6020,
"classes.loaded": 6020,
"classes.unloaded": 0,
"gc.ps_scavenge.count": 3,
"gc.ps_scavenge.time": 35,
"gc.ps_marksweep.count": 1,
"gc.ps_marksweep.time": 29,
"httpsessions.max": -1,
"httpsessions.active": 0,
"gauge.response.info": 38.0,
"counter.status.200.info": 1
}
定制metrics端點
為了收集自定義的metrics,Actuator支持單數(shù)值記錄的功能,簡單的增加/減少計數(shù)功能。如下的實現(xiàn),我們將登錄成功和失敗的次數(shù)作為自定義指標記錄下來。
@Service public class LoginServiceImpl implements LoginService {private final CounterService counterService;@Autowiredpublic LoginServiceImpl(CounterService counterService) {this.counterService = counterService;}@Overridepublic Boolean login(String userName, char[] password) {boolean success;if (userName.equals("admin") && "secret".toCharArray().equals(password)) {counterService.increment("counter.login.success");success = true;} else {counterService.increment("counter.login.failure");success = false;}return success;} }
再次訪問/metrics,發(fā)現(xiàn)多了如下的指標信息。登錄嘗試和其他安全相關(guān)事件在Actuator中可用作審計事件。
{
"gauge.response.metrics": 2.0,
"gauge.response.test": 3.0,
"gauge.response.star-star.favicon.ico": 1.0,
"counter.status.200.star-star.favicon.ico": 10,
"counter.status.200.test": 6,
"counter.login.failure": 6,
"counter.status.200.metrics": 4
}
自定義端點
除了使用Spring Boot Actuator提供的端點,我們也可以定義一個全新的端點。
首先,我們需要實現(xiàn)Endpoint
接口:
@Component public class CustomEndpoint implements Endpoint<List<String>> {@Overridepublic String getId() {return "custom";}@Overridepublic boolean isEnabled() {return true;}@Overridepublic boolean isSensitive() {return false;}@Overridepublic List<String> invoke() {// Custom logic to build the outputList<String> messages = new ArrayList<String>();messages.add("This is message 1");messages.add("This is message 2");return messages;} }
getId()
方法用于匹配訪問這個端點,當我們訪問/custom時,將會調(diào)用invoke()
我們自定義的邏輯。 另外兩個方法,用于設置是否開啟和是否為敏感的端點。
[ "This is message 1", "This is message 2" ]
進一步定制
出于安全考慮,我們可能選擇通過非標準端口 暴露Actuator端點。通過management.port屬性來配置它。
另外,正如我們已經(jīng)提到的那樣,在1.x. Actuator基于Spring Security配置自己的安全模型,但獨立于應用程序的其余部分。
因此,我們可以更改management.address屬性以限制可以通過網(wǎng)絡訪問端點的位置:
#port used to expose actuator
management.port=8081
#CIDR allowed to hit actuator
management.address=127.0.0.1
此外,除了/info端點,其他所有的端點默認都是敏感的,如果引入了Spring Security,我們通過在配置文件中定義這些安全的屬性(username, password, role)來確保內(nèi)置端點的安全。
到此這篇關(guān)于深入講解SpringBoot Actuator是什么的文章就介紹到這了,更多相關(guān)SpringBoot Actuator內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實現(xiàn)字符串和日期類型相互轉(zhuǎn)換的方法
這篇文章主要介紹了java實現(xiàn)字符串和日期類型相互轉(zhuǎn)換的方法,涉及java針對日期與字符串的轉(zhuǎn)換與運算相關(guān)操作技巧,需要的朋友可以參考下2017-02-02IDEA maven compile報錯OutOfMemoryError(內(nèi)存溢出)解決及jvm分析
遇到Maven編譯時報OutOfMemoryError錯誤通常因為默認的堆內(nèi)存大小不足,本文就來介紹一下OutOfMemoryError(內(nèi)存溢出)解決,具有一定的參考價值,感興趣的可以了解一下2024-10-10SpringCloud OpenFeign自定義結(jié)果解碼器方式
這篇文章主要介紹了SpringCloud OpenFeign自定義結(jié)果解碼器方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09SpringBoot整合Echarts實現(xiàn)用戶人數(shù)和性別展示功能(詳細步驟)
這篇文章主要介紹了SpringBoot整合Echarts實現(xiàn)用戶人數(shù)和性別展示,通過數(shù)據(jù)庫設計、實現(xiàn)數(shù)據(jù)訪問層、業(yè)務邏輯層和控制層的代碼編寫,以及前端頁面的開發(fā),本文詳細地介紹了SpringBoot整合Echarts的實現(xiàn)步驟和代碼,需要的朋友可以參考下2023-05-05Spring容器的創(chuàng)建過程之如何注冊BeanPostProcessor詳解
關(guān)于BeanPostProcessor 各位一定不陌生,今天整理的這篇文章總結(jié)了如何注冊BeanPostProcessor,文中有非常詳細的圖文示例,需要的朋友可以參考下2021-06-06