您好,登錄后才能下訂單哦!
今天小編給大家分享一下SpringBoot中怎么對actuator進行關閉的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
management: endpoint: health: show-details: ALWAYS endpoints: enabled-by-default: false #關閉監控 web: exposure: include: '*'
Spring Boot的Actuator。它提供了很多生產級的特性,比如監控和度量Spring Boot應用程序。Actuator的這些特性可以通過眾多REST端點、遠程shell和JMX獲得。
【使用環境】
【1】SpringBoot版本2.5.0、JDK11
【2】服務端口 9999
添加依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
啟動項目,訪問/actuator端點,SpringBoot2.X版本默認只開啟了如下端點
可以通過下面的方式開啟其他的端點,如果需要關閉某些端點可以在exclude中設置。
management: endpoints: web: exposure: include: "*" exclude: ""
重新啟動項目,可以看到現在展示的端點增加了很多
/autoconfig和/conditions 獲取自動配置條件
提供了一份自動配置報告,記錄哪些自動配置條件通過了,哪些沒通過。新版本已經調整為conditions。Spring Boot自動配置構建于Spring的條件化配置之上。它提供了眾多帶有@Conditional注解的配置類,根據條件決定是否要自動配置這些Bean。/autoconfig端點提供了一個報告,列出了計算過的所有條件,根據條件是否通過進行分組。
端點:http://localhost:9999/actuator/conditions
【舉例】
上面是失敗的一個條件示例,如圖所示是JdbcTemplate,這個類可以幫助我們操作數據庫。因為未引入相關的依賴類所以正如它的提示信息所說:
“message”: “@ConditionalOnClass did not find required class ‘org.springframework.jdbc.core.JdbcTemplate’”
檢查Classpath沒有要求的JdbcTemplate條件不成立,則不會進行自動配置
/beans 獲得Bean裝配報告
要了解應用程序中Spring上下文的情況,最重要的端點就是/beans。它會返回一個JSON文檔,描述上下文里每個Bean的情況,包括其Java類型以及注入的其他Bean。
請求端點:/actuator/beans
/env端點查看配置屬性
/env端點會生成應用程序可用的所有環境屬性的列表,無論這些屬性是否用到。這其中包括環境變量、JVM屬性、命令行參數,以及applicaition.properties或application.yml文件提供的屬性。
端點:/actuator/env
/env提供了一些安全策略保護配置的隱私性。為了避免此類信息暴露到/env里,所有名為password、secret、key(或者名字中最后一段是這些)的屬性在/env里都會加上“*”,參考如下:
/mapping請求URL映射
/mapping端點展示了所有@RequestMapping 請求路徑
請求端點:/actuator/mappings
【測試接口】
@GetMapping(value = "/hello", produces = "application/json;charset=utf-8") public String hello(@RequestParam("name") String name) { return "hello world"; }
每個映射的值都有兩個屬性:bean和method。bean屬性標識了Spring
Bean的名字,映射源自這個Bean。method屬性是映射對應方法的全限定方法簽名。
/metrics運行時指標監控
/metrics為我們提供了對運行時度量情況的一個監控,能夠在運行時快速檢查應用程序。
端點:/actuator/metrics
主要的監控事項如下:
/metrics端點會返回所有的可用度量值,但你也可能只對某個值感興趣。要獲取單個值,請求時可以在URL后加上對應的鍵名。
如上圖所示,查詢jvm最大內存,結果值大約為6G。
/httptrace 追蹤Web請求
/httptrace端點能報告所有Web請求的詳細信息,包括請求方法、路徑、時間戳以及請求和響應的頭信息。
【請求端點】/actuator/httptrace
默認情況下httptrace沒有啟用,它要求一個HttpTraceRepository 的對象Bean.
在系統中創建如下配置,提供一個HttpTraceRepository 類型的Bean,這里選擇的是InMemoryHttpTraceRepository內存存儲的方式。該方式默認提供最新的100條請求記錄。
import org.springframework.boot.actuate.trace.http.HttpTraceRepository; import org.springframework.boot.actuate.trace.http.InMemoryHttpTraceRepository; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class HttpTraceActuatorConfiguration { @Bean public HttpTraceRepository httpTraceRepository() { return new InMemoryHttpTraceRepository(); } }
/dump 導出線程快照
/dump端點會生成當前線程活動的快照。完整的線程導出報告里會包含應用程序的每個線程。其中包含很多線程的特定信息,還有線程相關的阻塞和鎖狀態。
【請求端點】/threaddump
【測試】
Thread thread = new Thread(() -> { try { Thread.sleep(1000000); } catch (InterruptedException e) { e.printStackTrace(); } }, "測試線程"); thread.start();
/shutdown 優雅的關閉應用程序
/shutdown可以讓應用服務優雅的關閉,默認是關閉的。假設你要關閉運行中的應用程序。比方說,在微服務架構中,你有多個微服務應用的實例運行在云上,其中某個實例有問題了,你決定關閉該實例并重啟這個有問題的應用程序。在這個場景中,Actuator的/shutdown端點就很有用了。
優雅的關閉和kill -9的方式是相對的,它不會粗暴的立馬關閉應用,而是會釋放相關鏈接以及執行SpringBoot容器停止后的一些操作,然后再關閉應用。
【端點】/actuator/shutdown 要求POST請求方式
【示例】
在應用中添加一個關閉前處理的鉤子方法
Runtime.getRuntime().addShutdownHook(new Thread(() -> { System.out.println("關閉應用,釋放資源"); }));
可以看到通過/actuator/shutdown關閉應用可以觸發這些關閉處理的鉤子函數,方便我們在應用停止時關閉一些連接以及做一些其他的處理。
整理
【1】上面實踐了一些Actuator端點示例,雖然Actuator提供的功能很強大,但是在如今的集群化,K8S容器化應用部署下,這些直接訪問某些應用的情況就變得很少了,比如監控Zipkin 、Spring Cloud Sleuth等等,內存監控這一塊K8S容器化平臺也有很多。但是,去學習實踐這樣的一個工具也是很值得的,如果后面有類似監控、關閉應用、獲取請求URL映射、獲取配置等等,那么我們就可以去看看Actuator是如何做的,學習和擴展。
【2】本次的學習時看的《SpringBoot實戰》書籍的學習筆記,該書Actuator章節后在后面也提及了很多進階的知識,因為具體應用場景不多,下面就簡單的整理下,把一些知識點記錄下來,如果后面需要在重點實踐學習下。
【3】《SpringBoot實戰》書籍關于Actuator介紹的一些使用可能在當下的版本中有些出入,這里貼上官方文檔地址,參考對比下https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.enabling
【4】Actuator通過REST端點提供了不少非常有用的信息。另一個深入運行中應用程序內部的方式是使用遠程shell。Spring Boot集成了CRaSH,一種能嵌入任意Java應用程序的shell。Spring Boot還擴展了CRaSH,添加了不少Spring Boot特有的命令,提供了與Actuator端點類似的功能。該工具附上應用上,會在啟動時提供一個訪問秘鑰,我們通過ssh user@localhost -p 2000 的方式就可以去訪問,并且執行一些命令去查看應用數據。
【5】除了REST端點和遠程shell,Actuator還把它的端點以MBean的方式發布了出來,可以通過JMX來查看和管理。使用JMX是管理Spring Boot應用程序的一個好方法,如果你已在用JMX管理應用程序中的其他MBean,則尤其如此。
【6】前面我們使用了Actuator所提供好的一些內置端點,我們也可以根據自己的需求擴展定制Actuator。
實際上,Actuator有多種定制方式,包括以下五項。
1:重命名端點。將默認的端點修改為我們自定義的端點地址。
2:啟用和禁用端點。
3:自定義度量信息。
4:創建自定義倉庫來存儲跟蹤數據。
5:插入自定義的健康指示器。
【7】到這里我們可以看到通過Actuator我們可以看到系統的很多信息,這對于開發者而言很好,但是在安全層面來說,如果不加以限制,那么系統的安全將會有很大隱患。Actuator的端點保護可以用和其他URL路徑一樣的方式——使用Spring Security。在Spring Boot應用程序中,這意味著將Security起步依賴作為構建依賴加入,然后讓安全相關的自動配置來保護應用程序,其中當然也包括了Actuator端點。舉例來說,你想要保護/shutdown端點,僅允許擁有ADMIN權限的用戶訪問。
以上就是“SpringBoot中怎么對actuator進行關閉”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。