好的,没问题!咱们来聊聊 Spring Boot Admin Server 部署与多应用管理,保证你读完之后,能像老司机一样轻松驾驭它。
Spring Boot Admin Server:应用监控界的瑞士军刀
想象一下,你是一位餐厅老板,旗下有N家分店。每天你都要亲自跑到每家店里,看看后厨的食材是否新鲜,服务员是不是在摸鱼,顾客的反馈如何。这得多累啊!有没有一种工具,能让你坐在办公室里,就能掌握所有分店的运营状况呢?
Spring Boot Admin Server 就是这样一款工具,它能集中监控和管理你的 Spring Boot 应用,让你对应用的运行状态一目了然。它就像一个中央控制台,把所有应用的健康状况、性能指标、日志信息等等都汇集到一起,让你运筹帷幄,决胜千里。
为什么要用 Spring Boot Admin Server?
- 集中管理,省时省力: 无需登录到每个应用的服务器查看状态,所有信息都在一个地方。
- 可视化监控,一目了然: 提供友好的 UI 界面,让你快速了解应用的健康状况、内存使用、CPU 占用等关键指标。
- 告警通知,防患未然: 可以配置告警规则,当应用出现异常时,及时发送通知,让你第一时间处理问题。
- 扩展性强,灵活定制: 可以自定义监控指标,集成第三方告警系统,满足不同的监控需求。
搭建 Spring Boot Admin Server:只需几步,轻松搞定
-
创建 Spring Boot 项目
首先,我们需要创建一个 Spring Boot 项目作为 Admin Server。可以使用 Spring Initializr (https://start.spring.io/) 来快速生成项目。
- Group:
com.example
- Artifact:
admin-server
- Dependencies:
spring-boot-starter-web
spring-boot-admin-starter-server
spring-boot-starter-security
(可选,用于增加安全性)
生成项目后,导入到你的 IDE (例如 IntelliJ IDEA 或 Eclipse)。
- Group:
-
添加依赖
确认
pom.xml
文件中包含以下依赖:<dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> <version>3.1.5</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>
注意:
spring-boot-admin-starter-server
的版本要与你的 Spring Boot 版本兼容。建议使用最新版本。spring-boot-starter-security
是可选的,如果需要增加安全性,可以添加。 -
配置 Admin Server
在
src/main/java/com/example/adminserver
目录下,创建一个类AdminServerApplication.java
,并添加@EnableAdminServer
注解:import de.codecentric.boot.admin.server.config.EnableAdminServer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableAdminServer public class AdminServerApplication { public static void main(String[] args) { SpringApplication.run(AdminServerApplication.class, args); } }
这个
@EnableAdminServer
注解是关键,它告诉 Spring Boot 这是一个 Admin Server。 -
修改
application.properties
或application.yml
在
src/main/resources
目录下,修改application.properties
或application.yml
文件,添加以下配置:spring.application.name=admin-server server.port=8080 # 你可以选择其他端口 spring.security.user.name=admin spring.security.user.password=admin # 生产环境务必修改密码 spring.security.user.roles=ADMIN management.endpoints.web.exposure.include=*
或者,使用
application.yml
:spring: application: name: admin-server server: port: 8080 # 你可以选择其他端口 security: user: name: admin password: admin # 生产环境务必修改密码 roles: ADMIN management: endpoints: web: exposure: include: "*"
spring.application.name
: 设置应用名称,方便识别。server.port
: 设置 Admin Server 监听的端口。spring.security.user.name
和spring.security.user.password
: 设置登录 Admin Server 的用户名和密码。 重要提示:在生产环境中,务必修改默认密码!spring.security.user.roles
: 设置用户的角色,这里设置为 ADMIN,拥有所有权限。management.endpoints.web.exposure.include=*
: 暴露所有的 management endpoints,让 Admin Server 可以获取应用的监控信息。
-
启动 Admin Server
运行
AdminServerApplication.java
,启动 Admin Server。 -
访问 Admin Server
在浏览器中输入
http://localhost:8080
(如果你的端口是 8080),你应该能看到 Admin Server 的登录界面。输入你设置的用户名和密码,登录后就可以看到 Admin Server 的主界面了。
注册 Spring Boot 应用到 Admin Server:让应用乖乖听话
-
添加依赖
在你的 Spring Boot 应用的
pom.xml
文件中,添加以下依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <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>3.1.5</version> <!-- 请使用最新版本,与Admin Server保持一致 --> </dependency>
spring-boot-starter-web
: 提供 Web 功能,让应用可以被访问。spring-boot-starter-actuator
: 提供 Actuator endpoints,用于暴露应用的监控信息。spring-boot-admin-starter-client
: 用于将应用注册到 Admin Server。
-
配置 Spring Boot 应用
在你的 Spring Boot 应用的
application.properties
或application.yml
文件中,添加以下配置:spring.application.name=my-app # 设置应用名称 server.port=8081 # 设置应用端口 management.endpoints.web.exposure.include=* # 暴露所有 Actuator endpoints spring.boot.admin.client.url=http://localhost:8080 # Admin Server 的地址 spring.boot.admin.client.username=admin # Admin Server 的用户名 spring.boot.admin.client.password=admin # Admin Server 的密码
或者,使用
application.yml
:spring: application: name: my-app # 设置应用名称 server: port: 8081 # 设置应用端口 management: endpoints: web: exposure: include: "*" # 暴露所有 Actuator endpoints spring.boot.admin: client: url: http://localhost:8080 # Admin Server 的地址 username: admin # Admin Server 的用户名 password: admin # Admin Server 的密码
spring.application.name
: 设置应用名称,在 Admin Server 中显示。server.port
: 设置应用监听的端口。management.endpoints.web.exposure.include=*
: 暴露所有 Actuator endpoints,让 Admin Server 可以获取应用的监控信息。spring.boot.admin.client.url
: 设置 Admin Server 的地址。spring.boot.admin.client.username
和spring.boot.admin.client.password
: 设置 Admin Server 的用户名和密码,用于应用向 Admin Server 注册。
-
启动 Spring Boot 应用
启动你的 Spring Boot 应用。
-
查看 Admin Server
刷新 Admin Server 的页面,你应该能看到你的 Spring Boot 应用已经注册上去了。点击应用名称,可以查看应用的详细信息,例如健康状况、内存使用、线程信息等等。
高级用法:自定义监控指标和告警
Spring Boot Admin Server 不仅仅能监控 Spring Boot Actuator 提供的默认指标,还可以自定义监控指标,并设置告警规则。
-
自定义监控指标
可以使用 Spring Boot Actuator 提供的
MeterRegistry
来注册自定义指标。例如,我们可以监控一个接口的调用次数:import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.MeterRegistry; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { private final Counter myApiCounter; @Autowired public MyController(MeterRegistry meterRegistry) { this.myApiCounter = meterRegistry.counter("my_api.calls"); } @GetMapping("/my-api") public String myApi() { myApiCounter.increment(); return "Hello, World!"; } }
这段代码定义了一个名为
my_api.calls
的 Counter,每次调用/my-api
接口时,Counter 的值就会加 1。在 Admin Server 中,你可以在应用的 "Metrics" 页面看到这个自定义指标。
-
配置告警
Spring Boot Admin Server 提供了告警功能,可以根据应用的健康状况、指标值等触发告警。
- 创建 Notifier: 首先,需要创建一个 Notifier,用于发送告警通知。 Spring Boot Admin Server 支持多种 Notifier,例如 Email、Slack、Microsoft Teams 等。
- 配置告警规则: 然后,需要配置告警规则,指定告警的条件和触发时要执行的动作。
例如,我们可以配置一个告警规则,当应用的堆内存使用率超过 80% 时,发送邮件通知:
import de.codecentric.boot.admin.server.domain.entities.InstanceRepository; import de.codecentric.boot.admin.server.domain.events.InstanceStatusChangedEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; @Component public class MyAlertHandler { private static final Logger log = LoggerFactory.getLogger(MyAlertHandler.class); private final InstanceRepository instanceRepository; public MyAlertHandler(InstanceRepository instanceRepository) { this.instanceRepository = instanceRepository; } @EventListener public void handleInstanceStatusChangedEvent(InstanceStatusChangedEvent event) { String instanceId = event.getInstance(); instanceRepository.find(instanceId).ifPresent(instance -> { if (instance.getStatusInfo().getStatus().isDown()) { log.warn("Instance {} ({}) is DOWN!", instance.getRegistration().getName(), instance.getId()); // 在这里添加发送告警通知的逻辑,例如发送邮件或调用第三方告警系统 } }); } }
这段代码监听
InstanceStatusChangedEvent
事件,当应用的健康状况变为 DOWN 时,会记录一条警告日志,并可以在这里添加发送告警通知的逻辑。
安全配置:保护你的 Admin Server
Admin Server 暴露了应用的监控信息,因此需要进行安全配置,防止未经授权的访问。
-
修改默认密码
首先,务必修改默认的用户名和密码。在
application.properties
或application.yml
文件中,修改spring.security.user.name
和spring.security.user.password
的值。 -
启用 HTTPS
建议启用 HTTPS,对 Admin Server 的流量进行加密,防止数据泄露。
-
限制访问权限
可以使用 Spring Security 来限制访问权限,只允许特定的用户或 IP 地址访问 Admin Server。
例如,可以使用 Spring Security 的
httpBasic()
认证方式,只允许通过用户名和密码认证的用户访问:import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/actuator/**").permitAll() // 允许 actuator endpoints 被访问 .antMatchers("/assets/**").permitAll() // 允许静态资源被访问 .antMatchers("/login").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .and() .httpBasic(); } }
这段代码配置了 Spring Security,允许
/actuator/**
、/assets/**
和/login
路径被匿名访问,其他所有请求都需要进行身份验证。
总结:Spring Boot Admin Server,你的得力助手
Spring Boot Admin Server 是一款强大的应用监控和管理工具,可以帮助你轻松掌握应用的运行状态,及时发现和解决问题。通过本文的介绍,相信你已经掌握了 Spring Boot Admin Server 的基本用法和高级特性。赶快动手试试吧,让它成为你应用监控的得力助手!
表格:常用配置项
配置项 | 说明 |
---|---|
spring.application.name |
应用名称,用于在 Admin Server 中显示。 |
server.port |
应用监听的端口。 |
management.endpoints.web.exposure.include |
暴露的 Actuator endpoints,* 表示暴露所有 endpoints。 |
spring.boot.admin.client.url |
Admin Server 的地址。 |
spring.boot.admin.client.username |
Admin Server 的用户名。 |
spring.boot.admin.client.password |
Admin Server 的密码。 |
spring.security.user.name |
登录 Admin Server 的用户名。 |
spring.security.user.password |
登录 Admin Server 的密码。 重要提示:在生产环境中,务必修改默认密码! |
spring.security.user.roles |
登录 Admin Server 的用户角色。 |
希望这篇文章能帮助你更好地理解和使用 Spring Boot Admin Server。祝你使用愉快!