新聞中心
服務(wù)監(jiān)控
Spring Boot Actuator是一個(gè)用于監(jiān)控和管理Spring Boot應(yīng)用的子項(xiàng)目,它提供了一組REST端點(diǎn)和命令行工具, 用于查看應(yīng)用的運(yùn)行狀態(tài)、性能指標(biāo)和健康狀況等。Actuator還支持應(yīng)用度量數(shù)據(jù)的導(dǎo)出,以及自定義端點(diǎn)和安全控制等功能。通過(guò)使用Spring Boot Actuator,開發(fā)人員可以更加方便地了解應(yīng)用的運(yùn)行狀況,及時(shí)發(fā)現(xiàn)和解決問題。

概述
隨著微服務(wù)架構(gòu)的普及,Spring Boot 已經(jīng)成為Java開發(fā)人員的首選框架。然而,隨著應(yīng)用的規(guī)模不斷擴(kuò)大, 如何有效地監(jiān)控和管理這些應(yīng)用成為一個(gè)重要的問題。Spring Boot Actuator的出現(xiàn),為開發(fā)人員提供了一個(gè)解決方案。本文將詳細(xì)介紹Spring Boot Actuator的功能、工作原理、使用場(chǎng)景以及應(yīng)用示例,幫助讀者更好地理解和掌握這一工具。
功能簡(jiǎn)介
- 應(yīng)用度量數(shù)據(jù)的導(dǎo)出:Actuator 可以將應(yīng)用的運(yùn)行數(shù)據(jù)導(dǎo)出到各種不同的存儲(chǔ)后端,例如 Prometheus、Datadog、New Relic 等。這樣,開發(fā)人員可以方便地使用這些數(shù)據(jù)來(lái)監(jiān)控應(yīng)用的性能和健康狀況。
- REST 端點(diǎn):Actuator 提供了一組 REST 端點(diǎn),用于查看應(yīng)用的運(yùn)行狀態(tài)、健康狀況、度量數(shù)據(jù)等信息。開發(fā)人員可以通過(guò) HTTP 請(qǐng)求來(lái)獲取這些數(shù)據(jù),并使用各種工具進(jìn)行可視化展示。
- 命令行工具:除了 REST 端點(diǎn)之外,Actuator 還提供了一些命令行工具,例如 spring-boot-cli 和 spring-boot-admin。這些工具可以讓開發(fā)人員更方便地管理和監(jiān)控應(yīng)用。
- 自定義端點(diǎn):Actuator 支持自定義端點(diǎn)的開發(fā),讓開發(fā)人員可以根據(jù)自己的需求來(lái)暴露自定義的監(jiān)控?cái)?shù)據(jù)。這樣可以更靈活地監(jiān)控和管理應(yīng)用。
- 安全控制:Actuator 支持對(duì)監(jiān)控端點(diǎn)的安全控制,例如限制訪問權(quán)限、身份驗(yàn)證等。這樣可以保護(hù)應(yīng)用的敏感信息不被泄露。
Spring-Actuator
默認(rèn)監(jiān)控服務(wù)
|
服務(wù)端點(diǎn) |
描述 |
|
auditevents |
公開當(dāng)前應(yīng)用程序的審核事件信息。 |
|
beans |
顯示應(yīng)用程序中所有Spring bean的完整列表。 |
|
caches |
公開可用的緩存 |
|
conditions |
顯示在配置和自動(dòng)配置類上評(píng)估的條件以及它們匹配或不匹配的原因。 |
|
configprops |
顯示所有@ConfigurationProperties的有序列表。 |
|
env |
公開Spring的ConfigurableEnvironment中的屬性 |
|
flyway |
顯示已應(yīng)用的任何Flyway數(shù)據(jù)庫(kù)遷移。 |
|
health |
顯示應(yīng)用健康信息。 |
|
httptrace |
顯示HTTP跟蹤信息(默認(rèn)情況下,最后100個(gè)HTTP請(qǐng)求 – 響應(yīng)交換)。 |
|
info |
顯示任意應(yīng)用信息。 |
|
integrationgraph |
顯示Spring集成圖。 |
|
loggers |
顯示和修改應(yīng)用程序中日志記錄器的配置。 |
|
liquibase |
顯示已應(yīng)用的任何Liquibase數(shù)據(jù)庫(kù)遷移。 |
|
metrics |
顯示當(dāng)前應(yīng)用程序的“指標(biāo)”信息。 |
|
mappings |
顯示所有@RequestMapping路徑的有序列表。 |
|
scheduledtasks |
顯示應(yīng)用程序中的計(jì)劃任務(wù)。 |
|
sessions |
允許從Spring Session支持的會(huì)話存儲(chǔ)中檢索和刪除用戶會(huì)話。使用Spring Session對(duì)響應(yīng)式Web應(yīng)用程序的支持時(shí)不可用。 |
|
shutdown |
允許應(yīng)用程序正常關(guān)閉。 |
http://localhost:8080/actuator
- 依賴
org.springframework.boot
spring-boot-starter-actuator
- 配置
management:
endpoints:
web:
exposure:
# [health, info]
include: "*"- 自定義監(jiān)控
監(jiān)控端點(diǎn)相關(guān)注解:
- @Endpoint:定義一個(gè)監(jiān)控端點(diǎn),同時(shí)支持HTTP和JMX兩種方式。
- @WebEndpoint:定義一個(gè)監(jiān)控端點(diǎn),只支持HTTP方式。
- @JmxEndpoint:定義一個(gè)監(jiān)控端點(diǎn),只支持JMX方式。
- @ReadOperation:作用在方法上,可用來(lái)返回端點(diǎn)展示的信息(通過(guò) Get 方法請(qǐng)求)。
- @WriteOperation:作用在方法上,可用來(lái)修改端點(diǎn)展示的信息(通過(guò) Post 方法請(qǐng)求)。
- @DeleteOperation:作用在方法上,可用來(lái)刪除對(duì)應(yīng)端點(diǎn)信息(通過(guò) Delete 方法請(qǐng)求)。
- @Selector:作用在參數(shù)上,用來(lái)定位一個(gè)端點(diǎn)的具體指標(biāo)路由。
自定義一個(gè)端點(diǎn)服務(wù):
@Endpoint(id = "custom")
public class CustomEndpoint {
/**
* /actuator/custom
*/
@ReadOperation
public Map custom() {
return new HashMap();
}
/**
* /actuator/custom/{name}?value={value}
*/
@ReadOperation
public Map name(@Selector String name, @Nullable String value) {
return new HashMap();
}
}Spring-Admin
Spring-Actuator主要實(shí)現(xiàn)數(shù)據(jù)的采集,以及提供REST API以及JMX的訪問渠道,那么數(shù)據(jù)具體如何友好地顯示出來(lái)?這時(shí)我們需要對(duì)應(yīng)的UI,其中spring-boot-admin就是這樣一款工具。
http://localhost:8080/applications
- 服務(wù)端
de.codecentric
spring-boot-admin-starter-server
@EnableAdminServer
public class Application{ }- 客戶端
de.codecentric
spring-boot-admin-starter-client
2.6.2
客戶端配置
spring:
boot:
admin:
client:
url: http://localhost:8080Prometheus + Grafana
上面說(shuō)到,Actuator除了采集指標(biāo),提供訪問API外,還提供了“應(yīng)用度量數(shù)據(jù)的導(dǎo)出”的功能,這樣就能將我們采集到的指標(biāo)輸出到指定的存儲(chǔ)服務(wù)或終端以便進(jìn)一步分析。其中Prometheus就是這樣一個(gè)應(yīng)用。
- Prometheus 時(shí)序數(shù)據(jù)庫(kù),用于存儲(chǔ)數(shù)據(jù),提供并提供查詢,它存儲(chǔ)了計(jì)算機(jī)系統(tǒng)在各個(gè)時(shí)間點(diǎn)上的監(jiān)控?cái)?shù)據(jù)
- Grafana 儀表盤,提供監(jiān)控指標(biāo)可視化界面。
- 依賴
io.micrometer
micrometer-registry-prometheus
- 配置
management:
endpoints:
web:
exposure:
include: "*"
metrics:
export:
prometheus:
enabled: true
prometheus:
enabled: true- prometheus配置
scrape_configs:
- job_name: 'spring-boot-actuator'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['localhost:8080'] # 使用你的Spring Boot應(yīng)用程序的實(shí)際主機(jī)和端口替換- 啟動(dòng)
prometheus.exe --config.file=prometheus.yml
grafana-server.exe由于篇幅有限,關(guān)于Grafana如何集成Prometheus,網(wǎng)上有很多具體實(shí)踐,這里不重復(fù)贅述...
問題
- 服務(wù)端點(diǎn)
由于項(xiàng)目使用spring-boot版本為2.3.7.RELEASE,而spring-boot-admin-starter-server版本設(shè)置設(shè)置為2.7.x版本時(shí),UI相關(guān)配置一直無(wú)法加載,通過(guò)源碼可以看到
在2.6.x版本中對(duì)應(yīng)spring-boot-admin-server-ui存在META-IN\spring.factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration而在2.7.x版本中,spring.factories刪除了且改為了 META-INF\spring\org.springframework.boot.autoconfigure.AutoConfiguration.imports
de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration因此如果需要使用2.7.x版本的spring-boot-admin,記得把spring-boot升級(jí)到2.7.x
- 參數(shù)名稱
參數(shù)名稱被解析為arg0,導(dǎo)致請(qǐng)求匹配失敗。通過(guò)下面的配置保證編譯后的文件通過(guò)反射獲取的參數(shù)名稱不變
org.apache.maven.plugins
maven-compiler-plugin
3.11.0
false
-parameters
如果使用Idea,你可以在應(yīng)用啟動(dòng)后,Actuator功能面板的Mappings中看到服務(wù)地址的變化
結(jié)束語(yǔ)
服務(wù)監(jiān)控是為了更好的了解服務(wù)運(yùn)行狀況,及時(shí)發(fā)現(xiàn)服務(wù)可能出現(xiàn)的問題,并在出現(xiàn)故障時(shí)能夠有效的定位問題產(chǎn)生的原因。更大層面解決系統(tǒng)運(yùn)行過(guò)程中的維護(hù) 成本。關(guān)于監(jiān)控相關(guān)的應(yīng)用還有一些,比如SkyWalking、Zipkin、Elastic APM等等。
當(dāng)前題目:一文帶你了解Spring Actuator
分享地址:http://fisionsoft.com.cn/article/djpjcid.html


咨詢
建站咨詢
