為應(yīng)用程序添加系統(tǒng)監(jiān)控-Spring Boot Actuator組件
在本節(jié)中,我們將介紹Spring Boot自帶的系統(tǒng)監(jiān)控功能。系統(tǒng)監(jiān)控在傳統(tǒng)Spring中是缺失的,而Spring Boot考慮到了這方面需求并提供了Actuator組件。Actuator組件對(duì)外暴露的是一系列HTTP端點(diǎn),請(qǐng)注意訪問(wèn)這些端點(diǎn)時(shí)返回的數(shù)據(jù)的風(fēng)格跟平時(shí)常見(jiàn)的RESTful風(fēng)格有所不同,這是因?yàn)樵摻M件在構(gòu)建HTTP端點(diǎn)時(shí)使用的就是我們?cè)诘?章介紹的HATEOAS。
Actuator組件
初始化Spring Boot監(jiān)控需要引入Spring Boot Actuator組件,而SpringBoot Actuator組件又依賴(lài)于Spring HATEOAS組件,所以需要在pom中添加兩個(gè)Maven依賴(lài),如代碼清單12-1所示。

當(dāng)啟動(dòng)Spring Boot應(yīng)用程序時(shí),我們?cè)趩?dòng)日志里會(huì)發(fā)現(xiàn)自動(dòng)添加了autoconfig、dump、beans、actuator、health等HTTP的端點(diǎn)。但是請(qǐng)注意,并不是所有端點(diǎn)都是對(duì)外暴露的。如果想要獲取當(dāng)前系統(tǒng)暴露的Actuator端點(diǎn),可以訪問(wèn)http://localhost:8080/actuator并得到如代碼清單12-2所示的結(jié)果。

這種結(jié)果就是HATEOAS風(fēng)格的HTTP響應(yīng),可以看到,默認(rèn)情況下SpringBoot Actuator只暴露了info和health這兩個(gè)最基本的監(jiān)控端點(diǎn)。如果我們想要看到默認(rèn)情況下看不到的所有端點(diǎn),則需要在配置文件中添加如代碼清單12-3所示的配置信息。

重啟Spring Boot應(yīng)用程序,這時(shí)就能獲取Spring Boot Actuator所暴露的所有端點(diǎn),如代碼清單12-4所示。



我們可以訪問(wèn)上述結(jié)果中的各個(gè)端點(diǎn)以獲取自己感興趣的監(jiān)控信息,例如訪問(wèn)http://localhost:8080/actuator/health端點(diǎn)可以得到當(dāng)前服務(wù)的基本狀態(tài),如代碼清單12-5所示。

上述配置項(xiàng)指定了需要顯示health這個(gè)端點(diǎn)的詳細(xì)信息。同樣的配置方法也適用于其他各個(gè)端點(diǎn)。本書(shū)不對(duì)Spring Boot Actuator提供的所有端點(diǎn)都進(jìn)行詳細(xì)討論,根據(jù)各個(gè)端點(diǎn)所起到的作用,將它們分為三大類(lèi)。第一類(lèi)是應(yīng)用配置類(lèi),用來(lái)獲取應(yīng)用程序中加載的應(yīng)用配置、環(huán)境變量、自動(dòng)化配置報(bào)告等與Spring Boot應(yīng)用密切相關(guān)的配置類(lèi)信息,典型的包括info、beans、env等端點(diǎn)。第二類(lèi)是度量指標(biāo)類(lèi),用來(lái)獲取應(yīng)用程序運(yùn)行過(guò)程中的內(nèi)存信息、線程池信息、HTTP請(qǐng)求統(tǒng)計(jì)等度量指標(biāo),常見(jiàn)的包括前面提到的health,以及metrics和threaddump等端點(diǎn)。第三類(lèi)是操作控制類(lèi),用于對(duì)Spring Boot應(yīng)用程序進(jìn)行操作,包括用來(lái)關(guān)閉應(yīng)用的shutdown端點(diǎn)。
Spring Boot Actuator內(nèi)置的這些端點(diǎn)已經(jīng)能夠很大程度上滿(mǎn)足日常開(kāi)發(fā)的需求。但如果這些默認(rèn)端點(diǎn)信息還不夠豐富,我們也可以對(duì)其進(jìn)行修改和擴(kuò)展。常見(jiàn)實(shí)現(xiàn)方案有兩種,一種是擴(kuò)展現(xiàn)有的監(jiān)控端點(diǎn),另一種是自定義新的監(jiān)控端點(diǎn)。在接下來(lái)的內(nèi)容中,我們將通過(guò)案例來(lái)實(shí)現(xiàn)這一目標(biāo)。我們先來(lái)關(guān)注如何在現(xiàn)有的監(jiān)控端點(diǎn)上添加定制化功能。
本文就是愿天堂沒(méi)有BUG給大家分享的內(nèi)容,大家有收獲的話可以分享下,想學(xué)習(xí)更多的話可以到微信公眾號(hào)里找我,我等你哦。
