上一篇文章《Spring Boot(十九):使用 Spring Boot Actuator 監控應用》介紹了 Spring Boot Actuator 的使用,Spring Boot Actuator 提供了對單個 Spring Boot 的監控,資訊包含:應用狀態、記憶體、執行緒、堆疊等等,比較全面的監控了 Spring Boot 應用的整個生命週期。
但是這樣監控也有一些問題:第一,所有的監控都需要呼叫固定的介面來檢視,如果全面檢視應用狀態需要呼叫很多介面,並且介面返回的 Json 資訊不方便運營人員理解;第二,如果 Spring Boot 應用叢集非常大,每個應用都需要呼叫不同的介面來檢視監控資訊,操作非常繁瑣低效。在這樣的背景下,就誕生了另外一個開源軟體:Spring Boot Admin。
什麼是 Spring Boot Admin?Spring Boot Admin 是一個管理和監控 Spring Boot 應用程式的開源軟體。每個應用都認為是一個客戶端,通過 HTTP 或者使用 Eureka 註冊到 admin server 中進行展示,Spring Boot Admin UI 部分使用 VueJs 將資料展示在前端。
這篇文章給大家介紹如何使用 Spring Boot Admin 對 Spring Boot 應用進行監控。
監控單體應用這節給大家展示如何使用 Spring Boot Admin 監控單個 Spring Boot 應用。
Admin Server 端專案依賴
<dependencies> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency></dependencies>
配置檔案
server.port=8000
服務端設定埠為:8000。
啟動類
@Configuration@EnableAutoConfiguration@EnableAdminServerpublic class AdminServerApplication { public static void main(String[] args) { SpringApplication.run(AdminServerApplication.class, args); }}
完成上面三步之後,啟動服務端,瀏覽器訪問http://localhost:8000可以看到以下介面:
Admin Client 端專案依賴
<dependencies> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency></dependencies>
配置檔案
server.port=8001spring.application.name=Admin Clientspring.boot.admin.client.url=http://localhost:8000 management.endpoints.web.exposure.include=*
spring.boot.admin.client.url 配置 Admin Server 的地址management.endpoints.web.exposure.include=* 開啟客戶端 Actuator 的監控。
啟動類
@SpringBootApplicationpublic class AdminClientApplication { public static void main(String[] args) { SpringApplication.run(AdminClientApplication.class, args); }}
配置完成之後,啟動 Client 端,Admin 服務端會自動檢查到客戶端的變化,並展示其應用
通過上圖可以看出,Spring Boot Admin 以圖形化的形式展示了應用的各項資訊,這些資訊大多都來自於 Spring Boot Actuator 提供的介面。
監控微服務如果我們使用的是單個 Spring Boot 應用,就需要在每一個被監控的應用中配置 Admin Server 的地址資訊;如果應用都註冊在 Eureka 中就不需要再對每個應用進行配置,Spring Boot Admin 會自動從註冊中心抓取應用的相關資訊。
如果我們使用了 Spring Cloud 的服務發現功能,就不需要在單獨新增 Admin Client 客戶端,僅僅需要 Spring Boot Server ,其它內容會自動進行配置。
接下來我們以 Eureka 作為服務發現的示例來進行演示,實際上也可以使用 Consul 或者 Zookeeper。
1、服務端和客戶端新增 spring-cloud-starter-eureka 到包依賴中
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
2、啟動類添加註解
@Configuration@EnableAutoConfiguration@EnableDiscoveryClient@EnableAdminServerpublic class SpringBootAdminApplication { public static void main(String[] args) { SpringApplication.run(SpringBootAdminApplication.class, args); } @Configuration public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().permitAll() .and().csrf().disable(); } }}
使用類 SecurityPermitAllConfig 關閉了安全驗證。
3、在客戶端中配置服務發現的地址
eureka: instance: leaseRenewalIntervalInSeconds: 10 health-check-url-path: /actuator/health metadata-map: startup: ${random.int} #needed to trigger info and endpoint update after restart client: registryFetchIntervalSeconds: 5 serviceUrl: defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/management: endpoints: web: exposure: include: "*" endpoint: health: show-details: ALWAYS
重啟啟動服務端和客戶端之後,訪問服務端的相關地址就可以看到監控頁面了。