SpringBootAdmin详解(SpringBoot2.0,基于Eureka的实
现)
Spring Boot Admin ⽤于监控基于 Spring Boot 的应⽤,它是在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI。
(⼀)简介
Spring Boot Admin 提供了很多功能,如显⽰ name、id 和 version,显⽰在线状态,Loggers 的⽇志级别管理,Threads 线程管理,Environment 管理等。
(⼆)Spring Boot Admin 是由服务端和客户端组成
在 Spring Boot 项⽬中,Spring Boot Admin 作为 Server 端,其他的要被监控的应⽤作为 Client 端,基于这种的配置如下步骤:
2.1 Server
2.1.1 添加相关依赖
<dependency>
<groupId&decentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.1.2 启动类添加注解,开启监控
@Configuration
@EnableAutoConfiguration
@EnableAdminServer
public class SpringBootAdminApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminApplication.class, args);
}
}
2.1.3 配置⽂件
server:
port: 8788
2.2 Client
2.2.1 添加相关依赖
<dependency>
<groupId&decentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.0.0</version>
</dependency>
2.2.2 配置⽂件
spring.boot.admin.client.url: "localhost:8788"
以上的配置,就可以实现 Spring Boot 项⽬中 Spring Boot Admin 监控其他应⽤了,但是这不是我们的重点,详细信息请参考官⽹⽂档:,我们的重点是在 Spring Cloud 中使⽤ Spring Boot Admin 监控 Spring Cloud 的服务,下⾯我们就详细的讲解在 Spring Cloud 中搭建 Spring Boot Admin
(三)在 Spring Cloud 中基于 Eureka 的 Spring Boot Admin 的搭建
3.1 启动之前的项⽬ eureka server,端⼝8761
3.2 新建 module(springboot-admin),创建步骤参考上篇
3.2.1 添加相关依赖,pom⽂件:
<dependency>
<groupId&decentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
</dependency>
由于项⽬中使⽤的是 spring boot 2.0 版本,所以这⾥要使⽤ spring boot admin 的最新版本(还未正式发布),本⼈测试使⽤ spring boot admin 2.0.0 版本会有问题。
3.2.2 启动类添加注解
@Configuration
@EnableAutoConfiguration
@EnableAdminServer
@EnableEurekaClient
public class SpringBootAdminApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminApplication.class, args);
}
@Profile("insecure")
@Configuration
public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll()//
.and().csrf().disable();
}
}
@Profile("secure")
@Configuration
public static class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
private final String adminContextPath;
public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
this.adminContextPath = ContextPath();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
http.authorizeRequests()
.antMatchers(adminContextPath + "/assets/**").permitAll()
.antMatchers(adminContextPath + "/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
.logout().logoutUrl(adminContextPath + "/logout").and()
.httpBasic().and()
.csrf().disable();
// @formatter:on
}
}
}
SecurityPermitAllConfig和SecuritySecureConfig的配置是 Spring Boot Admin 官⽅给的配置,是对 url 进⾏安全认证等配置,照着配置即可。@EnableEurekaClient 注解是把 Spring Boot Admin 注册到 Eureka ⾥,这样 Spring Boot Admin 就可以发现注册到Eureka ⾥的其他服务实例,@EnableAdminServer 注解是开启监控功能。
3.2.3 配置⽂件
官⽅有给出⽰例,主要是配置 eureka 的地址,这⾥要强调说明的⼀点,由于 Spring Boot 2.0 的 Actuator 只暴露了 /health、/info 两个端⼝(为了安全考虑),所以要配置 posure.include 的属性,下⾯的配置⽂件中暴⼒了⼀点,配置暴露了所有的端点,由于 Spring Boot Admin 有 web UI 管理界⾯,配置了登录的⽤户名密码如下,使⽤了 security.user 的属性,其他的详细配置,可以查看官⽅⽂档。
spring:
application:
name: spring-boot-admin
profiles:
active:
- secure
server:
port: 8788
# tag::configuration-eureka[]
适合新手的spring booteureka:  #<1>
instance:
leaseRenewalIntervalInSeconds: 10
health-check-url-path: /actuator/health
client:
registryFetchIntervalSeconds: 5
serviceUrl:
defaultZone: ${EUREKA_SERVICE_URL:localhost:8761}/eureka/
management:
endpoints:
web:
exposure:
include: "*"  #<2>
endpoint:
health:
show-details: ALWAYS
# end::configuration-eureka[]
---
spring:
profiles: insecure
---
spring:
profiles: secure
security:
user:
name: "user"
password: "password"
eureka:
instance:
metadata-map:
user.name: "user"        #These two are needed so that the server
user.password: "password" #can access the protected client endpoints 3.2.4 启动 spring boot admin 服务,界⾯如下:
⽤户名密码即上⾯的配置,user/password登录成功后
此时由于 Eureka ⾥只有 Spring Boot Admin ⾃⾝已注册,所以其监控列表⾥只有⾃⼰,下⾯我们启动其他的服务,让其注册到 Eureka ⾥。
3.2.5 启动 spring-demo-service 服务
(之前⽂章⾥现有的服务,可以查此前的⽂章,或者查看⽂末的源码下载),在启动前,还有⼀处要配置,就是在 3.2.3 ⾥说
的,Actuator 在 spring boot 2.0 版本后,只暴露了两个端点,所以此时启动,监控不到所需的信息,下
⾯修改配置⽂件如下: