Spring Boot Admin 可以對(duì)SpringBoot應(yīng)用的各項(xiàng)指標(biāo)進(jìn)行監(jiān)控龟梦,可以作為微服務(wù)架構(gòu)中的監(jiān)控中心來(lái)使用矗晃,本文將對(duì)其用法進(jìn)行詳細(xì)介紹。
SpringBoot應(yīng)用可以通過(guò)Actuator來(lái)暴露應(yīng)用運(yùn)行過(guò)程中的各項(xiàng)指標(biāo)望侈,Spring Boot Admin通過(guò)這些指標(biāo)來(lái)監(jiān)控SpringBoot應(yīng)用龄句,然后通過(guò)圖形化界面呈現(xiàn)出來(lái)。Spring Boot Admin不僅可以監(jiān)控單體應(yīng)用浩姥,還可以和Spring Cloud的注冊(cè)中心相結(jié)合來(lái)監(jiān)控微服務(wù)應(yīng)用挑随。
Spring Boot Admin 可以提供應(yīng)用的以下監(jiān)控信息:
監(jiān)控應(yīng)用運(yùn)行過(guò)程中的概覽信息;
度量指標(biāo)信息勒叠,比如JVM兜挨、Tomcat及進(jìn)程信息膏孟;
環(huán)境變量信息,比如系統(tǒng)屬性拌汇、系統(tǒng)環(huán)境變量以及應(yīng)用配置信息柒桑;
查看所有創(chuàng)建的Bean信息;
查看應(yīng)用中的所有配置信息噪舀;
查看應(yīng)用運(yùn)行日志信息幕垦;
查看JVM信息;
查看可以訪問(wèn)的Web端點(diǎn)傅联;
查看HTTP跟蹤信息先改。
這里我們創(chuàng)建一個(gè)admin-server模塊來(lái)作為監(jiān)控中心演示其功能。
在pom.xml中添加相關(guān)依賴(lài):
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId></dependency>Copy to clipboardErrorCopied
在application.yml中進(jìn)行配置:
spring:
? application:
? ? name: admin-server
server:
? port: 9301Copy to clipboardErrorCopied
在啟動(dòng)類(lèi)上添加@EnableAdminServer來(lái)啟用admin-server功能:
@EnableAdminServer@SpringBootApplicationpublicclassAdminServerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(AdminServerApplication.class,args);}}Copy to clipboardErrorCopied
這里我們創(chuàng)建一個(gè)admin-client模塊作為客戶(hù)端注冊(cè)到admin-server蒸走。
在pom.xml中添加相關(guān)依賴(lài):
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId></dependency>Copy to clipboardErrorCopied
在application.yml中進(jìn)行配置:
spring:
? application:
? ? name: admin-client
? boot:
? ? admin:
? ? ? client:
? ? ? ? url: http://localhost:9301 #配置admin-server地址
server:
? port: 9305
management:
? endpoints:
? ? web:
? ? ? exposure:
? ? ? ? include: '*'
? endpoint:
? ? health:
? ? ? show-details: always
logging:
? file: admin-client.log #添加開(kāi)啟admin的日志監(jiān)控Copy to clipboardErrorCopied
啟動(dòng)admin-server和admin-client服務(wù)仇奶。
訪問(wèn)如下地址打開(kāi)Spring Boot Admin的主頁(yè):http://localhost:9301
點(diǎn)擊wallboard按鈕,選擇admin-client查看監(jiān)控信息比驻;
監(jiān)控信息概覽该溯;
度量指標(biāo)信息,比如JVM别惦、Tomcat及進(jìn)程信息狈茉;
環(huán)境變量信息,比如系統(tǒng)屬性掸掸、系統(tǒng)環(huán)境變量以及應(yīng)用配置信息氯庆;
查看所有創(chuàng)建的Bean信息;
查看應(yīng)用中的所有配置信息扰付;
查看日志信息堤撵,需要添加以下配置才能開(kāi)啟;
logging:
? file: admin-client.log #添加開(kāi)啟admin的日志監(jiān)控Copy to clipboardErrorCopied
查看JVM信息羽莺;
查看可以訪問(wèn)的Web端點(diǎn)实昨;
查看HTTP跟蹤信息;
Spring Boot Admin結(jié)合Spring Cloud 注冊(cè)中心使用盐固,只需將admin-server和注冊(cè)中心整合即可荒给,admin-server 會(huì)自動(dòng)從注冊(cè)中心獲取服務(wù)列表,然后挨個(gè)獲取監(jiān)控信息刁卜。這里以Eureka注冊(cè)中心為例來(lái)介紹下該功能志电。
在pom.xml中添加相關(guān)依賴(lài):
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>Copy to clipboardErrorCopied
在application-eureka.yml中進(jìn)行配置,只需添加注冊(cè)中心配置即可:
spring:
? application:
? ? name: admin-server
server:
? port: 9301
eureka:
? client:
? ? register-with-eureka: true
? ? fetch-registry: true
? ? service-url:
? ? ? defaultZone: http://localhost:8001/eureka/Copy to clipboardErrorCopied
在啟動(dòng)類(lèi)上添加@EnableDiscoveryClient來(lái)啟用服務(wù)注冊(cè)功能:
@EnableDiscoveryClient@EnableAdminServer@SpringBootApplicationpublicclassAdminServerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(AdminServerApplication.class,args);}}Copy to clipboardErrorCopied
在pom.xml中添加相關(guān)依賴(lài):
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>Copy to clipboardErrorCopied
在application-eureka.yml中進(jìn)行配置长酗,刪除原來(lái)的admin-server地址配置溪北,添加注冊(cè)中心配置即可:
spring:
? application:
? ? name: admin-client
server:
? port: 9305
management:
? endpoints:
? ? web:
? ? ? exposure:
? ? ? ? include: '*'
? endpoint:
? ? health:
? ? ? show-details: always
logging:
? file: admin-client.log #添加開(kāi)啟admin的日志監(jiān)控
eureka:
? client:
? ? register-with-eureka: true
? ? fetch-registry: true
? ? service-url:
? ? ? defaultZone: http://localhost:8001/eureka/Copy to clipboardErrorCopied
在啟動(dòng)類(lèi)上添加@EnableDiscoveryClient來(lái)啟用服務(wù)注冊(cè)功能:
@EnableDiscoveryClient@SpringBootApplicationpublicclassAdminClientApplication{publicstaticvoidmain(String[]args){SpringApplication.run(AdminClientApplication.class,args);}}Copy to clipboardErrorCopied
啟動(dòng)eureka-server桐绒,使用application-eureka.yml配置啟動(dòng)admin-server夺脾,admin-client之拨;
查看注冊(cè)中心發(fā)現(xiàn)服務(wù)均已注冊(cè):http://localhost:8001/
查看Spring Boot Admin 主頁(yè)發(fā)現(xiàn)可以看到服務(wù)信息:http://localhost:9301
我們可以通過(guò)給admin-server添加Spring Security支持來(lái)獲得登錄認(rèn)證功能。
創(chuàng)建admin-security-server模塊
在pom.xml中添加相關(guān)依賴(lài):
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.1.5</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>Copy to clipboardErrorCopied
在application.yml中進(jìn)行配置咧叭,配置登錄用戶(hù)名和密碼蚀乔,忽略admin-security-server的監(jiān)控信息:
spring:
? application:
? ? name: admin-security-server
? security: # 配置登錄用戶(hù)名和密碼
? ? user:
? ? ? name: macro
? ? ? password: 123456
? boot:? # 不顯示admin-security-server的監(jiān)控信息
? ? admin:
? ? ? discovery:
? ? ? ? ignored-services: ${spring.application.name}
server:
? port: 9301
eureka:
? client:
? ? register-with-eureka: true
? ? fetch-registry: true
? ? service-url:
? ? ? defaultZone: http://localhost:8001/eureka/Copy to clipboardErrorCopied
對(duì)SpringSecurity進(jìn)行配置,以便admin-client可以注冊(cè):
/**
* Created by macro on 2019/9/30.
*/@ConfigurationpublicclassSecuritySecureConfigextendsWebSecurityConfigurerAdapter{privatefinalStringadminContextPath;publicSecuritySecureConfig(AdminServerPropertiesadminServerProperties){this.adminContextPath=adminServerProperties.getContextPath();}@Overrideprotectedvoidconfigure(HttpSecurityhttp)throwsException{SavedRequestAwareAuthenticationSuccessHandlersuccessHandler=newSavedRequestAwareAuthenticationSuccessHandler();successHandler.setTargetUrlParameter("redirectTo");successHandler.setDefaultTargetUrl(adminContextPath+"/");http.authorizeRequests()//1.配置所有靜態(tài)資源和登錄頁(yè)可以公開(kāi)訪問(wèn).antMatchers(adminContextPath+"/assets/**").permitAll().antMatchers(adminContextPath+"/login").permitAll().anyRequest().authenticated().and()//2.配置登錄和登出路徑.formLogin().loginPage(adminContextPath+"/login").successHandler(successHandler).and().logout().logoutUrl(adminContextPath+"/logout").and()//3.開(kāi)啟http basic支持菲茬,admin-client注冊(cè)時(shí)需要使用.httpBasic().and().csrf()//4.開(kāi)啟基于cookie的csrf保護(hù).csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())//5.忽略這些路徑的csrf保護(hù)以便admin-client注冊(cè).ignoringAntMatchers(adminContextPath+"/instances",adminContextPath+"/actuator/**");}}Copy to clipboardErrorCopied
修改啟動(dòng)類(lèi)吉挣,開(kāi)啟AdminServer及注冊(cè)發(fā)現(xiàn)功能:
@EnableDiscoveryClient@EnableAdminServer@SpringBootApplicationpublicclassAdminSecurityServerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(AdminSecurityServerApplication.class,args);}}Copy to clipboardErrorCopied
啟動(dòng)eureka-server,admin-security-server婉弹,訪問(wèn)Spring Boot Admin 主頁(yè)發(fā)現(xiàn)需要登錄才能訪問(wèn):http://localhost:9301
springcloud-learning
├── eureka-server -- eureka注冊(cè)中心
├── admin-server -- admin監(jiān)控中心服務(wù)
├── admin-client -- admin監(jiān)控中心監(jiān)控的應(yīng)用服務(wù)
└── admin-security-server -- 帶登錄認(rèn)證的admin監(jiān)控中心服務(wù)Copy to clipboardErrorCopied