SpringBoot詳解整合Spring?Boot?Admin實現(xiàn)監(jiān)控功能
監(jiān)控
? 在說監(jiān)控之前,需要回顧一下軟件業(yè)的發(fā)展史。最早的軟件完成一些非常簡單的功能,代碼不多,錯誤也少。隨著軟件功能的逐步完善,軟件的功能變得越來越復雜,功能不能得到有效的保障,這個階段出現(xiàn)了針對軟件功能的檢測,也就是軟件測試。伴隨著計算機操作系統(tǒng)的逐步升級,軟件的運行狀態(tài)也變得開始讓人捉摸不透,出現(xiàn)了不穩(wěn)定的狀況。伴隨著計算機網(wǎng)絡的發(fā)展,程序也從單機狀態(tài)切換成基于計算機網(wǎng)絡的程序,應用于網(wǎng)絡的程序開始出現(xiàn),由于網(wǎng)絡的不穩(wěn)定性,程序的運行狀態(tài)讓使用者更加堪憂。互聯(lián)網(wǎng)的出現(xiàn)徹底打破了軟件的思維模式,隨之而來的互聯(lián)網(wǎng)軟件就更加凸顯出應對各種各樣復雜的網(wǎng)絡情況之下的弱小。計算機軟件的運行狀況已經(jīng)成為了軟件運行的一個大話題,針對軟件的運行狀況就出現(xiàn)了全新的思維,建立起了初代的軟件運行狀態(tài)監(jiān)控。
? 什么是監(jiān)控?就是通過軟件的方式展示另一個軟件的運行情況,運行的情況則通過各種各樣的指標數(shù)據(jù)反饋給監(jiān)控人員。例如網(wǎng)絡是否順暢、服務器是否在運行、程序的功能是否能夠整百分百運行成功,內(nèi)存是否夠用,等等等等。
? 本章要講解的監(jiān)控就是對軟件的運行情況進行監(jiān)督,但是springboot程序與非springboot程序的差異還是很大的,為了方便監(jiān)控軟件的開發(fā),springboot提供了一套功能接口,為開發(fā)者加速開發(fā)過程。
監(jiān)控的意義
? 對于現(xiàn)代的互聯(lián)網(wǎng)程序來說,規(guī)模越來越大,功能越來越復雜,還要追求更好的客戶體驗,因此要監(jiān)控的信息量也就比較大了。由于現(xiàn)在的互聯(lián)網(wǎng)程序大部分都是基于微服務的程序,一個程序的運行需要若干個服務來保障,因此第一個要監(jiān)控的指標就是服務是否正常運行,也就是監(jiān)控服務狀態(tài)是否處理宕機狀態(tài)。一旦發(fā)現(xiàn)某個服務宕機了,必須馬上給出對應的解決方案,避免整體應用功能受影響。其次,由于互聯(lián)網(wǎng)程序服務的客戶量是巨大的,當客戶的請求在短時間內(nèi)集中達到服務器后,就會出現(xiàn)各種程序運行指標的波動。比如內(nèi)存占用嚴重,請求無法及時響應處理等,這就是第二個要監(jiān)控的重要指標,監(jiān)控服務運行指標。雖然軟件是對外提供用戶的訪問需求,完成對應功能的,但是后臺的運行是否平穩(wěn),是否出現(xiàn)了不影響客戶使用的功能隱患,這些也是要密切監(jiān)控的,此時就需要在不停機的情況下,監(jiān)控系統(tǒng)運行情況,日志是一個不錯的手段。如果在眾多日志中找到開發(fā)者或運維人員所關注的日志信息,簡單快速有效的過濾出要看的日志也是監(jiān)控系統(tǒng)需要考慮的問題,這就是第三個要監(jiān)控的指標,監(jiān)控程序運行日志。雖然我們期望程序一直平穩(wěn)運行,但是由于突發(fā)情況的出現(xiàn),例如服務器被攻擊、服務器內(nèi)存溢出等情況造成了服務器宕機,此時當前服務不能滿足使用需要,就要將其重啟甚至關閉,如果快速控制服務器的啟停也是程序運行過程中不可回避的問題,這就是第四個監(jiān)控項,管理服務狀態(tài)。以上這些僅僅是從大的方面來思考監(jiān)控這個問題,還有很多的細節(jié)點,例如上線了一個新功能,定時提醒用戶續(xù)費,這種功能不是上線后馬上就運行的,但是當前功能是否真的啟動,如果快速的查詢到這個功能已經(jīng)開啟,這也是監(jiān)控中要解決的問題,等等??磥肀O(jiān)控真的是一項非常重要的工作。
? 通過上述描述,可以看出監(jiān)控很重要。那具體的監(jiān)控要如何開展呢?還要從實際的程序運行角度出發(fā)。比如現(xiàn)在有3個服務支撐著一個程序的運行,每個服務都有自己的運行狀態(tài)。

? 此時被監(jiān)控的信息就要在三個不同的程序中去查詢并展示,但是三個服務是服務于一個程序的運行的,如果不能合并到一個平臺上展示,監(jiān)控工作量巨大,而且信息對稱性差,要不停的在三個監(jiān)控端查看數(shù)據(jù)。如果將業(yè)務放大成30個,300個,3000個呢?看來必須有一個單獨的平臺,將多個被監(jiān)控的服務對應的監(jiān)控指標信息匯總在一起,這樣更利于監(jiān)控工作的開展。

? 新的程序?qū)iT用來監(jiān)控,新的問題就出現(xiàn)了,是被監(jiān)控程序主動上報信息還是監(jiān)控程序主動獲取信息?如果監(jiān)控程序不能主動獲取信息,這就意味著監(jiān)控程序有可能看到的是很久之前被監(jiān)控程序上報的信息,萬一被監(jiān)控程序宕機了,監(jiān)控程序就無法區(qū)分究竟是好久沒法信息了,還是已經(jīng)下線了。所以監(jiān)控程序必須具有主動發(fā)起請求獲取被監(jiān)控服務信息的能力。

? 如果監(jiān)控程序要監(jiān)控服務時,主動獲取對方的信息。那監(jiān)控程序如何知道哪些程序被自己監(jiān)控呢?不可能在監(jiān)控程序中設置我監(jiān)控誰,這樣互聯(lián)網(wǎng)上的所有程序豈不是都可以被監(jiān)控到,這樣的話信息安全將無法得到保障。合理的做法只能是在被監(jiān)控程序啟動時上報監(jiān)控程序,告訴監(jiān)控程序你可以監(jiān)控我了。看來需要在被監(jiān)控程序端做主動上報的操作,這就要求被監(jiān)控程序中配置對應的監(jiān)控程序是誰。

? 被監(jiān)控程序可以提供各種各樣的指標數(shù)據(jù)給監(jiān)控程序看,但是每一個指標都代表著公司的機密信息,并不是所有的指標都可以給任何人看的,乃至運維人員,所以對被監(jiān)控指標的是否開放出來給監(jiān)控系統(tǒng)看,也需要做詳細的設定。
? 以上描述的整個過程就是一個監(jiān)控系統(tǒng)的基本流程。
總結(jié)
- 監(jiān)控是一個非常重要的工作,是保障程序正常運行的基礎手段
- 監(jiān)控的過程通過一個監(jiān)控程序進行,它匯總所有被監(jiān)控的程序的信息集中統(tǒng)一展示
- 被監(jiān)控程序需要主動上報自己被監(jiān)控,同時要設置哪些指標被監(jiān)控
思考
? 下面就要開始做監(jiān)控了,新的問題就來了,監(jiān)控程序怎么做呢?難道要自己寫嗎?肯定是不現(xiàn)實的,如何進行監(jiān)控,咱們下節(jié)再講。
可視化監(jiān)控平臺
? springboot抽取了大部分監(jiān)控系統(tǒng)的常用指標,提出了監(jiān)控的總思想。然后就有好心的同志根據(jù)監(jiān)控的總思想,制作了一個通用性很強的監(jiān)控系統(tǒng),因為是基于springboot監(jiān)控的核心思想制作的,所以這個程序被命名為Spring Boot Admin。
? Spring Boot Admin,這是一個開源社區(qū)項目,用于管理和監(jiān)控SpringBoot應用程序。這個項目中包含有客戶端和服務端兩部分,而監(jiān)控平臺指的就是服務端。我們做的程序如果需要被監(jiān)控,將我們做的程序制作成客戶端,然后配置服務端地址后,服務端就可以通過HTTP請求的方式從客戶端獲取對應的信息,并通過UI界面展示對應信息。
? 下面就來開發(fā)這套監(jiān)控程序,先制作服務端,其實服務端可以理解為是一個web程序,收到一些信息后展示這些信息。
服務端開發(fā)
步驟①:導入springboot admin對應的starter,版本與當前使用的springboot版本保持一致,并將其配置成web工程
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>? 上述過程可以通過創(chuàng)建項目時使用勾選的形式完成。

步驟②:在引導類上添加注解@EnableAdminServer,聲明當前應用啟動后作為SpringBootAdmin的服務器使用
@SpringBootApplication
@EnableAdminServer
public class Springboot25AdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot25AdminServerApplication.class, args);
}
}
? 做到這里,這個服務器就開發(fā)好了,啟動后就可以訪問當前程序了,界面如下。

? 由于目前沒有啟動任何被監(jiān)控的程序,所以里面什么信息都沒有。下面制作一個被監(jiān)控的客戶端程序。
客戶端開發(fā)
? 客戶端程序開發(fā)其實和服務端開發(fā)思路基本相似,多了一些配置而已。
步驟①:導入springboot admin對應的starter,版本與當前使用的springboot版本保持一致,并將其配置成web工程
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
? 上述過程也可以通過創(chuàng)建項目時使用勾選的形式完成,不過一定要小心,端口配置成不一樣的,否則會沖突。
步驟②:設置當前客戶端將信息上傳到哪個服務器上,通過yml文件配置
spring:
boot:
admin:
client:
url: http://localhost:8080
? 做到這里,這個客戶端就可以啟動了。啟動后再次訪問服務端程序,界面如下。

? 可以看到,當前監(jiān)控了1個程序,點擊進去查看詳細信息。

? 由于當前沒有設置開放哪些信息給監(jiān)控服務器,所以目前看不到什么有效的信息。下面需要做兩組配置就可以看到信息了。
開放指定信息給服務器看
允許服務器以HTTP請求的方式獲取對應的信息
配置如下:
server:
port: 80
spring:
boot:
admin:
client:
url: http://localhost:8080
management:
endpoint:
health:
show-details: always
endpoints:
web:
exposure:
include: "*"
? 上述配置對于初學者來說比較容易混淆。簡單解釋一下,到下一節(jié)再做具體的講解。springbootadmin的客戶端默認開放了13組信息給服務器,但是這些信息除了一個之外,其他的信息都不讓通過HTTP請求查看。所以你看到的信息基本上就沒什么內(nèi)容了,只能看到一個內(nèi)容,就是下面的健康信息。

? 但是即便如此我們看到健康信息中也沒什么內(nèi)容,原因在于健康信息中有一些信息描述了你當前應用使用了什么技術等信息,如果無腦的對外暴露功能會有安全隱患。通過配置就可以開放所有的健康信息明細查看了。
management:
endpoint:
health:
show-details: always
? 健康明細信息如下:

? 目前除了健康信息,其他信息都查閱不了。原因在于其他12種信息是默認不提供給服務器通過HTTP請求查閱的,所以需要開啟查閱的內(nèi)容項,使用*表示查閱全部。記得帶引號。
endpoints:
web:
exposure:
include: "*"
? 配置后再刷新服務器頁面,就可以看到所有的信息了。

? 以上界面中展示的信息量就非常大了,包含了13組信息,有性能指標監(jiān)控,加載的bean列表,加載的系統(tǒng)屬性,日志的顯示控制等等。
配置多個客戶端
? 可以通過配置客戶端的方式在其他的springboot程序中添加客戶端坐標,這樣當前服務器就可以監(jiān)控多個客戶端程序了。每個客戶端展示不同的監(jiān)控信息。

? 進入監(jiān)控面板,如果你加載的應用具有功能,在監(jiān)控面板中可以看到3組信息展示的與之前加載的空工程不一樣。
類加載面板中可以查閱到開發(fā)者自定義的類:


映射中可以查閱到當前應用配置的所有請求


性能指標中可以查閱當前應用獨有的請求路徑統(tǒng)計數(shù)據(jù)


總結(jié)
- 開發(fā)監(jiān)控服務端需要導入坐標,然后在引導類上添加注解@EnableAdminServer,并將其配置成web程序即可
- 開發(fā)被監(jiān)控的客戶端需要導入坐標,然后配置服務端服務器地址,并做開放指標的設定即可
- 在監(jiān)控平臺中可以查閱到各種各樣被監(jiān)控的指標,前提是客戶端開放了被監(jiān)控的指標
思考
? 之前說過,服務端要想監(jiān)控客戶端,需要主動的獲取到對應信息并展示出來。但是目前我們并沒有在客戶端開發(fā)任何新的功能,但是服務端確可以獲取監(jiān)控信息,誰幫我們做的這些功能呢?咱們下一節(jié)再講。
監(jiān)控原理
? 通過查閱監(jiān)控中的映射指標,可以看到當前系統(tǒng)中可以運行的所有請求路徑,其中大部分路徑以/actuator開頭

? 首先這些請求路徑不是開發(fā)者自己編寫的,其次這個路徑代表什么含義呢?既然這個路徑可以訪問,就可以通過瀏覽器發(fā)送該請求看看究竟可以得到什么信息。

? 通過發(fā)送請求,可以得到一組json信息,如下
{
"_links": {
"self": {
"href": "http://localhost:81/actuator",
"templated": false
},
"beans": {
"href": "http://localhost:81/actuator/beans",
"templated": false
},
"caches-cache": {
"href": "http://localhost:81/actuator/caches/{cache}",
"templated": true
},
"caches": {
"href": "http://localhost:81/actuator/caches",
"templated": false
},
"health": {
"href": "http://localhost:81/actuator/health",
"templated": false
},
"health-path": {
"href": "http://localhost:81/actuator/health/{*path}",
"templated": true
},
"info": {
"href": "http://localhost:81/actuator/info",
"templated": false
},
"conditions": {
"href": "http://localhost:81/actuator/conditions",
"templated": false
},
"shutdown": {
"href": "http://localhost:81/actuator/shutdown",
"templated": false
},
"configprops": {
"href": "http://localhost:81/actuator/configprops",
"templated": false
},
"configprops-prefix": {
"href": "http://localhost:81/actuator/configprops/{prefix}",
"templated": true
},
"env": {
"href": "http://localhost:81/actuator/env",
"templated": false
},
"env-toMatch": {
"href": "http://localhost:81/actuator/env/{toMatch}",
"templated": true
},
"loggers": {
"href": "http://localhost:81/actuator/loggers",
"templated": false
},
"loggers-name": {
"href": "http://localhost:81/actuator/loggers/{name}",
"templated": true
},
"heapdump": {
"href": "http://localhost:81/actuator/heapdump",
"templated": false
},
"threaddump": {
"href": "http://localhost:81/actuator/threaddump",
"templated": false
},
"metrics-requiredMetricName": {
"href": "http://localhost:81/actuator/metrics/{requiredMetricName}",
"templated": true
},
"metrics": {
"href": "http://localhost:81/actuator/metrics",
"templated": false
},
"scheduledtasks": {
"href": "http://localhost:81/actuator/scheduledtasks",
"templated": false
},
"mappings": {
"href": "http://localhost:81/actuator/mappings",
"templated": false
}
}
}? 其中每一組數(shù)據(jù)都有一個請求路徑,而在這里請求路徑中有之前看到過的health,發(fā)送此請求又得到了一組信息
{
"status": "UP",
"components": {
"diskSpace": {
"status": "UP",
"details": {
"total": 297042808832,
"free": 72284409856,
"threshold": 10485760,
"exists": true
}
},
"ping": {
"status": "UP"
}
}
}? 當前信息與監(jiān)控面板中的數(shù)據(jù)存在著對應關系

? 原來監(jiān)控中顯示的信息實際上是通過發(fā)送請求后得到json數(shù)據(jù),然后展示出來。按照上述操作,可以發(fā)送更多的以/actuator開頭的鏈接地址,獲取更多的數(shù)據(jù),這些數(shù)據(jù)匯總到一起組成了監(jiān)控平臺顯示的所有數(shù)據(jù)。
? 到這里我們得到了一個核心信息,監(jiān)控平臺中顯示的信息實際上是通過對被監(jiān)控的應用發(fā)送請求得到的。那這些請求誰開發(fā)的呢?打開被監(jiān)控應用的pom文件,其中導入了springboot admin的對應的client,在這個資源中導入了一個名稱叫做actuator的包。被監(jiān)控的應用之所以可以對外提供上述請求路徑,就是因為添加了這個包。

? 這個actuator是什么呢?這就是本節(jié)要講的核心內(nèi)容,監(jiān)控的端點。
? Actuator,可以稱為端點,描述了一組監(jiān)控信息,SpringBootAdmin提供了多個內(nèi)置端點,通過訪問端點就可以獲取對應的監(jiān)控信息,也可以根據(jù)需要自定義端點信息。通過發(fā)送請求路勁**/actuator可以訪問應用所有端點信息,如果端點中還有明細信息可以發(fā)送請求/actuator/端點名稱**來獲取詳細信息。以下列出了所有端點信息說明:
用所有端點信息,如果端點中還有明細信息可以發(fā)送請求/actuator/端點名稱**來獲取詳細信息。以下列出了所有端點信息說明:
| ID | 描述 | 默認啟用 |
|---|---|---|
| auditevents | 暴露當前應用程序的審計事件信息。 | 是 |
| beans | 顯示應用程序中所有 Spring bean 的完整列表。 | 是 |
| caches | 暴露可用的緩存。 | 是 |
| conditions | 顯示在配置和自動配置類上評估的條件以及它們匹配或不匹配的原因。 | 是 |
| configprops | 顯示所有 @ConfigurationProperties 的校對清單。 | 是 |
| env | 暴露 Spring ConfigurableEnvironment 中的屬性。 | 是 |
| flyway | 顯示已應用的 Flyway 數(shù)據(jù)庫遷移。 | 是 |
| health | 顯示應用程序健康信息 | 是 |
| httptrace | 顯示 HTTP 追蹤信息(默認情況下,最后 100 個 HTTP 請求/響應交換)。 | 是 |
| info | 顯示應用程序信息。 | 是 |
| integrationgraph | 顯示 Spring Integration 圖。 | 是 |
| loggers | 顯示和修改應用程序中日志記錄器的配置。 | 是 |
| liquibase | 顯示已應用的 Liquibase 數(shù)據(jù)庫遷移。 | 是 |
| metrics | 顯示當前應用程序的指標度量信息。 | 是 |
| mappings | 顯示所有 @RequestMapping 路徑的整理清單。 | 是 |
| scheduledtasks | 顯示應用程序中的調(diào)度任務。 | 是 |
| sessions | 允許從 Spring Session 支持的會話存儲中檢索和刪除用戶會話。當使用 Spring Session 的響應式 Web 應用程序支持時不可用。 | 是 |
| shutdown | 正常關閉應用程序。 | 否 |
| threaddump | 執(zhí)行線程 dump。 | 是 |
| heapdump | 返回一個 hprof 堆 dump 文件。 | 是 |
| jolokia | 通過 HTTP 暴露 JMX bean(當 Jolokia 在 classpath 上時,不適用于 WebFlux)。 | 是 |
| logfile | 返回日志文件的內(nèi)容(如果已設置 logging.file 或 logging.path 屬性)。支持使用 HTTP Range 頭來檢索部分日志文件的內(nèi)容。 | 是 |
| prometheus | 以可以由 Prometheus 服務器抓取的格式暴露指標。 | 是 |
? 上述端點每一項代表被監(jiān)控的指標,如果對外開放則監(jiān)控平臺可以查詢到對應的端點信息,如果未開放則無法查詢對應的端點信息。通過配置可以設置端點是否對外開放功能。使用enable屬性控制端點是否對外開放。其中health端點為默認端點,不能關閉。
management:
endpoint:
health: # 端點名稱
show-details: always
# 監(jiān)控端點關閉用如下方式
info: # 端點名稱
enabled: false # 是否開放
? 為了方便開發(fā)者快速配置端點,springboot admin設置了13個較為常用的端點作為默認開放的端點,如果需要控制默認開放的端點的開放狀態(tài),可以通過配置設置,如下:
management:
endpoints:
enabled-by-default: true # 是否開啟默認端點,默認值true
? 上述端點開啟后,就可以通過端點對應的路徑查看對應的信息了。但是此時還不能通過HTTP請求查詢此信息,還需要開啟通過HTTP請求查詢的端點名稱,使用“*”可以簡化配置成開放所有端點的WEB端HTTP請求權(quán)限。
management:
endpoints:
web:
exposure:
include: "*"
? 整體上來說,對于端點的配置有兩組信息,一組是endpoints開頭的,對所有端點進行配置,一組是endpoint開頭的,對具體端點進行配置。
management:
endpoint: # 具體端點的配置
health:
show-details: always
# 監(jiān)控端點關閉用如下方式
info:
enabled: false
endpoints: # 全部端點的配置
web:
exposure:
include: "*"
enabled-by-default: true
總結(jié)
- 被監(jiān)控客戶端通過添加actuator的坐標可以對外提供被訪問的端點功能
- 端點功能的開放與關閉可以通過配置進行控制
- web端默認無法獲取所有端點信息,通過配置開放端點功能
自定義監(jiān)控指標
? 端點描述了被監(jiān)控的信息,除了系統(tǒng)默認的指標,還可以自行添加顯示的指標,下面就通過3種不同的端點的指標自定義方式來學習端點信息的二次開發(fā)。
INFO端點
? info端點描述了當前應用的基本信息,可以通過兩種形式快速配置info端點的信息
配置形式
在yml文件中通過設置info節(jié)點的信息就可以快速配置端點信息
info:
#appName: @project.artifactId@
#version: @project.version@
author: hashnode
company: aaaaa
配置完畢后,對應信息顯示在監(jiān)控平臺上

也可以通過請求端點信息路徑獲取對應json信息
編程形式
通過配置的形式只能添加固定的數(shù)據(jù),如果需要動態(tài)數(shù)據(jù)還可以通過配置bean的方式為info端點添加信息,此信息與配置信息共存
@Component
public class InfoConfig implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
builder.withDetail("runTime",System.currentTimeMillis()); //添加單個信息
Map infoMap = new HashMap();
infoMap.put("buildTime","2022");
builder.withDetails(infoMap); //添加一組信息
}
}
Health端點
? health端點描述當前應用的運行健康指標,即應用的運行是否成功。通過編程的形式可以擴展指標信息。
@Component
public class HealthConfig extends AbstractHealthIndicator {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception {
boolean condition = true;
if(condition) {
builder.status(Status.UP); //設置運行狀態(tài)為啟動狀態(tài)
builder.withDetail("runTime", System.currentTimeMillis());
Map infoMap = new HashMap();
infoMap.put("buildTime", "2006");
builder.withDetails(infoMap);
}else{
builder.status(Status.OUT_OF_SERVICE); //設置運行狀態(tài)為不在服務狀態(tài)
builder.withDetail("上線了嗎?","未上線");
}
}
}
? 當任意一個組件狀態(tài)不為UP時,整體應用對外服務狀態(tài)為非UP狀態(tài)。
Metrics端點
? metrics端點描述了性能指標,除了系統(tǒng)自帶的監(jiān)控性能指標,還可以自定義性能指標。
@Service
public class BookServiceImpl extends ServiceImpl<BookDao, Book> implements IBookService {
@Autowired
private BookDao bookDao;
private Counter counter;
public BookServiceImpl(MeterRegistry meterRegistry){
counter = meterRegistry.counter("用戶付費操作次數(shù):");
}
@Override
public boolean delete(Integer id) {
//每次執(zhí)行刪除業(yè)務等同于執(zhí)行了付費業(yè)務
counter.increment();
return bookDao.deleteById(id) > 0;
}
}
? 在性能指標中就出現(xiàn)了自定義的性能指標監(jiān)控項

自定義端點
? 可以根據(jù)業(yè)務需要自定義端點,方便業(yè)務監(jiān)控
@Component
@Endpoint(id="pay",enableByDefault = true)
public class PayEndpoint {
@ReadOperation
public Object getPay(){
Map payMap = new HashMap();
payMap.put("level 1","300");
payMap.put("level 2","291");
payMap.put("level 3","666");
return payMap;
}
}
? 由于此端點數(shù)據(jù)spirng boot admin無法預知該如何展示,所以通過界面無法看到此數(shù)據(jù),通過HTTP請求路徑可以獲取到當前端點的信息,但是需要先開啟當前端點對外功能,或者設置當前端點為默認開發(fā)的端點。

總結(jié)
- 端點的指標可以自定義,但是每種不同的指標根據(jù)其功能不同,自定義方式不同
- info端點通過配置和編程的方式都可以添加端點指標
- health端點通過編程的方式添加端點指標,需要注意要為對應指標添加啟動狀態(tài)的邏輯設定
- metrics指標通過在業(yè)務中添加監(jiān)控操作設置指標
- 可以自定義端點添加更多的指標
到此這篇關于SpringBoot詳解整合Spring Boot Admin實現(xiàn)監(jiān)控功能的文章就介紹到這了,更多相關SpringBoot Spring Boot Admin內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring Boot Excel文件導出下載實現(xiàn)代碼
這篇文章帶領我們直接實現(xiàn)Excel文件的直接導出下載,后續(xù)開發(fā)不需要開發(fā)很多代碼,直接繼承已經(jīng)寫好的代碼,增加一個Xml配置就可以直接導出。具體實現(xiàn)代碼大家跟隨小編一起通過本文學習吧2018-11-11
java使用BeanUtils.copyProperties踩坑經(jīng)歷
最近在做個項目,踩了個坑特此記錄一下,本文主要介紹了使用BeanUtils.copyProperties踩坑經(jīng)歷,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05
java中BeanNotOfRequiredTypeException的問題解決(@Autowired和@Resourc
本文主要介紹了java中BeanNotOfRequiredTypeException的問題解決(@Autowired和@Resource注解的不同),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07
javaSystem.out.println()輸出byte[]、char[]異常的問題詳析
這篇文章主要給大家介紹了關于javaSystem.out.println()輸出byte[]、char[]異常問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看啊2019-01-01

