日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
SpringBootActuator集成,難的是靈活運(yùn)用!

[[410648]]

本文轉(zhuǎn)載自微信公眾號(hào)「程序新視界」,作者丑胖俠二師兄。轉(zhuǎn)載本文請(qǐng)聯(lián)系程序新視界公眾號(hào)。

創(chuàng)新互聯(lián)建站主營(yíng)環(huán)翠網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP開(kāi)發(fā),環(huán)翠h5重慶小程序開(kāi)發(fā)公司搭建,環(huán)翠網(wǎng)站營(yíng)銷推廣歡迎環(huán)翠等地區(qū)企業(yè)咨詢

前言

曾經(jīng)看到Spring Boot Actuator這個(gè)框架時(shí),一直在想,它到底有什么作用呢?雖然知道它提供了很多端點(diǎn),有助于應(yīng)用程序的監(jiān)控和管理,但如果沒(méi)有直接的實(shí)踐案例,還是很難有說(shuō)服力的。

直到上篇文章《微服務(wù)架構(gòu):Nacos本地緩存 PK 微服務(wù)優(yōu)雅下線》中講到可以利用其中Actuator定義的端點(diǎn)來(lái)達(dá)到微服務(wù)的優(yōu)雅下線效果,才發(fā)現(xiàn)Actuator是真的很有用。

那么本文便基于Spring Boot系統(tǒng)如何集成Actuator,如何使用,以及如何自定義一個(gè)端點(diǎn)(Endpoint)來(lái)展開(kāi)。

Spring Boot Actuator簡(jiǎn)介

Spring Boot Actuator是Spring Boot提供用于對(duì)應(yīng)用系統(tǒng)進(jìn)行自省和監(jiān)控的功能模塊,基于此開(kāi)發(fā)人員可以方便地對(duì)應(yīng)用系統(tǒng)某些監(jiān)控指標(biāo)進(jìn)行查看、統(tǒng)計(jì)、審計(jì)、指標(biāo)收集等。Actuator提供了基于Http端點(diǎn)或JMX來(lái)管理和監(jiān)視應(yīng)用程序。

剛接觸Actuator朋友通常會(huì)有一個(gè)疑惑,Actuator可以通過(guò)Http端點(diǎn)進(jìn)行訪問(wèn),那么它與Spring Web提供的@Controller的對(duì)外服務(wù)有什么區(qū)別呢?它們都可以通過(guò)Http的方式讓外部來(lái)訪問(wèn)應(yīng)用程序,但功能的定義邊界不同。就像上面說(shuō)的Actuator通常用于應(yīng)用程序本身運(yùn)行情況的監(jiān)控和操作,而@Controller更多的是業(yè)務(wù)層面運(yùn)用。通過(guò)與@Controller這么一對(duì)照,你可能更容易理解Actuator的作用了。

Actuator默認(rèn)功能

Actuator提供了一些默認(rèn)的REST接口,基于這些接口我們可以很方便的了解應(yīng)用程序的運(yùn)行狀況。其中某些端口比較敏感,需要在指定的權(quán)限下才能進(jìn)行訪問(wèn)。

通過(guò)Actuator可以監(jiān)控應(yīng)用程序的Health健康信息、Info應(yīng)用信息、HTTP Request跟蹤信息、Metrics信息、@RequestMapping的路徑信息、應(yīng)用程序的各種配置信息、程序請(qǐng)求的次數(shù)時(shí)間等各種信息。

這里暫且不做具體端點(diǎn)的解釋,因?yàn)椴煌陌姹具€是有所出入的。先來(lái)看一下將所有的端點(diǎn)打開(kāi),然后訪問(wèn)http://localhost:8080/actuator 能夠看到的端點(diǎn)信息。

至于你所使用的版本包含哪些端點(diǎn),也采用同樣的方法來(lái)進(jìn)行查看。

Spring Boot的集成

將Spring Boot Actuator集成到Spring Boot項(xiàng)目中是非常方便的,只需在pom文件中添加對(duì)應(yīng)的依賴即可:

 
 
 
 
  1.  
  2.     org.springframework.boot 
  3.     spring-boot-starter-actuator 
  4.  

 

這里采用的是Spring Boot 2.2.2.RELEASE版本。啟動(dòng)項(xiàng)目,訪問(wèn)http://localhost:8080/actuator 就可以看到目前可訪問(wèn)的端口列表信息了:

 
 
 
 
  1. "_links": { 
  2. "self": { 
  3. "href": "http://localhost:8080/actuator", 
  4. "templated": false 
  5. }, 
  6. "health-path": { 
  7. "href": "http://localhost:8080/actuator/health/{*path}", 
  8. "templated": true 
  9. }, 
  10. "health": { 
  11. "href": "http://localhost:8080/actuator/health", 
  12. "templated": false 
  13. }, 
  14. "info": { 
  15. "href": "http://localhost:8080/actuator/info", 
  16. "templated": false 

可以看出,當(dāng)前版本默認(rèn)支持self、health-path、health和info端點(diǎn)信息的訪問(wèn),其他信息是未對(duì)外開(kāi)放的。

此時(shí),如果需要查看像前面提到的全部的端點(diǎn),可在application配置文件中進(jìn)行如下配置:

 
 
 
 
  1. management: 
  2.   endpoints: 
  3.     web: 
  4.       exposure: 
  5.         include: '*' 
  6.     jmx: 
  7.       exposure: 
  8.         include: '*' 

這樣便可以看到所有的端點(diǎn)了。此種方式是針對(duì)Spring Boot 2.0以后的版本才起效。需要注意的是配置中的*是需要添加單引號(hào)或雙引號(hào)的。

另外,這種形式的配置也是不推薦的。這樣會(huì)將所有的端點(diǎn)對(duì)外暴露,而沒(méi)有進(jìn)行權(quán)限驗(yàn)證。建議的模式是,使用到哪些端點(diǎn),直接在include中明確指出。同時(shí),敏感操作還需要進(jìn)行認(rèn)證。

指定配置的形式如下:

 
 
 
 
  1. management: 
  2.   endpoints: 
  3.     web: 
  4.       exposure: 
  5.         include: health,info 
  6.     jmx: 
  7.       exposure: 
  8.         include: health,info 

不同的端點(diǎn)通過(guò)英文逗號(hào)分隔即可。

Endpoint的數(shù)據(jù)結(jié)構(gòu)

其實(shí)最開(kāi)始我們已經(jīng)看了/actuator返回的數(shù)據(jù)結(jié)構(gòu)了,這便是端點(diǎn)self的信息。在/actuator的返回信息中還可以看到其他可訪問(wèn)的端點(diǎn)的地址,比如這里訪問(wèn)http://localhost:8080/actuator/health ,結(jié)構(gòu)如下:

 
 
 
 
  1. "status": "UP" 

端點(diǎn)返回的結(jié)果為JSON格式,上面返回了status為UP的狀態(tài),也就是說(shuō)系統(tǒng)處于健康運(yùn)行當(dāng)中。當(dāng)然,針對(duì)其他端點(diǎn)的訪問(wèn),返回結(jié)果基本一致,這里就不逐一展示了。

停服操作

在上面的端點(diǎn)中,你會(huì)發(fā)現(xiàn)并沒(méi)有關(guān)閉服務(wù)的端點(diǎn)。是的,默認(rèn)情況下,即使include設(shè)置為“*”,依舊沒(méi)有開(kāi)啟shutdown這類影響服務(wù)的操作。

針對(duì)這類操作,我們先要設(shè)置其可用:

 
 
 
 
  1. management: 
  2.   endpoint: 
  3.     shutdown: 
  4.       enabled: true 
  5.   endpoints: 
  6.     web: 
  7.       exposure: 
  8.         include: '*' 
  9.     jmx: 
  10.       exposure: 
  11.         include: '*' 

此時(shí),再訪問(wèn)/actuator就可以看到/shutdown端點(diǎn)對(duì)應(yīng)的路徑了http://localhost:8080/actuator/shutdown 。

通過(guò)curl命令或postman等發(fā)送一個(gè)post請(qǐng)求到該端點(diǎn):

 
 
 
 
  1. curl -X "POST" "http://localhost:8080/actuator/shutdown" 

執(zhí)行之后,發(fā)現(xiàn)服務(wù)被關(guān)停了。類似停服的操作還有很多,比如restart、pause、restart等??筛鶕?jù)具體版本進(jìn)行配置,目前版本只發(fā)現(xiàn)有shutdown端點(diǎn),未restart、pause、restart等端點(diǎn)的配置項(xiàng)。

通過(guò)上述方式,SpringBoot應(yīng)用可以優(yōu)雅的關(guān)閉,但是存在很大的安全隱患,如果知道了ip、端口號(hào)后就可以模擬該請(qǐng)求停止服務(wù)了,因此需要增加一些安全限制。

  • management.endpoints.web.base-path 自定義shutdown的請(qǐng)求路徑;
  • management.server.address 設(shè)置為本地ip,防止遠(yuǎn)程訪問(wèn)該連接進(jìn)行關(guān)閉服務(wù);
  • management.server.port 自定義shutdown請(qǐng)求路徑的端口號(hào);

調(diào)整后的配置文件如下:

 
 
 
 
  1. management: 
  2.   endpoint: 
  3.     shutdown: 
  4.       enabled: true 
  5.   endpoints: 
  6.     web: 
  7.       exposure: 
  8.         include: '*' 
  9.     jmx: 
  10.       exposure: 
  11.         include: '*' 
  12.   server: 
  13.     # 自定義端口 
  14.     port: 8080 
  15.     # 不允許遠(yuǎn)程管理連接,安全性考慮 
  16.     address: 127.0.0.1 

當(dāng)然,如果此種方式并不適合你,還可以考慮引入spring-boot-starter-security,通過(guò)Spring Security來(lái)保證Actuator Endpoints的安全,此時(shí)再訪問(wèn)時(shí)就需要用戶名和密碼的驗(yàn)證了。關(guān)于Spring Security在本篇文章就不再拓展。

自定義Endpoint

默認(rèn)的端點(diǎn)雖然可以滿足大多數(shù)的需求,但一些特殊的需求還是需要能夠支持自定義端點(diǎn)的。自定義 Endpoint 端點(diǎn),只需要在我們的新建Bean上使用 @Endpoint 注解即可, Bean 中的方法就可以通過(guò) JMX 或者 HTTP 公開(kāi)。除此之外,還可以使用 @JmxEndpoint 或 @WebEndpoint 編寫(xiě) EndPoint。但這些 EndPoint 僅限于各自的公開(kāi)方式。例如,@WebEndpoint 僅通過(guò)HTTP公開(kāi),而不通過(guò)JMX公開(kāi)。

那么是不是類中所有的方法都支持對(duì)外公開(kāi)呢?很明顯不是的。Actuator提供了三個(gè)用于方法上的注解,只有加三個(gè)注解的方法才支持對(duì)外公開(kāi),并且每個(gè)注解都有支持它的HTTP method。

@ReadOperation對(duì)應(yīng)HTTP的GET請(qǐng)求,@WriteOperation對(duì)應(yīng)HTTP的POST請(qǐng)求,@DeleteOperation對(duì)應(yīng)HTTP的DELETE請(qǐng)求。

來(lái)看一個(gè)簡(jiǎn)單的使用實(shí)例:

 
 
 
 
  1. @Component 
  2. @Endpoint(id = "my") 
  3. public class EndpointCustom { 
  4.  
  5.    @ReadOperation 
  6.    public String endpointCustomRead(String content) { 
  7.       return "請(qǐng)求的內(nèi)容: " + content; 
  8.    } 
  9.  
  10.    @WriteOperation 
  11.    public String endpointCustomWrite(String content) { 
  12.       return "寫(xiě)的內(nèi)容: " + content; 
  13.    } 
  14.  
  15.    @DeleteOperation 
  16.    public String endpointCustomDelete(String content) { 
  17.       return "刪除的內(nèi)容: " + content; 
  18.    } 
  19.  

對(duì)應(yīng)GET請(qǐng)求:

 
 
 
 
  1. curl -X GET http://localhost:8080/actuator/my?content=endpointGet 

執(zhí)行之后,會(huì)返回信息“請(qǐng)求的內(nèi)容: endpointGet”。

同樣的POST請(qǐng)求為:

 
 
 
 
  1. curl -X POST http://localhost:8080/actuator/my?content=endpointPost 

DELETE請(qǐng)求為:

 
 
 
 
  1. curl -X DELETE http://localhost:8080/actuator/my?content=endpointDELETE 

上面只是簡(jiǎn)單自定義實(shí)例,根據(jù)具體的業(yè)務(wù)場(chǎng)景,可以定義更加豐富的端點(diǎn)實(shí)現(xiàn)。

小結(jié)

通過(guò)本篇我們了解了Spring Boot集成 Actuator的基本操作。集成起來(lái)非常簡(jiǎn)單,因?yàn)镾pring Boot已經(jīng)幫我們做了大多數(shù)的事情,我們只需要有針對(duì)性的進(jìn)行配置即可。對(duì)于預(yù)定義端點(diǎn)無(wú)法滿足業(yè)務(wù)需求的情況,還可以通過(guò)自定義的形式來(lái)實(shí)現(xiàn)特殊化處理。學(xué)習(xí)Actuator最重要的點(diǎn)在于知道它的運(yùn)用場(chǎng)景。

本文完整源碼地址:https://github.com/secbr/springboot-all/tree/master/springboot-actuator


網(wǎng)站題目:SpringBootActuator集成,難的是靈活運(yùn)用!
當(dāng)前網(wǎng)址:http://www.5511xx.com/article/cciohph.html