一、Spring Boot Admin 简介
Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Consul)发现。 UI是的AngularJs应用程序,展示Spring Boot Admin Client的Actuator端点上的一些监控。
Spring Boot Admin 是一个管理和监控Spring Boot 应用程序的开源软件。Spring Boot Admin 分为 Server 端和 Client 端,Spring Boot Admin UI部分使用AngularJs将数据展示在前端。
常见的功能或者监控如下:
显示健康状况
显示详细信息,例如
JVM和内存指标
micrometer.io指标
数据源指标
缓存指标
显示构建信息编号
关注并下载日志文件
查看jvm系统和环境属性
查看Spring Boot配置属性
支持Spring Cloud的postable / env-和/ refresh-endpoint
轻松的日志级管理
与JMX-beans交互
查看线程转储
查看http跟踪
查看auditevents
查看http-endpoints
查看计划任务
查看和删除活动会话(使用spring-session)
查看Flyway / Liquibase数据库迁移
下载heapdump
状态变更通知(通过电子邮件,Slack,Hipchat,......)
状态更改的事件日志(非持久性)
二、Maven依赖
-
项目结构
服务端依赖
<!--Admin-Server-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.1.5</version>
</dependency>
- 客户端依赖
<!--Admin-Client-->
<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>
<version>2.1.5</version>
</dependency>
三、配置
- 服务端入口类配置
@Configuration
@EnableAutoConfiguration
@EnableAdminServer
public class SpringBootAdminApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminApplication.class, args);
}
}
- 服务端配置文件
spring.application.name=admin-server
server.port=8769
- 客户端配置
spring.application.name=admin-client
server.port=8080
# 注册到Admin
spring.boot.admin.client.url=http://localhost:8769
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=ALWAYS
四、测试
-
分别启动服务端与客户端
-
五、结合Eureka注册中心
-
创建注册中心项目
添加Maven依赖
注册中心:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
客户端(监控中心与业务服务):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
- 配置
注册中心:
spring.application.name=eureka-server
server.port=8761
# 注册中心
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
# 健康数据
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=ALWAYS
admin监控中心:
spring.application.name=admin-server
server.port=8769
# 注册中心注册
eureka.client.registryFetchIntervalSeconds=5
eureka.client.service-url.defaultZone=${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
eureka.instance.leaseRenewalIntervalInSeconds=10
# 健康检查路径
eureka.instance.health-check-url-path=/actuator/health
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=ALWAYS
业务服务:
spring.application.name=admin-client
server.port=8080
# 注册中心注册
eureka.client.registryFetchIntervalSeconds=5
eureka.client.service-url.defaultZone=${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
eureka.instance.leaseRenewalIntervalInSeconds=10
# 健康检查路径
eureka.instance.health-check-url-path=/actuator/health
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=ALWAYS
六、测试
七、集成spring security
- Admin监控中心添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2.Admin监控中心 添加配置
# 安全配置
spring.security.user.name=admin
spring.security.user.password=admin
eureka.instance.metadata-map.user.name=${spring.security.user.name}
eureka.instance.metadata-map.user.password=${spring.security.user.password}
- Admin监控中心添加配置类
@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
private final String adminContextPath;
public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
this.adminContextPath = adminServerProperties.getContextPath();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
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();
}
}
- Admin监控中心测试
http://localhost:8769
用户名与密码为配置的:admin
八、集成Email
- Admin监控中心添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
- Admin监控中心配置
# 配置邮件
spring.mail.host=smtp.163.com
spring.mail.username=XXXX
spring.mail.password=XXXX
# 当我们已注册的客户端的状态从 UP 变为 OFFLINE 或其他状态,
# 服务端就会自动将电子邮件发送到xxxx@qq.com。
spring.boot.admin.notify.mail.to=xxxx@qq.com