使用Spring Boot Admin服务

警告
本文最后更新于 2023-03-20,文中内容可能已过时,请谨慎使用。

Spring Boot Admin (SBA) 是一个社区开源项目,用于管理和监视 Spring Boot 应用程序。

通过 SBA 可以浏览所有被监控的 Spring Boot 项目,详细的 Health 信息、内存信息、JVM 系统和环境属性、垃圾回收信息等。

搭建一个 SBA 服务端(Server),其他被监控的 Spring Boot 应用作为客户端(Client),客户端通过 HTTP 的方式将自己注册到服务端,以供服务端进行监控服务

1.导入依赖

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server</artifactId>
    <version>2.7.9</version>
</dependency>

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-server-ui</artifactId>
    <version>2.7.9</version>
</dependency>

注意上述依赖的版本号需与 SpringBoot 版本一致

2.配置application.yml

# 配置spring-boot-admin-server地址
spring:
    boot:
        admin:
            client:
                url: "http://localhost:8000/admin-server"
            context-path: "/admin-server"
# 配置端口号
server:
    port: 8000

3.在启动类上添加@EnableAdminServer注解

@SpringBootApplication
@EnableAdminServer
public class SpringBootAdminServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootAdminServerApplication.class, args);
    }

}

启动项目,访问http://localhost:8000/admin-server

/images/all/image-20230320154416024.png

1.导入依赖

注意spring-boot-admin-starter-client版本号和 SpringBoot 项目版本号一致

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
    <version>2.7.9</version>
</dependency>

2.配置application.yml

# 配置spring-boot-admin-server-client
spring:
    boot:
        admin:
            client:
                url: http://localhost:8000/admin-server #要注册的server端的url地址
    application:
        name: spring-boot-admin-client-1 # 应用名

# 项目端口
server:
    port: 9000

#开放端点用于SpringBoot Admin的监控
management:
    endpoint:
        shutdown:
            enabled: true #开启端点
        health:
            show-details: always # 是否展示健康检查详情
    endpoints:
        web:
            exposure:
                include: "*" # 暴露所有端点
    health:
        ldap:
            enabled: false #关闭对ldap的健康检查

# 配置日志文件路径,springAdmin服务端可实时查看
logging:
    file:
        name: logs/info.log

重新访问服务端地址: http://localhost:8000/admin-server

点击应用墙

/images/all/image-20230320160050043.png

点击中心的实例模块查看更多信息

/images/all/image-20230320161536053.png

点击日志,可以查看应用在控制台的输出,验证了上面的日志配置

/images/all/image-20230320161639621.png

SBA 服务端也可以配置邮件预警服务,默认情况下对于被检测的应用启动或者停止的时候会触发预警。

1.添加邮件依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

2.修改后的 admin-server 配置文件

spring:
    mail:
        host: smtp.163.com
        username: xxx@163.com
        password: 授权码
        properties:
            mail:
                smtp:
                    auth: true
                    starttls:
                        enable: true
                        required: true
    boot:
        admin:
            client:
                url: "http://localhost:8000/admin-server"
            context-path: "/admin-server"
            notify:
                mail:
                    from: xxx@163.com
                    to: xxx@qq.com

server:
    port: 8000

重新启动服务端和客户端测试

应用启动邮件通知

/images/all/image-20230320164247273.png

应用下线邮件通知

/images/all/image-20230320153733123.png

1.在服务端导入Spring Security依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2.在服务端配置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()
            .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/**"
        );
    }
}

3.添加配置

服务端设置用户名和密码

spring:
    security:
        user:
            name: admin
            password: 123456

客户端设置要连接的服务端的账号密码

spring:
    boot:
        admin:
            client:
                url: http://localhost:8000/admin-server #要注册的server端的url地址
                username: admin #连接服务端的账号和密码
                password: 123456
/images/all/image-20230320164832838.png

相关文章