一起来学SpringBoot | 第十五篇:actuator与spring-boot-admin 可以说的秘密

本文介绍了如何使用Spring Boot Actuator进行应用监控,并探讨了Spring-Boot-Admin如何简化这一过程,提供直观的管理界面。通过引入Spring-Boot-Admin依赖,设置相关配置,可以实现对单一应用或集群的监控,包括动态切换日志级别、导出日志等功能。文章还提供了主函数配置和测试步骤,帮助读者快速上手。

SpringBoot 是为了简化 Spring 应用的创建、运行、调试、部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以轻易的搭建出一个 WEB 工程

一起来学SpringBoot | 第十四篇:强大的 actuator 服务监控与管理 中介绍了actuator 的作用,细心的朋友可能会发现通过http restful api的方式查看信息过于繁琐也不够直观,效率低下,运维人员看到JSON数据更是一脸懵逼,当服务过多的时候查看起来就过于操蛋了,每个服务都需要调用不同的接口来查看监控信息,备受各种困扰因素的我默默翻了下全球最大男性交友平台找到了spring-boot-admin

什么是SBA

SBA 全称 Spring Boot Admin 是一个管理和监控 Spring Boot 应用程序的开源项目。分为admin-serveradmin-client 两个组件,admin-server通过采集 actuator 端点数据,显示在 spring-boot-admin-ui 上,已知的端点几乎都有进行采集,通过 spring-boot-admin 可以动态切换日志级别、导出日志、导出heapdump、监控各项指标 等等….

Spring Boot Admin 在对单一应用服务监控的同时也提供了集群监控方案,支持通过eurekaconsulzookeeper等注册中心的方式实现多服务监控与管理…

导入依赖

pom.xml 中添加 spring-boot-admin 的相关依赖,这里只演示单机版本的,因此就自己监控自己了

<dependencies>
    <!-- 服务端:带UI界面 -->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId>
        <version>2.0.0</version>
    </dependency>
    <!-- 客户端包 -->
    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
        <version>2.0.0</version>
    </dependency>
    <!-- 安全认证 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <!-- 端点 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- 在管理界面中与 JMX-beans 进行交互所需要被依赖的 JAR -->
    <dependency>
        <groupId>org.jolokia</groupId>
        <artifactId>jolokia-core</artifactId>
    </dependency>
</dependencies>

注意事项

如果要访问info接口想获取maven中的属性内容请记得添加如下内容

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>build-info</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

属性配置

application.properties 文件中配置actuator的相关配置,其中info开头的属性,就是访问info端点中显示的相关内容,值得注意的是Spring Boot2.x中,默认只开放了info、health两个端点,剩余的需要自己通过配置management.endpoints.web.exposure.include属性来加载(有include自然就有exclude,不做详细概述了)。这个management.endpoints.web.base-path属性比较重要,因为Spring Boot2.x后每个端点默认的路径是/actuator/endpointId这样一来Spring Boot Admin是无法正常采集的

application.properties

# 描述信息
info.blog-url=http://blog.battcn.com
info.author=Levin
# 如果 Maven 插件没配置此处请注释掉
info.version=@project.version@
info.name=@project.artifactId@
# 选择激活对应环境的配置,如果是dev则代表不用认证就能访问监控页,prod代表需要认证
spring.profiles.active=prod

# 日志文件
logging.file=./target/admin-server.log

# 加载所有的端点/默认只加载了 info / health
management.endpoints.web.exposure.include=*
# 比较重要,默认 /actuator spring-boot-admin 扫描不到
management.endpoints.web.base-path=/
management.endpoint.health.show-details=always

spring.boot.admin.client.url=http://localhost:8080
# 不配置老喜欢用主机名,看着不舒服....
spring.boot.admin.client.instance.prefer-ip=true

application-dev.properties - 空

application-prod.properties

为了安全起见,应采用认证的方式

# 登陆所需的账号密码
spring.security.user.name=battcn
spring.security.user.password=battcn
# 便于客户端可以在受保护的服务器上注册api
spring.boot.admin.client.username=battcn
spring.boot.admin.client.password=battcn
# 便服务器可以访问受保护的客户端端点
spring.boot.admin.client.instance.metadata.user.name=battcn
spring.boot.admin.client.instance.metadata.user.password=battcn

主函数

添加上 @EnableAdminServer 注解即代表是Server端,集成UI的

package com.battcn;

import de.codecentric.boot.admin.server.config.AdminServerProperties;
import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;


/**
 * @author Levin
 */
@SpringBootApplication
@EnableAdminServer
public class Chapter14Application {

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

    /**
     * dev 环境加载
     */
    @Profile("dev")
    @Configuration
    public static class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().anyRequest().permitAll()
                    .and().csrf().disable();
        }
    }

    /**
     * prod 环境加载
     */
    @Profile("prod")
    @Configuration
    public static 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();
        }
    }
}

测试

完成准备事项后,启动Chapter14Application 访问 http://localhost:8080/login 看到登陆页面则代表一切正常,接着输入账号密码点击登陆即可…

首页

由于篇幅原因大图就不放太多了,有兴趣的朋友可以直接fork代码运行即可

总结

参考文档:http://codecentric.github.io/spring-boot-admin/2.0.0/

目前很多大佬都写过关于 SpringBoot 的教程了,如有雷同,请多多包涵,本教程基于最新的 spring-boot-starter-parent:2.0.2.RELEASE编写,包括新版本的特性都会一起介绍…

说点什么

  • 个人QQ:1837307557
  • battcn开源群(适合新手):391619659
  • 微信公众号(欢迎调戏):battcn

个人博客:http://blog.battcn.com/

公众号

全文代码:https://github.com/battcn/spring-boot2-learning/tree/master/chapter14

<think>好的,我现在需要帮用户找到Spring Boot 3.0.2兼容的spring-boot-admin-starter-server版本号。首先,用户之前的问题是关于Spring Boot Actuator 3.0.2的配置,现在转向了Spring Boot Admin的兼容性,这可能是因为用户想要监控他们的Spring Boot应用。 首先,我应该回忆一下Spring Boot Admin的基本信息。Spring Boot Admin是一个用于管理和监控Spring Boot应用程序的开源项目,它通过Actuator端点收集数据。因此,版本兼容性非常重要,特别是Spring Boot 3.x引入了Jakarta EE 9,包名从javax变为了jakarta,这可能导致依赖冲突。 用户提到他们使用的是Spring Boot 3.0.2,因此Spring Boot Admin版本必须支持Spring Boot 3.x。根据之前的经验,Spring Boot Admin版本通常Spring Boot的主版本保持一致。例如,Spring Boot 2.x对应Spring Boot Admin 2.x,而Spring Boot 3.x可能需要Spring Boot Admin 3.x。 接下来,我需要确认具体的版本号。访问Spring Boot Admin的官方文档或GitHub仓库会有帮助。查看他们的发布明或兼容性矩阵,找到明确支持Spring Boot 3.0.2的版本。根据记忆,Spring Boot Admin 3.x版本开始支持Spring Boot 3,所以可能的版本是3.0.0或更高。例如,3.0.1或3.1.0,但需要具体确认。 另外,用户之前的问题中提到了依赖配置的正确写法,所以在回答时需要给出Maven或Gradle的依赖示例,确保用户能够正确引入。同时,可能需要提醒用户注意Jakarta EE的包变化,确保所有相关依赖都兼容,避免出现类找不到的问题。 用户还提到了非法反射访问的警告,这可能依赖库的版本不兼容有关,比如Javassist。但在这个问题中,用户的主要关注点是Spring Boot Admin版本,所以可能不需要深入讨论这一点,但可以提到确保所有传递依赖也兼容Spring Boot 3.0.2。 最后,用户可能需要配置Spring Boot Admin Server,所以给出一个简单的配置示例和验证步骤会有帮助,比如如何启用服务器,如何注册客户端应用等。同时,确保引用了之前提到的Actuator配置,因为Admin依赖Actuator端点来收集信息。 总结步骤: 1. 确定Spring Boot AdminSpring Boot 3.0.2兼容的版本。 2. 提供依赖配置示例(Maven/Gradle)。 3. 提醒注意Jakarta EE包的变化。 4. 给出基本配置和验证步骤。 5. 确保传递依赖的兼容性。 6. 可能的相关问题,比如如何配置客户端或处理常见错误。</think>### Spring Boot Admin 3.x Spring Boot 3.0.2 的版本兼容性 #### 1. **兼容版本确认** Spring Boot 3.x(含 3.0.2)需使用 **Spring Boot Admin 3.x** 版本,具体推荐 **3.1.1** 或更高版本[^1]。 关键原因: - **Jakarta EE 9+ 适配**:Spring Boot 3.x 将包命名从 `javax` 迁移至 `jakarta`,旧版 Spring Boot Admin(2.x)因依赖 `javax` 会引发类加载错误。 - **依赖传递兼容性**:Spring Boot Admin 3.x 明确支持 Spring Boot 3.x 的自动配置和 Actuator 端点协议。 --- #### 2. **依赖配置示例** **Maven 配置**: ```xml <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>3.1.1</version> <!-- Spring Boot 3.0.2 兼容 --> </dependency> ``` **Gradle 配置**: ```groovy implementation 'de.codecentric:spring-boot-admin-starter-server:3.1.1' ``` --- #### 3. **必要配置步骤** 1. **启用 Admin Server**:在主类添加 `@EnableAdminServer`: ```java @SpringBootApplication @EnableAdminServer public class AdminServerApplication { public static void main(String[] args) { SpringApplication.run(AdminServerApplication.class, args); } } ``` 2. **客户端注册配置**:确保被监控的应用(客户端)已正确配置 Actuator 端点暴露(参考之前的 Actuator 配置)[^1]: ```yaml # 客户端应用的 application.yml spring: boot: admin: client: url: http://localhost:8080 # Admin Server 地址 management: endpoints: web: exposure: include: "*" # 暴露所有端点 ``` --- #### 4. **验证排查** - **访问 Admin 控制台**:启动后访问 `http://localhost:8080`(默认端口 Spring Boot 应用相同)。 - **检查依赖冲突**:若出现 `ClassNotFoundException`(如 `javax.servlet` 相关),需排除旧版依赖: ```xml <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>3.1.1</version> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </exclusion> </exclusions> </dependency> ``` --- #### 5. **常见兼容性问题** | 问题场景 | 解决方案 | |---------------------------|--------------------------------------------------------------------------| | 启动时报 `jakarta` 类缺失 | 确认 Spring Boot Admin 版本 ≥3.0.0,且无旧版 `javax` 依赖混入 | | 客户端未注册 | 检查客户端 `spring.boot.admin.client.url` 配置及 Actuator 端点暴露状态 | | Admin 控制台无数据 | 验证客户端 Server 的网络连通性,排查安全拦截(如 Spring Security 配置)| --- ### 相关问题 1. **如何为 Spring Boot Admin Server 配置身份验证?** > 集成 Spring Security,添加登录页配置,并放行 Actuator 端点[^2]。 2. **Spring Boot Admin 3.x 监控数据如何持久化?** > 使用 `spring-boot-admin-server-ui` + 数据库(如 H2),或集成 Prometheus Grafana[^3]。 3. **从 Spring Boot Admin 2.x 迁移到 3.x 需要注意哪些变更?** > 需重写所有 `javax` 包引用为 `jakarta`,并更新相关安全配置和依赖声明。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值