1. 程式人生 > >SpringBoot使用Actuator進行健康監控

SpringBoot使用Actuator進行健康監控

Actuator是Springboot提供的用來對應用系統進行自省和監控的功能模組,藉助於Actuator開發者可以很方便地對應用系統某些監控指標進行檢視、統計等。本文將通過示例來對如何在Springboot中使用Actuator監控做一個簡單介紹,更多內容請移步官方文件

新增依賴與配置

在Springboot中使用Actuator監控非常簡單,只需要在工程POM檔案中引入spring-boot-starter-actuator依賴即可。
		<!-- 引入Actuator監控依賴 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
在本專案中,除了引入Actuator依賴之外還額外引入了JDBC依賴(用來對資料來源健康狀態進行示例)和WEB依賴(啟用WEB方式檢視監控資訊),完整的依賴配置如下。
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.6.RELEASE</version>
	</parent>

	<dependencies>
		<!-- 新增MySQL依賴 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
		<!-- 新增JDBC依賴 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- 引入Actuator監控依賴 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
	</dependencies>
同時,application.properties核心配置檔案中除了定義資料來源外,還需要新增 management.security.enabled=false 配置。
#########################################################
###   Actuator Monitor  --   Actuator configuration   ###
#########################################################
management.security.enabled=false

#########################################################
###  Spring DataSource  -- DataSource configuration   ###
#########################################################
spring.datasource.url=jdbc:mysql://localhost:3306/dev1?useUnicode=true&characterEncoding=utf8
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
注意:若在核心配置檔案中未新增 management.security.enabled=false 配置,將會導致使用者在訪問部分監控地址時訪問受限,報401未授權錯誤。

Actuator監控項

下表包含了Actuator提供的主要監控項。
下面逐個對每一個監控項進行舉例介紹。
/autoconfig用來檢視自動配置的使用情況,包括:哪些被應用、哪些未被應用以及它們未被應用的原因、哪些被排除。
/configprops可以顯示一個所有@ConfigurationProperties的整理列表。
/beans可以顯示Spring容器中管理的所有Bean的資訊。
/dump用來檢視應用所啟動的所有執行緒,每個執行緒的監控內容如下圖所示。
/env用來檢視整個應用的配置資訊,使用/env/[name]可以檢視具體的配置項。
/health用來檢視整個應用的健康狀態,包括磁碟空間使用情況、資料庫和快取等的一些健康指標。
此外,Springboot還允許使用者自定義健康指標,只需要定義一個類實現HealthIndicator介面,並將其納入到Spring容器的管理之中。
@Component
public class MyHealthIndicator implements HealthIndicator{

	@Override
	public Health health() {
		return Health.down().withDetail("error", "spring boot error").build();
	}

}
/info可以顯示配置檔案中所有以info.開頭或與Git相關的一些配置項的配置資訊。
/mappings用來檢視整個應用的URL地址對映資訊。
/metrics用來檢視一些監控的基本指標,也可以使用/metrics/[name]檢視具體的指標。
此外,Springboot還為提供了CounterService和GaugeService兩個Bean來供開發者使用,可以分別用來做計數和記錄double值。
@RestController
public class ActuatorController {

	@Autowired
	private CounterService counterService;

	@Autowired
	private GaugeService gaugeService;

	@GetMapping("/home")
	public String home() {
		//請求一次瀏覽數加1
		counterService.increment("home browse count");
		//請求時將app.version設定為1.0
		gaugeService.submit("app.version", 1.0);
		return "Actuator home";
	}

}
/shutdown是一個POST請求,用來關閉應用,由於操作比較敏感,預設情況下該請求是被禁止的,若要開啟需在配置檔案中新增以下配置:
endpoints.shutdown.enabled: true
/trace用來監控所有請求的追蹤資訊,包括:請求時間、請求頭、響應頭、響應耗時等資訊。

Actuator監控管理

開啟或關閉

Actuator監控的所有專案都定義在spring-boot-actuator-x.x.x.RELEASE.jar的org.springframework.boot.actuate.endpoint包中,包含以下Endpoint。
這些Endpoint都繼承自AbstractEndpoint,AbstractEndpoint中定義了兩個重要的屬性:enabled和sensitive。
其中,enabled用來開啟或關閉該監控項,語法為:endpoints.[endpoint_name].enabled=false/true,以關閉/autoconfig監控項為例,其配置如下。
endpoints.autoconfig.enabled=false
sensitive用來配置該監控項是否屬於敏感資訊,訪問敏感資訊需要使用者具有ACTUATOR角色許可權,或者使用以下配置關閉安全限制。
management.security.enabled=false

埠與地址

除了使用與應用相同的埠訪問監控地址外,我們還可以在配置檔案中增加 management.port 配置項來自己指定監控的請求埠。
management.port=9090
還可以通過 management.address 配置項來指定可以請求監控的IP地址,比如只能通過本機監控,可以設定 management.address = 127.0.0.1 。