整合Spring Boot Admin
为什么需要Spring Boot Admin
- 在Spring Boot Admin之前,我们知道可以使用 Spring Boot Actuator 对项目的健康状况进行监控,但都只是以一些文字表述性的形式展示,可以说信息并不美观也并不便捷,而Spring Boot Admin可以说是Spring Boot Actuator的可视化版本,可以结合Spring Boot Actuator向用户展示更多可视化监控信息(如系统压力、QPS、CPU、内存、日活等)
整合Spring Boot Admin
Spring Boot Admin将系统分成两种角色:
- Spring Boot Admin Server: 监控服务端,用于展示监控数据
- Spring Boot Admin Client: 被监控的客户端
被监控的客户端通过向监控服务端注册(HTTP),即可让服务端展示相关监控信息
- 但是,如果系统内集成了SC(注册中心),则只需要向注册中心注册即可。
- 由于项目内整合了Eureka注册中心,我们选择第二种模式。
构建监控服务端
建工程
引依赖。建一个工程:system-admin-server,引入Spring Boot Admin Server依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<description>系统可视化监控服务</description>
<dependencies>
<!--admin服务-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<!-- <version>2.3.1</version>-->
</dependency>
<!--eureka 客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--作为网络服务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
加配置
在system-admin-server的项目配置文件bootstrap.yml中添加如下配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27server:
port: 5000 #服务端口
spring:
profiles:
active: 700 #当前生效环境
application:
name: springcloud-admin-server #指定应用的唯一标识/服务名
# 监控注册配置
eureka:
client:
registryFetchIntervalSeconds: 5 #表示eureka client间隔多久去拉取服务注册信息,默认为30秒
service-url:
defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/ #服务注册中心地址
instance:
leaseRenewalIntervalInSeconds: 10 #表示eureka client发送心跳给server端的频率
health-check-url-path: /actuator/health #健康检查页面的URL,相对路径,默认使用 HTTP 访问,如果需要使用 HTTPS则需要使用绝对路径配置
#暴露所有监控端点
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS #总是展示详情信息
开启Admin监控服务
使用@EnableAdminServer注解开启Admin监控服务
1
2
3
4
5
6
7
8
//开启Admin监控服务
public class SpringCloudAdminApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudAdminApplication.class, args);
}
}
构建监控客户端
引依赖
监控客户端必须引入Spring Boot Actuator 依赖
1
2
3
4
5
6
7
8
9
10<!--eureka 客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--实时健康监控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
加配置
在springcloud-client工程的bootstrap.yml文件配置暴露监控端点,以便被监控服务端监控发现
1
2
3
4
5
6
7
8
9#暴露所有监控端点
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS #总是展示详情信息
启动类
由于使用SC注册中心模式,此处只需要在服务启动类添加注册发现注解@EnableEurekaClient即可
1
2
3
4
5
6
7
8
9
public class SpringCloudClientApplication {
public static void main(String[] args){
SpringApplication.run(SpringCloudClientApplication.class, args);
}
}
查看效果
启动服务端和客户端服务
![](9-整合Spring Boot Admin/de28445cd26a1b7d08dbada3acb4fec1.png)
访问上面配置的http://localhost:5000查看效果
![](9-整合Spring Boot Admin/630c98119b87a55f128e218c4b8294a1.png)
![](9-整合Spring Boot Admin/49a0d28046f4a2e5dd88a932f18c95a8.png)
Admin 整合Spring Security
- 监控端口终归不能裸奔,毕竟不安全,所以鉴权还是需要的
引依赖
system-admin-server服务模块引入Spring Security依赖
1
2
3
4
5<!--集成security-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
加配置
在system-admin-server的服务配置文件bootstrap.yml中添加如下配置
1
2
3
4
5
6
7
8
9
10
11eureka:
instance:
metadata-map: #携带登录用户及密码
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}
spring:
security:
user:
name: "admin" #登录用户名
password: "admin" #登录密码新建Security配置类,配置登录页信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class AdminSecurityConfig extends WebSecurityConfigurerAdapter {
private final String adminContextPath;
public AdminSecurityConfig(AdminServerProperties adminServerProperties) {
this.adminContextPath = adminServerProperties.getContextPath();
}
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
}
}启动服务,访问5000端口,重定向到登录页,使用上述配置的用户名及密码(admin/admin)进行登录
![](9-整合Spring Boot Admin/44a03d6cdc730ff9e1710af03a5d0782.png)