Spring Boot Admin
Spring Boot Admin 通过 Actuator 获得应用运行过程中的各项指标。以图形化界面展示出来。监控以下内容:
- 应用概览信息
- 度量指标信息
- 环境变量信息
- 所有创建的Bean信息
- 查看应用中所有配置信息
- 应用运行日志信息
- 查看JVM信息
- 查看可以访问的Web端点
- 查看HTTP跟踪信息
一 admin-server
新建admin项目,按照以下步骤添加依赖和配置。
1.添加依赖
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>2.2.4</version>
</dependency>
2.打开开关
@EnableAdminServer
3.配置
server:
port: 9301
spring:
application:
name: admin-server
访问http://localhost:9301查看效果
二 admin-client
选择(或新建)项目,作为admin client接入admin服务。
1. 引依赖
<!--admin客户端-->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.2.4</version> <!--2.6.2不兼容 -->
</dependency>
<!-- 开启监控接口-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2. 配置
spring.boot.admin.client.url 告诉admin server地址 management 开启查询端口
spring:
boot:
admin:
client:
url: http://localhost:9301 #配置admin-server地址
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: always
logging:
file: # 开启admin的日志监控
name: admin-client.log
启动后,再次查看admin服务,可以观察到接入服务的相关信息。
三 演示
- 1 访问监控地址 http://localhost:9301
- 2 点击wallboard按钮,选择要监控的实例查看详情
- 3 度量指标信息 JVM,Tomcat及进程信息
- 4 环境变量信息
- 5 所有的Bean信息
- 6 查看应用中的所有配置信息
- 7 查看日志信息
四 结合注册中心
上面的配置中我们指定了admin服务的地址,这样admin服务地址变更时就比较麻烦,所以我们可以使用eureka来实现动态查找admin服务。
Admin Server的修改
首先需要引入eureka client依赖和添加相应配置。
添加eureka-client
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
打开EurekaClient
@EnableEurekaClient
添加注册中心配置
eureka:
client:
fetch-registry: true #指定是否要从注册中心获取服务(注册中心不需要开启)
register-with-eureka: true #指定是否要注册到注册中心(注册中心不需要开启)
# 需要注意,如果eureka服务开始了security保护,这里需要有用户名和密码
# http://username:password@localhost:8761/eureka/
#集群的配置
#defaultZone: http://node1:8761/eureka,http://node2:8762/eureka,http://node3:8763/eureka
#单机的配置
service-url:
defaultZone: http://localhost:8761/eureka/
Admin Client
management: # Admin 通过 actuator提供的端口进行监控系统,因此需要打开各端口
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: always
logging:
file: # 开启admin的日志监控
name: admin-client.log
五 添加登陆认证
引入安全依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
配置用户名和密码
spring:
security:
user:
name: xxx
password: 123456
boot:
admin:
discovery:
ignored-services: ${spring.application.name} # 忽略自己的信息
增加security后,对于没有使用eureka注册中心,直接去通知admin的就 会受到影响,需要对security进行配置,以允许admin-client对admin的请求。
Spring Security
@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");
successHandler.setDefaultTargetUrl(adminContextPath + "/");
http.authorizeRequests()
//1.配置所有静态资源和登录页可以公开访问
.antMatchers(adminContextPath + "/assets/**").permitAll()
.antMatchers(adminContextPath + "/login").permitAll()
.antMatchers(adminContextPath+"/instances").permitAll()
.antMatchers(adminContextPath+"/actuator/**").permitAll()
.anyRequest().authenticated()
.and()
//2.配置登录和登出路径
.formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
.logout().logoutUrl(adminContextPath + "/logout").and()
//3.开启 http basic 支持,admin-client 注册时需要使用
.httpBasic().and()
.csrf()
//4.开启基于 cookie 的 csrf 保护
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
//5.忽略这些路径的 csrf 保护以便 admin-client 注册
.ignoringAntMatchers(adminContextPath + "/instances",adminContextPath + "/actuator/**");
}
}