一.介绍
Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Consul)发现。 UI是的AngularJs应用程序,展示Spring Boot Admin Client的Actuator端点上的一些监控。常见的功能或者监控如下:
- 显示 name/id 和版本号
- 显示在线状态
- Logging 日志级别管理
- JMX beans 管理
- Threads 会话和线程管理
- Trace 应用请求跟踪
- 应用运行参数信息,如:
Java 系统属性
Java 环境变量属性
内存信息
Spring 环境属性
二.服务端集成
- 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<exclusions>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
<exclusion>
<artifactId>HdrHistogram</artifactId>
<groupId>org.hdrhistogram</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.0.3</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>
说明:
1)eureka集成是为了以Eureka为注册中心,从Eureka获取相关服务信息。
2)security集成是为了加上Admin登录认证。
3)admin-starter为服务端组件。
4)安全配置适配器依赖必须。
- 关键配置信息
spring:
# 用户登录Admin账户
security:
user:
name: "admin"
password: "123456"
eureka:
client:
#表示eureka client间隔多久去拉取服务注册信息,默认为30秒
registryFetchIntervalSeconds: 5
service-url:
defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
instance:
#表示eureka client发送心跳给server端的频率,默认为30秒
leaseRenewalIntervalInSeconds: 10
#健康检查的地址(依赖spring-boot-starter-actuator)
health-check-url-path: /actuator/health
metadata-map:
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}
强调:上面注释讲解部分很关键,上面设置我们能每5秒从Eureka服务端获取微服务模块信息。
Eureka 中的 metadataMap 是专门用来存放一些自定义的数据,当注册中心或者其他服务需要此服务的某些配置时可以在 metadataMap 里取。实际上,每个 instance 都有各自的 metadataMap,map 中存放着需要用到的属性。例如,上面配置中的 eureka.instance.metadata-map.user.name,当这个服务成功注册到 Eureka 上,Spring Boot Admin 就会取拿到这个 instance,进而拿到 metadataMap 里的属性,然后放入请求头,向此服务发送请求,访问此服务的 Actuator 开放的端点。
- 安全校验设置
@Slf4j
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
{
private final String adminContextPath;
public WebSecurityConfig(AdminServerProperties adminServerProperties)
{
this.adminContextPath = adminServerProperties.getContextPath();
}
@Override
protected void configure(HttpSecurity http) throws Exception
{
log.info("WebSecurityConfig|configure|进入页面拦截处理部分");
// @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();
}
}
三.注册中心
用之前搭建的即可 端口为 8761
qy-eureka-server 注册中心
微服务系列之-Eureka Server集成
四.客户端集成
- 没有集成Eureka
主要依赖:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
主要配置:
spring:
security:
user:
name: "admin"
password: "123456"
boot:
admin:
client:
url: http://localhost:8086
username: "admin"
password: "123456"
instance:
metadata:
user.name: ${spring.security.user.name}
user.password: ${spring.security.user.password}
eureka:
instance:
leaseRenewalIntervalInSeconds: 10 #表示eureka client发送心跳给server端的频率,默认为30秒
health-check-url-path: /actuator/health #健康检查的地址(依赖spring-boot-starter-actuator)
client:
registryFetchIntervalSeconds: 5 #表示eureka client间隔多久去拉取服务注册信息,默认为30秒
service-url:
defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: ALWAYS
启动类:
@Slf4j
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication
{
public static void main( String[] args )
{
ApplicationContext context = SpringApplication.run(EurekaClientApplication.class, args);
String serverPort = context.getEnvironment().getProperty("server.port");
log.info("后台管理服务客户端启动成功! Swagger2: http://127.0.0.1:".concat(serverPort));
}
}
- 集成Eureka
我们可以去掉admin-starter-client依赖,因为微服务都在配置中心注册,可以通过注册中心获取注册在Eureka的相关微服务信息。
五.结果验证
依次启动
qy-eureka-server
qy-admin-server
qy-eureka-client
进入登录页面,输入账户以及密码登录Admin
服务正常显示
至此我们继承Admin服务监控模块成功!!!
项目集成地址:谦奕爸爸-微服务集成项目