1. 程式人生 > 程式設計 >一文搞懂並學會使用SpringBoot的Actuator執行狀態監控元件的詳細教程

一文搞懂並學會使用SpringBoot的Actuator執行狀態監控元件的詳細教程

目錄閒言碎語:背景Actuator介紹Rest方法來檢視Actuatorpom.xml引入Actuator依賴配置application.yml執行專案Actuator配合SpringBootSecurity配置application.xml執行專案配置關閉專案API埠配置application.yml命令列執行post關閉指令附:Actuator埠資訊附:SpringBoot自帶的健康指示器贈言

閒言碎語:

  最近刷抖音,看到了星爺的很多電影,感嘆星爺給後世留下了很多的經典作品,我就在想,作為一名程式設計師,如何留下影響後人的經典傳世之作呢,不經意間看到了一篇大佬的文章,已經近百萬人瀏覽,這就是對後人的一種影響,然後就有了寫這篇部落格的衝動,結合最近在學習的SpringCloud,對每一個元件的原理和使用都進行深度的學習和理解,然後將心得寫在部落格裡,如果有不對的地方還請大佬進行指正,小弟不勝感激

背景

  微服務之後,系統結構拆分隨著業務發展越來越微型化,也意味著節點會呈現幾何數量級增長。每個一個節點都是系統組成部分,如何保持如此多節點的可用性是一件非常有挑戰的工作。
  全方位監控變得越來越重要,當我們遇到bug時,總是希望可以看到更多資訊,因此一般我們選用的服務開發框架都需要有方便又強大的監控功能支援。
  Spring Boot Actuator便可以幫助我們全方面監控應用節點.
  比如健康檢查、審計、統計、HTTP追蹤等。我們可以通過JMX或者HTTP endpoints來獲得。spring Boot Admin配合下可以進行頁面展示,也和可以與其它外部應用系統系統整合。

Actuator介紹

  Actuator是SpringBoot的一個非常重要的功能,Actuator 為開發人員提供了SpringBoot執行狀態資訊,通過Actuator可以檢視程式的執行狀態的資訊。同時它提供了執行狀態的監控功能,Actuator的監控功能可以通過Rest、遠端shell、JMX方式獲得,首先我們介紹Rest方法來檢視Actuator的節點方法,這種是十分簡單的方法。
  Spring Boot Actuator 的關鍵特性是在應用程式裡提供眾多的Web節點,通過這些節點可以實時地瞭解應用程式的執行狀況。有了Actuator,你可以知道Bean在Spring應用程式上下文裡是如何組裝在一 起的,並且可以獲取環境屬性的資訊和執行時度量資訊等。

Rest方法來檢視Actuator

pom.xml引入Actuator依賴

首先在pom.xml種引入spring-boot-starter-actuator依賴,程式碼如下:

<dependency>
 <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
   <version>2.3.3.RELEASE</version>
</dependency>

配置application.yml

  在application.yml中配置management.port和management.security.enabled,這倆是向外暴露actuator的埠和actuator的非安全驗證方式。
  在這裡指定actuator對外暴露的RestApi埠為9091,Spring1.5x預設採用了Actuator安全驗證,為了能夠在瀏覽器上展示效果,不做安全驗證,將其設定為false。

management:
 server:
 port: 9091 # 對外暴露API介面埠為9001
 servlet:
  context-path: /sys
 security:
 enabled: false # 這是為了在瀏覽器上展示效果 所以設定為false
 endpoints:
 web:
  exposure:
  include: "*" # include表示需要暴露的endpoint,配置時使用“,”隔開,你也可以用*讓所有endpoint暴露出來
 endpoint:
  health:
  enabled: true
  show-details: always # health endpoint只展示了簡單的UP和DOWN狀態。為了獲得健康檢查中所有指標的詳細資訊,可以設定其展示詳細資訊。
  shutdown:
  enabled: true

  management.endpoint.health.show-details預設值為never,除了always之外還有when-authorized。
  exclude表示在暴露endpoint時,排除掉哪些,同樣使用“,”隔開,例如
management.endpoints.web.exposure.exclude=info # 排除info

  注意:如果不指定會預設採用程式的啟動埠,這樣做的目的就是將監控埠與專案埠進行區分。
  不配置監控埠:localhost:8080/actuator/
  配置監控埠:localhost:9091/sys/actuator/
  特別注意:在2.0之後的版本訪問地址必須要加上/actuator/才可以

執行專案

  就可以看到詳細的資訊了,以health為例:

請求路徑:http://localhost:9091/sys/actuator/health

{
	status: "UP",components: {
		diskSpace: {
		status: "UP",details: {
				total: 161062318080,free: 103786217472,threshold: 10485760,exists: true
			}
		},ping: {
			status: "UP"
		}
 	}
}

Actuator配合SpringBootSecurity

  actuator可以配合security進行許可權控制,從而保護endpint。
  首先在pom.xml中引入SpringBootSecurity依賴:

<dependency>
 <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>

配置application.xml

  新增:

spring.security.user.name = admin
spring.security.user.password = admin

  這樣在我們訪問localhost:9091/sys/actuator/的時候就會自動跳轉到安全登入頁面,提示我們輸入使用者名稱和密碼。

 security:
 user:
  name: admin
  password: admin

執行專案

  我們的請求路徑由http://localhost:9091/sys/actuator/自動變成了http://localhost:9091/sys/login,輸入配置好的使用者名稱和密碼,就可以看到對應的各種Api埠資訊。

在這裡插入圖片描述

配置關閉專案API埠

配置application.yml

  在endpoint後配置shutdown埠為true,預設情況下系統是關閉該埠,防止他人的惡意關閉專案,是出於對系統的一種保護行為。

endpoint:
  health:
  enabled: true
  show-details: always
  shutdown:
  enabled: true

注意:在這裡我們利用cmd視窗以命令列的形式來模擬post請求,如果在瀏覽器直接請求的話會報錯,後臺會提示
Request method ‘GET' not supported。也就是說不支援get請求,我們需要用post。

命令列執行post關閉指令

  在命令列中輸入:

$ curl -X POST localhost:9091/actuator/shutdown

  然後命令列提示:

{“message”:“Shutting down,bye…”}

  專案就處於關閉狀態了!

附:Actuator埠資訊

型別 Api埠 描述
get auditevents 顯示應用暴露的審計事件 (比如認證進入、訂單失敗)
get info 顯示應用的基本資訊
get health 顯示應用的健康狀態
get metrics 顯示應用多樣的度量資訊
get loggers 顯示和修改配置的loggers
get logfile 返回log file中的內容(如果logging.file或者logging.path被設定)
get httptrace 顯示Liquibase 資料庫遷移的纖細資訊
get env 顯示當前的環境特性
get flyway 顯示資料庫遷移路徑的詳細資訊
get liquidbase 顯示資料庫遷移路徑的詳細資訊
post shutdown 讓你逐步關閉應用
get mappings 顯示所有的@RequestMapping路徑
get scheduledtasks 顯示應用中的排程任務
get threaddump 執行一個執行緒dump
get heapdump 返回一個GZip壓縮的JVM堆dump

附:SpringBoot自帶的健康指示器

指示器 內容
ApplicationHealthIndicator none 永遠為UP
DataSourceHealthIndicator db 如果資料庫能連上,則為up,否則為down
DiskSpaceHealthIndicator diskSpace 如果可用空間大於閾值,則為up和可用磁碟空間,如果空間不足,則為down
JmsHealthIndicator jms 如果能連上訊息代理,則為up,否則為down
MailHealthIndicator mail 如果能連上郵件伺服器,則為up和郵件主機和埠,否則為down
MangoHealthIndicator mongo 如果能連上MangoDB伺服器,則為up和MongoDB伺服器版本,否則為down
RabbitHealthIndicator rabbit 如果能連上RabbitMQ伺服器,則為up和MongoDB伺服器版本,否則為down
RedisHealthIndicator redis 如果能連上Redis伺服器,則為up和伺服器版本,否則為down
SolrHealthIndicator solr 如果能連上Solr伺服器,則為up和伺服器版本,否則為down

總結

到此這篇關於一文搞懂並學會使用SpringBoot的Actuator執行狀態監控元件的文章就介紹到這了,更多相關spring boot 執行狀態監控內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!