一、什么是Actuator?
當一個SpringBoot項目運行的時候,我們可能需要對這個項目進行實時監控,actuator是一個監控工具包,用來在程序運行時監控運行數據,開發者可以使用http端點或jmx來管理和監控應用程序的健康狀況、應用信息、內存使用狀況等。web服務端點是指您的程序用來和其他應用程序進行通信的url地址。
在SpringBoot中,端點(endpoints)可用於監控應用及與應用進行交互,Spring Boot包含很多內置的端點,你也可以添加自己的。例如,health端點提供了應用的基本健康信息。每個端點都可以啟用或禁用。這控制着端點是否被創建,並且它的bean是否存在於應用程序上下文中。要遠程訪問端點,除了啟用端點,還必須通過JMX或HTTP進行暴露。大部分應用選擇HTTP方式暴露,端點的ID映射到一個帶/actuator
前綴的URL。
SpringBoot2的端點默認根路徑已經由 “/” 調整到了 “/actuator“ 下,可以在配置文件application.yml中配置根路徑:management.endpoints.web.base-path=/ 。SpringBoot內置了如下一些端點:
在web項目中還可以使用如下端點:
二、Actuator的使用
1、引入jar包:使用Actuator需要在springboot項目中引入jar包,Maven引入方式如下
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2、啟用端點:默認情況下,除shutdown以外的所有端點均已啟用。要配置單個端點的啟用
,請使用management.endpoint.<id>.enabled
屬性。配置舉例如下
#啟用端點 management:
endpoints:
enabled-by-default:false #全局配置,關閉所有端點 endpoint: #單一端點配置 shutdown: enabled:true #啟用shutdown端點
3、暴露端點:要遠程訪問端點,必須通過JMX或HTTP進行暴露,配置舉例如下
#暴露監控端點 management: endpoints:
web: #http方式暴露
base-path:/actuator #actuator提供的api接口根路徑 exposure: include: "*" #需要開放的端點,默認只打開health、info,*表示所有
exclude: #需要排除的端點
jmx: #jmx方式暴露
exposure:
include: "*"
exclude:
注意:禁用的端點將從應用程序上下文中完全刪除。如果您只想更改端點公開(對外暴露)的技術,請改為使用include
和exclude
屬性。由於端點可能包含敏感信息,因此應仔細考慮何時公開它們。下表顯示了內置端點的默認暴露情況。
4、端點訪問路徑:默認情況下,端點通過使用端點的ID在/actuator
路徑下的HTTP上公開。例如,beans
端點暴露在/actuator/beans
下。如果要將端點映射到其他路徑,則可以使用management.endpoints.web.path-mapping
屬性。另外,如果您想更改基本路徑,則可以使用management.endpoints.web.base-path
。
5、端點跨域訪問:默認情況下,CORS支持處於禁用狀態,只有在設置了management.endpoints.web.cors.allowed-origins
屬性后才能啟用。以下配置允許來自example.com域的GET和POST調用:
management: endpoints: web: cors: allowed-origins = http://example.com allowed-methods = POST,GET
6、自定義端點:如果添加用@Endpoint注解
的@Bean
,則任何使用@ReadOperation
,@WriteOperation
或@DeleteOperation
注釋的方法都會自動通過JMX公開,並且也可以通過HTTP在Web應用程序中通過HTTP公開。也可以使用Jersey,Spring MVC或Spring WebFlux通過HTTP公開端點。
7、端點操作:
端點上的操作通過參數接收輸入,這些參數的值取自URL的查詢參數和JSON請求主體。通過JMX公開時,參數將映射到MBean操作的參數。參數默認是必需的,可以通過使用@org.springframework.lang.Nullable
注釋使其成為可選的。
傳遞給端點操作方法的參數在必要時會自動轉換為所需的類型。在調用操作方法之前,使用ApplicationConversionService
的實例將通過JMX或HTTP請求接收到的輸入轉換為所需的類型。