简介
Spring Boot Admin 是一个开源项目,用于管理和监控 Spring Boot 应用程序。应用程序作为 Spring Boot Admin Client
(通过 HTTP)或使用 Spring Cloud 注册中心(如Eureka
、Consul
、Nacos
等)向 Spring Boot Admin Server 注册。其前端UI是基于 Spring Boot Actuator 端点的 Vue.js
应用程序。
Spring Boot Admin 为应用程序提供了以下功能:
- 显示健康状况
- 显示详细信息,例如
- JVM和内存指标
- micrometer.io指标
- 数据源指标
- 缓存指标
- 显示构建信息编号
- 查看并下载日志文件
- 查看 JVM 系统和环境属性
- 查看 Spring Boot 配置属性
- 支持 Spring Cloud 的
/env
和/refresh-endpoint
端点 - 易用的日志级别管理
- 与 JMX-beans 交互
- 查看线程转储
- 查看 http-traces
- 查看审核事件
- 查看 http 端点
- 查看预定的任务
- 查看和删除活动会话(使用spring-session)
- 查看 Flyway / Liquibase 数据库迁移
- 下载 heapdump
- 状态更改通知(通过电子邮件,Slack,Hipchat等)
- 状态更改的事件日志(非持久性)
使用
搭建 Spring Boot Admin Server
- 编辑
pom.xml
,引入依赖:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 在应用程序启动类上添加注解
@EnableAdminServer
引入 Spring Boot Admin 配置:
@SpringBootApplication
@EnableAdminServer
public class SpringBootAdminApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminApplication.class, args);
}
}
启动项目,访问 http://127.0.0.1:8087(这个地址根据个人自行修改);
注册 Spring Boot Admin Client
- 编辑
pom.xml
,添加依赖:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.2.1</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-actuator</artifactId>
</dependency>
因为 Spring Boot Admin 是基于 Spring Boot Actuator 之上的,所以我们还需要引入 Spring Boot Actuator 的相关依赖。
- 编辑
application.yml
,添加配置:
spring:
boot:
admin:
client:
url: http://127.0.0.1:8087
management:
endpoints:
web:
exposure:
include: '*'
配置说明:
- 配置 Spring Boot Admin Server 的URL
- 开放访问端口(生产环境务必配置要开放的端口,以免产生安全问题)
- 启动项目,访问 Spring Boot Admin Server 服务 http://127.0.0.1:8087 ,可看到客户端已经注册进 Spring Boot Admin Server ,点击 应用墙 的实例,进入实例详情页,可查看到关于实例更多的信息。
至此,一个简单的 Spring Boot Admin Server 和 Spring Boot Admin Client 搭建完成,过程还是很简单的。
Spring Boot Admin 安全配置
- 在
pom.xml
中添加spring-boot-starter-security
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 编辑
application.yml
:
server:
port: 8087
spring:
application:
name: SpringBootAdmin
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
username: lanweihong
password: lanweihong
security:
user:
name: "admin"
password: "admin"
WebSecurityConfig
配置:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
private final AdminServerProperties adminServer;
private final String adminContextPath;
@Autowired
public WebSecurityConfig(AdminServerProperties adminServer) {
this.adminServer = adminServer;
this.adminContextPath = adminServer.getContextPath();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(adminContextPath + "/");
http.authorizeRequests()
.antMatchers(this.adminServer.path("/assets/**")).permitAll()
.antMatchers(this.adminServer.path("/login")).permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
.logout()
.logoutUrl(adminContextPath + "/logout")
.and()
// 启用HTTP-Basic支持
.httpBasic().and();
}
}
启动项目后,使用浏览器访问 http://127.0.0.1:8087,跳转至登录页面,使用配置的用户名及密码登录。
如果你使用的是微服务架构,只需将 Spring Boot Admin Server 和 微服务应用添加到注册中心(Eureka、Nacos等),应用不用配置 Spring Boot Admin Client,Spring Boot Admin Server 会自动收集各个应用的状态信息。