一、什么是Spring Boot Admin?
Spring Boot Admin是一个开源社区项目,是用来管理 Spring Boot 应用程序的一个简单的界面。 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Consul)发现。 UI只是Spring Boot Actuator端点之上的Vue.js应用程序,展示Spring Boot Admin Client的Actuator端点上的一些监控。常见的功能或者监控如下:
- 显示健康状况
- 显示详细信息,例如
- JVM和内存指标
- 数据源指标
- 缓存指标
- 查看Spring Boot配置属性
- 支持Spring Cloud的postable / env-和/ refresh-endpoint
- 轻松的日志级管理
- 查看计划任务
- 与JMX-beans交互
- 查看线程转储
- 查看http跟踪
- 查看auditevents
- 查看http-endpoints
- 查看和删除活动会话(使用spring-session)
- 查看Flyway / Liquibase数据库迁移
- 下载heapdump
- 状态变更通知(通过邮件,Hipchat,Telegram Notifications…)
- 状态更改的事件日志(非持久性)
二、快速开始
2.1、设置Spring Boot Admin Server
首先需要设置Server。由于Spring Boot Admin Server能够作为servlet或webflux应用程序运行,因此只需要对此进行确定并添加相应的Spring Boot Starter。在此示例中,我们使用Servlet Web Starter。
- 在pom文件中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 通过添加@EnableAdminServer到配置中来引入Spring Boot Admin Server 配置:
@EnableAdminServer
@SpringBootApplication
public class SpringBootAdminApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminApplication.class, args);
}
@Configuration(proxyBeanMethods = false)
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
private final AdminServerProperties adminServer;
public SecuritySecureConfig(AdminServerProperties adminServer) {
this.adminServer = adminServer;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(this.adminServer.path("/"));
http.authorizeRequests(
(authorizeRequests) -> authorizeRequests.antMatchers(this.adminServer.path("/assets/**")).permitAll()
.antMatchers(this.adminServer.path("/login")).permitAll().anyRequest().authenticated()
).formLogin(
(formLogin) -> formLogin.loginPage(this.adminServer.path("/login")).successHandler(successHandler).and()
).logout((logout) -> logout.logoutUrl(this.adminServer.path("/logout"))).httpBasic(Customizer.withDefaults())
.csrf((csrf) -> csrf.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.ignoringRequestMatchers(
new AntPathRequestMatcher(this.adminServer.path("/instances"),
HttpMethod.POST.toString()),
new AntPathRequestMatcher(this.adminServer.path("/instances/*"),
HttpMethod.DELETE.toString()),
new AntPathRequestMatcher(this.adminServer.path("/actuator/**"))
))
.rememberMe((rememberMe) -> rememberMe.key(UUID.randomUUID().toString()).tokenValiditySeconds(1209600));
}
}
}
3.配置文件
spring.application.name=spring-boot-admin
server.port=9000
# 登录账号和密码
spring.security.user.name=root
spring.security.user.password=root
2.2、启动
这里的用户名跟密码是前面配置文件中所配置的root/root。输入登录之后就会看到如下页面,由于没有Admin client注册,所以这里没有任何监控到的spring boot应用。
2.3、搭建client端
- 在需要监测的项目的pom加入如下依赖
<!--每个要注册的应用程序都必须包含Spring Boot Admin Client。 -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
- 配置文件
#要展示的应用名称
spring.application.name=public-manage
#admin工程的url
spring.boot.admin.client.url=http://localhost:9000
#展示全部细节信息
management.endpoints.web.exposure.include=*
#允许admin工程远程停止本应用
management.endpoint.shutdown.enabled=true
#admin工程的账号密码
spring.boot.admin.client.username=root
spring.boot.admin.client.password=root
- 依次启动server和client就会看如下页面
点击 public-manage 进入,页面如下,可以看到有我们之前介绍的一些功能。
注意: 这里的实时日志在2.3.0的版本中需要我们配置的,配置步骤如下
- 在pom文件中加入日志依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
- 在resources目录下添加logback-spring.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="log.path" value="logs/" />
<appender name="logbackAll" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.path}//all.log</File>
<encoder>
<pattern>%date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<maxHistory>5</maxHistory>
<fileNamePattern>${log.path}//all.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{56}.%method:%L -%msg%n</pattern>
</layout>
</appender>
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} [%highlight(%level)] [%boldMagenta(%thread)] [%cyan(%file) : %line] %msg%n</pattern>
</encoder>
</appender>
<logger name="mall" level="DEBUG" additivity="false">
<appender-ref ref="Console"/>
<appender-ref ref="logbackAll"/>
</logger>
<logger name="smcvAuthSdk" level="INFO" additivity="false">
<appender-ref ref="Console"/>
<appender-ref ref="logbackAll"/>
</logger>
<logger name="org.springframework" level="INFO" additivity="false">
<appender-ref ref="Console"/>
<appender-ref ref="logbackAll"/>
</logger>
<!-- 日志输出级别 ,注意:如果不写<appender-ref ref="FILE" /> ,将导致springbootadmin找不到文件,无法查看日志 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
- 在application.properties中添加日志路径,完整配置如下
#要展示的应用名称
spring.application.name=public-manage
#admin工程的url
spring.boot.admin.client.url=http://localhost:9000
#展示全部细节信息
management.endpoint.health.show-details=always
management.endpoints.logfile.external-file=D:/project/public-manage/logs/all.log
logging.file=D:/project/public-manage/logs/all.log
management.endpoints.web.exposure.include=*
#允许admin工程远程停止本应用
management.endpoint.shutdown.enabled=true
#admin工程的账号密码
spring.boot.admin.client.username=root
spring.boot.admin.client.password=root
这样一个Spring Boot Admin 2.3.0基于security 认证监控就算搭建完成了。
如果有不足之处,希望能够多多包涵并且可以指正我。