1.简介
Spring Boot Admin为项目常用的监控方式,可以动态的监控服务是否运行和运行的参数,如类的调用情况、流量等。其中分为server与client:
- server: 提供展示UI与监控服务。
- client:加入server,被监控的项目。
同时在监控的过程中spring-boot-starter-actuator也被经常提及,actuator使用后,会在被项目内部打上探针,提供一系列的监控api接口,如堆内存、栈内存等。下文数据为actuator提供。
2.server端
2.1 新建springboot项目
这里不多说常用方法新建springboot项目。
2.2 修改pom文件
由于使用了spring cloud alibaba生态,所以这里将nacos包也加入了,请自行选择。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.2.0</version>
</dependency>
<!-- SpringCloud Alibaba Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
2.3 修改yml文件
server端暂无其他配置。
server:
port: 8008
servlet:
context-path: /monitor
spring:
application:
name: monitor-resource # Eureka页面显示
2.4 修改
加入@EnableAdminServer注解。
@SpringBootApplication
@EnableAdminServer
public class MonitorApplication {
public static void main(String[] args) {
SpringApplication.run(MonitorApplication.class, args);
}
}
访问ip:端口/context-path
就可以访问了。页面如下。
3.client端
3.1 修改pom文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.2.0</version>
</dependency>
3.2 修改yml文件
在有context-path情况下,需要加入特殊配置,否则报错。本文为nacos中的配置,请参考。
server:
port: 8008
servlet:
context-path: /monitor
spring:
application:
name: monitor-resource
boot:
admin:
client:
api-path:
url: http://127.0.0.1:8008/monitor # 这里为server地址,如果有context-path需要加入
instance:
prefer-ip: true # 使用ip注册进来
management-url: /monitor
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: ip:8848
metadata: # 如果有context-path需要加上,否者报错
management:
context-path: ${server.servlet.context-path}/actuator
config:
# 配置中心地址
server-addr: ip:8848
# 配置文件格式
file-extension: yml
management: # actuator配置
endpoint:
health:
show-details: always
endpoints:
enabled-by-default: true
web:
exposure:
include: '*'
启动后即可加入server服务,页面展示如下:
4.Security
4.1 修改pom文件。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
4.2 修改application.xml文件
加入登录账号密码。
spring:
security:
user:
name: "admin"
password: "1qaz@WSX"
4.3 新增登入登出配置
这里需要配置登入登出的页面地址,同其他博文相同配置。
@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 {
// @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();
}
}
再次登录可以看到需要账号登录。