SpringBoot 指標(biāo)監(jiān)控actuator的專題
1.寫在前面
首先肯定要說一下SpringBoot的四大核心了:
- 自動(dòng)裝配:簡單配置甚至零配置即可運(yùn)行項(xiàng)目
- 起步依賴:場景啟動(dòng)器
- Actuator:指標(biāo)監(jiān)控
- 命令行界面 :命令行
這篇文章呢,我來和大家聊聊指標(biāo)監(jiān)控這個(gè)東西。
2.SpringBoot Actuator
未來每一個(gè)微服務(wù)在云上部署以后,我們都需要對(duì)其進(jìn)行監(jiān)控、追蹤、審計(jì)、控制等。SpringBoot就抽取了Actuator場景,使得我們每個(gè)微服務(wù)快速引用即可獲得生產(chǎn)級(jí)別的應(yīng)用監(jiān)控、審計(jì)等功能。
要開啟指標(biāo)監(jiān)控功能,首先需要在pom文件種添加如下依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
然后在配置文件中先做如下配置:
server:
port: 8080
# 暴露所有監(jiān)控信息為HTTP
management:
endpoints:
enabled-by-default: true # 默認(rèn)開啟所有監(jiān)控端點(diǎn)信息
web:
exposure:
include: '*' # 以web方式暴露所有端點(diǎn)
然后啟動(dòng)項(xiàng)目,進(jìn)行測試:
下圖中測試得到的內(nèi)容就是目前項(xiàng)目中可以監(jiān)控到的各種指標(biāo)參數(shù)信息。

在指標(biāo)監(jiān)控這個(gè)功能中,有一個(gè)經(jīng)常提到的詞叫:端點(diǎn)。那么常用常見的端點(diǎn)如下圖:👇👇👇

上面我們?cè)L問指標(biāo)監(jiān)控的url是:http://localhost:8080/actuator/ 即可獲取到所有端點(diǎn)信息。那么如果想要獲取某個(gè)端點(diǎn)信息,url就應(yīng)該是:
http://localhost:8080/actuator/endpointName/detailPath。
健康檢查端點(diǎn),我們一般用于在云平臺(tái),平臺(tái)會(huì)定時(shí)的檢查應(yīng)用的健康狀況,我們就需要Health Endpoint可以為平臺(tái)返回當(dāng)前應(yīng)用的一系列組件健康狀況的集合。
重要的幾點(diǎn):
- health endpoint返回的結(jié)果,應(yīng)該是一系列健康檢查后的一個(gè)匯總報(bào)告
- 很多的健康檢查默認(rèn)已經(jīng)自動(dòng)配置好了,比如:數(shù)據(jù)庫、redis等
- 可以很容易的添加自定義的健康檢查機(jī)制



提供詳細(xì)的、層級(jí)的、空間指標(biāo)信息,這些信息可以被pull(主動(dòng)推送)或者push(被動(dòng)獲取)方式得到;
- 通過Metrics對(duì)接多種監(jiān)控系統(tǒng)
- 簡化核心Metrics開發(fā)
- 添加自定義Metrics或者擴(kuò)展已有Metrics


上面的這些測試結(jié)果就是我們根據(jù)當(dāng)前項(xiàng)目,獲取到某個(gè)端點(diǎn)的詳細(xì)指標(biāo)信息。
除此之外,我們也可以對(duì)這些端點(diǎn)進(jìn)行手動(dòng)開啟或者禁用。(參見下面的配置文件)
server:
port: 8080
# 暴露所有監(jiān)控信息為HTTP
management:
endpoints:
enabled-by-default: false # 默認(rèn)開啟所有監(jiān)控端點(diǎn)信息
web:
exposure:
include: '*' # 以web方式暴露所有端點(diǎn)
# 需要開啟或者禁用某個(gè)Endpoint
# 配置模式為 management.endpoint.<endpointName>.enabled = true/false
endpoint:
health:
show-details: always # 總是顯示health端點(diǎn)的詳細(xì)信息
enabled: true
info:
enabled: true
beans:
enabled: true


上面的測試截圖就是我們手動(dòng)的開啟某些端點(diǎn)、同時(shí)關(guān)閉了某些端點(diǎn)之后的結(jié)果。
3.定制化Endpoint
3.1 定制health端點(diǎn)信息
以上的所有內(nèi)容都是在使用SpringBoot為我們提供的官方的Endpoint,那么我們也是可以自定義Endpoint的(也即定制化Endpoint)。
有兩種方式:①繼承AbstractHealthIndicator抽象類(doHealthCheck(Health.Builder builder)方法);②實(shí)現(xiàn)HealthIndicator接口(重寫health()方法)。我是用第一種方法簡單做個(gè)測試吧。
package com.szh.boot.health;
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.Status;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
*
*/
@Component
public class MyComHealthIndicator extends AbstractHealthIndicator {
/**
* 真實(shí)的檢查方法
* @param builder
* @throws Exception
*/
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
Map<String,Object> map = new HashMap<>();
//模擬檢查過程
if (1 == 1) {
// builder.up(); //健康
builder.status(Status.UP);
map.put("count",1);
map.put("ms",100);
} else {
// builder.down(); //宕機(jī)
builder.status(Status.DOWN);
map.put("error","連接超時(shí)");
map.put("ms",3000);
}
builder.withDetail("code",20001)
.withDetails(map);
}
}
配置文件如下:👇👇👇
server:
port: 8080
# 暴露所有監(jiān)控信息為HTTP
management:
endpoints:
enabled-by-default: false # 默認(rèn)開啟所有監(jiān)控端點(diǎn)信息
web:
exposure:
include: '*' # 以web方式暴露所有端點(diǎn)
# 需要開啟或者禁用某個(gè)Endpoint
# 配置模式為 management.endpoint.<endpointName>.enabled = true/false
endpoint:
health:
show-details: always # 總是顯示health端點(diǎn)的詳細(xì)信息
enabled: true
然后我們啟動(dòng)測試,訪問路徑:http://localhost:8080/actuator/health。從結(jié)果中看到有一個(gè)端點(diǎn)myCom就是我們自定義的(命名方式就是 MyComHealthIndicator 類去掉后面的 HealthIndicator)。

3.2 定制info端點(diǎn)信息
首先在配置文件中添加如下內(nèi)容:(最后幾行)
server:
port: 8080
# 暴露所有監(jiān)控信息為HTTP
management:
endpoints:
enabled-by-default: false # 默認(rèn)開啟所有監(jiān)控端點(diǎn)信息
web:
exposure:
include: '*' # 以web方式暴露所有端點(diǎn)
# 需要開啟或者禁用某個(gè)Endpoint
# 配置模式為 management.endpoint.<endpointName>.enabled = true/false
endpoint:
health:
show-details: always # 總是顯示health端點(diǎn)的詳細(xì)信息
enabled: true
info:
enabled: true
beans:
enabled: true
info:
appName: spring-boot-actuator-endpoint-info
version: 2.0.0
mavenProjectName: @project.artifactId@
mavenProjectVersion: @project.version@
然后創(chuàng)建一個(gè)類,實(shí)現(xiàn) InfoContributor 這個(gè)接口,并且重寫接口中的 contribute(Info.Builder builder) 方法。
package com.szh.boot.info;
import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.stereotype.Component;
import java.util.Collections;
/**
*
*/
@Component
public class ExampleInfoContributor implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
builder.withDetail("example", Collections.singletonMap("key","value"));
}
}
最后我們啟動(dòng)測試一下,訪問路徑:http://localhost:8080/actuator/info。得到的數(shù)據(jù)就是我們上面通過代碼寫好的內(nèi)容。

到此這篇關(guān)于SpringBoot 指標(biāo)監(jiān)控actuator的專題的文章就介紹到這了,更多相關(guān)SpringBoot 指標(biāo)監(jiān)控內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java?WebSocket?服務(wù)端實(shí)現(xiàn)代碼
WebSocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工(full-duplex)通信——允許服務(wù)器主動(dòng)發(fā)送信息給客戶端,這篇文章主要介紹了java?WebSocket?服務(wù)端代碼,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
關(guān)于SpringGateway調(diào)用服務(wù) 接受不到參數(shù)問題
這篇文章主要介紹了關(guān)于SpringGateway調(diào)用服務(wù)接受不到參數(shù)問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο?
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο螅?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
Java中子類調(diào)用父類構(gòu)造方法的問題分析
本篇文章介紹了,Java中子類調(diào)用父類構(gòu)造方法的問題分析。需要的朋友參考下2013-04-04
大數(shù)組元素差異removeAll與Map效率對(duì)比
這篇文章主要介紹了大數(shù)組元素差異removeAll與Map效率對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
解決IntelliJ IDEA 控制臺(tái)輸出中文亂碼問題(史上最簡單)
這篇文章主要介紹了史上最簡單的IntelliJ IDEA 控制臺(tái)輸出中文亂碼問題的解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-05-05

