Spring Boot Admin 无法监控部分服务的排查与修复
各位朋友,大家好!今天我们来聊一聊 Spring Boot Admin 无法监控部分服务的问题。这个问题在实际开发中很常见,原因也多种多样。我们将从各个方面入手,详细讲解排查思路和修复方法,帮助大家更好地解决这个问题。
一、问题现象与排查思路
首先,我们需要明确问题现象:Spring Boot Admin 服务运行正常,能够监控一部分 Spring Boot 应用,但有一部分应用无法被监控到。
针对这个问题,我们的排查思路可以分为以下几个步骤:
确认被监控服务是否启动成功: 这是最基本的一步,确保问题服务确实在运行,并且没有启动失败。检查被监控服务的依赖配置: 确认被监控服务是否正确引入了 Spring Boot Admin Client 的依赖。核对被监控服务的配置信息: 检查被监控服务的 或
application.yml 文件中与 Spring Boot Admin Client 相关的配置是否正确。查看被监控服务的日志信息: 仔细阅读被监控服务的日志,查找是否有与 Spring Boot Admin Client 相关的错误或警告信息。检查 Spring Boot Admin Server 的配置: 确认 Spring Boot Admin Server 的配置是否正确,例如服务发现方式是否配置正确。网络连通性测试: 确认被监控服务和 Spring Boot Admin Server 之间的网络是否畅通。版本兼容性问题: 确认 Spring Boot Admin Server 和 Client 的版本是否兼容。权限问题: 检查被监控服务是否有权限访问 Spring Boot Admin Server。
application.properties
下面我们将逐一深入分析这些步骤,并提供相应的解决方案。
二、被监控服务依赖配置检查
被监控服务需要引入 Spring Boot Admin Client 的依赖才能被 Spring Boot Admin Server 监控到。通常,我们使用 Maven 或 Gradle 来管理依赖。
Maven:
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.7.x</version> <!-- 使用最新版本,替换 x 为最新小版本号 -->
</dependency>
Gradle:
dependencies {
implementation 'de.codecentric:spring-boot-admin-starter-client:2.7.x' // 使用最新版本,替换 x 为最新小版本号
}
注意:
的版本需要与 Spring Boot Admin Server 的版本兼容。建议使用相同的版本。如果你的项目使用了 Spring Cloud,并且已经引入了
spring-boot-admin-starter-client 或类似的注册中心客户端依赖,那么可以省略 Spring Boot Admin Client 的依赖,直接通过注册中心进行服务发现。
spring-cloud-starter-netflix-eureka-client
排查方法:
打开被监控服务的 (Maven) 或
pom.xml (Gradle) 文件。确认是否包含了上述依赖。确认依赖的版本号是否正确。重新构建项目,确保依赖被正确加载。
build.gradle
三、被监控服务配置信息核对
Spring Boot Admin Client 需要一些配置信息才能正确连接到 Spring Boot Admin Server。这些配置信息通常在 或
application.yml 文件中配置。
application.properties
常用配置项:
| 配置项 | 说明 |
|---|---|
|
Spring Boot Admin Server 的 URL 地址。 |
|
被监控服务的实例名称。如果不配置,默认使用 。 |
|
被监控服务的管理端点上下文路径。默认值为 。如果你的应用使用了自定义的上下文路径,需要进行相应的修改。 |
|
被监控服务的管理端点端口。默认值为 。如果你的应用的管理端点使用了不同的端口,需要进行相应的修改。 |
|
被监控服务的管理端点地址。默认值为 。如果你的应用的管理端点绑定了不同的地址,需要进行相应的修改。 |
|
连接 Spring Boot Admin Server 的用户名(如果 Spring Boot Admin Server 启用了安全认证)。 |
|
连接 Spring Boot Admin Server 的密码(如果 Spring Boot Admin Server 启用了安全认证)。 |
|
是否启用 Spring Boot Admin Client。默认为 。 |
示例配置 (application.yml):
spring:
application:
name: my-service
boot:
admin:
client:
url: http://localhost:8080 # Spring Boot Admin Server 的地址
instance:
name: my-service-instance
metadata:
management:
context-path: /actuator
port: 8081 # 如果 actuator 端口和 server 端口不一样
address: 127.0.0.1 # 如果 actuator 绑定了指定 IP
username: admin # 如果 SBA 启用了 security
password: password # 如果 SBA 启用了 security
排查方法:
打开被监控服务的 或
application.yml 文件。确认是否包含了上述必要的配置项。确认配置项的值是否正确,例如 Spring Boot Admin Server 的 URL 地址是否正确。特别注意
application.properties、
management.context-path 和
management.port 这三个配置项,确保它们与被监控服务的实际配置一致。如果 Spring Boot Admin Server 启用了安全认证,确保配置了正确的用户名和密码。
management.address
四、被监控服务日志信息查看
被监控服务的日志信息是排查问题的重要线索。我们需要仔细阅读日志,查找是否有与 Spring Boot Admin Client 相关的错误或警告信息。
常见的错误信息:
或
Connection refused:表示无法连接到 Spring Boot Admin Server。
Connection timeout:表示认证失败,用户名或密码错误。
Unauthorized:表示无法从注册中心获取到 Spring Boot Admin Server 的实例信息。
No instances available for <service-id>:表示注册到 Spring Boot Admin Server 失败。
Registration failed
排查方法:
查看被监控服务的日志文件,例如 或
application.log。搜索关键词,例如
catalina.out,
spring-boot-admin,
registration,
connection,
error。仔细阅读错误信息,尝试理解错误的原因。根据错误信息,修改配置或代码,解决问题。
warn
示例:
如果日志中出现以下错误信息:
2023-10-27 10:00:00.000 ERROR [my-service,1234567890abcdef,1234567890abcdef] 1 --- [istrationTask] de.codecentric.boot.admin.client.registration.RegistrationClient : Registration at spring-boot-admin failed: 401 Unauthorized
这表示认证失败,我们需要检查 和
spring.boot.admin.client.username 配置是否正确。
spring.boot.admin.client.password
五、Spring Boot Admin Server 配置检查
Spring Boot Admin Server 的配置也会影响到服务的监控。我们需要确保 Spring Boot Admin Server 的配置正确,例如服务发现方式是否配置正确。
常用的配置项:
| 配置项 | 说明 |
|---|---|
|
Spring Boot Admin 的页面标题。 |
|
Spring Boot Admin 的页面图标。 |
|
是否启用 Spring Boot Admin Client。默认为 。在 Spring Boot Admin Server 中,这个配置通常没有意义,因为它本身就是 Server。 |
|
是否启用服务发现。默认为 。如果设置为 ,则需要手动配置被监控服务的 URL 地址。 |
|
Eureka Server 的地址。如果使用 Eureka 进行服务发现,需要配置此项。 |
|
Spring Security 的用户名(如果启用了安全认证)。 |
|
Spring Security 的密码(如果启用了安全认证)。 |
示例配置 (application.yml):
spring:
application:
name: spring-boot-admin-server
boot:
admin:
ui:
title: My Spring Boot Admin
discovery:
enabled: true # 启用服务发现
security:
user:
name: admin
password: password
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/ # Eureka Server 的地址
排查方法:
打开 Spring Boot Admin Server 的 或
application.yml 文件。确认是否启用了服务发现 (
application.properties)。如果使用 Eureka 进行服务发现,确认
spring.boot.admin.discovery.enabled=true 配置是否正确。如果启用了安全认证,确认
eureka.client.service-url.defaultZone 和
spring.security.user.name 配置是否正确。
spring.security.user.password
六、网络连通性测试
确保被监控服务和 Spring Boot Admin Server 之间的网络畅通。可以使用 或
ping 命令进行测试。
telnet
测试方法:
在被监控服务的服务器上,执行 命令。如果
ping <Spring Boot Admin Server 的 IP 地址> 命令无法正常执行,表示网络不通。需要检查防火墙设置、网络配置等。在被监控服务的服务器上,执行
ping 命令。如果
telnet <Spring Boot Admin Server 的 IP 地址> <Spring Boot Admin Server 的端口> 命令无法连接到 Spring Boot Admin Server,表示端口不通。需要检查防火墙设置、端口配置等。
telnet
示例:
ping 192.168.1.100
telnet 192.168.1.100 8080
七、版本兼容性问题
Spring Boot Admin Server 和 Client 的版本需要兼容。如果不兼容,可能会导致监控失败。
建议:
使用相同版本的 Spring Boot Admin Server 和 Client。查阅官方文档,了解版本兼容性信息。
排查方法:
查看 Spring Boot Admin Server 和 Client 的版本号。查阅官方文档,确认版本是否兼容。如果版本不兼容,尝试升级或降级版本。
八、权限问题
如果 Spring Boot Admin Server 启用了安全认证,需要确保被监控服务有权限访问 Spring Boot Admin Server。
解决方案:
在 Spring Boot Admin Server 中配置正确的用户角色和权限。在被监控服务的配置中,配置正确的用户名和密码。如果使用了 OAuth2 或其他认证方式,确保配置正确。
示例 (Spring Boot Admin Server SecurityConfig):
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final String adminUsername;
private final String adminPassword;
public SecurityConfig(@Value("${spring.security.user.name}") String adminUsername,
@Value("${spring.security.user.password}") String adminPassword) {
this.adminUsername = adminUsername;
this.adminPassword = adminPassword;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl("/");
http.authorizeRequests()
.antMatchers("/assets/**").permitAll()
.antMatchers("/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").successHandler(successHandler).and()
.logout().logoutUrl("/logout").and()
.httpBasic().and()
.csrf().disable(); // 生产环境需要开启 csrf 保护
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser(adminUsername).password("{noop}" + adminPassword).roles("ADMIN");
}
}
排查方法:
检查 Spring Boot Admin Server 的安全配置。确认被监控服务的用户名和密码配置是否正确。查看 Spring Boot Admin Server 的日志,查找是否有认证相关的错误信息。
九、其他常见问题
除了上述常见问题外,还有一些其他情况可能导致 Spring Boot Admin 无法监控部分服务:
Actuator 端点未暴露: 确保被监控服务的 Actuator 端点已暴露。可以在 中配置:
application.yml
management:
endpoints:
web:
exposure:
include: "*"
Actuator 端点安全配置: 确保 Actuator 端点的安全配置允许 Spring Boot Admin Server 访问。
Spring Cloud Gateway 路由配置: 如果使用 Spring Cloud Gateway,确保路由配置正确,将请求转发到被监控服务的 Actuator 端点。
注册中心问题: 如果使用注册中心,确保注册中心运行正常,并且被监控服务已成功注册到注册中心。
十、解决案例分析
案例一:Actuator 端口与 Server 端口不一致
某服务正常启动,也注册到了 Eureka,但是 SBA 一直无法监控。查看服务日志,发现 SBA Client 成功注册,但是一直报 connection refused。仔细排查发现该服务的 Actuator 端口和 Server 端口不一致,Server 端口是 8080,Actuator 端口是 8081。
解决方案:
在服务的 中添加如下配置:
application.yml
spring:
boot:
admin:
client:
instance:
metadata:
management:
port: 8081
案例二:SBA Client 和 Server 版本不一致
某服务升级了 SBA Client 的版本,但是 SBA Server 的版本没有升级,导致监控失败。
解决方案:
将 SBA Server 的版本升级到与 SBA Client 相同的版本。
十一、Debugging技巧
当遇到无法监控服务的问题时,可以使用以下 Debugging 技巧:
设置日志级别: 将 Spring Boot Admin Client 的日志级别设置为 DEBUG,可以输出更详细的日志信息,帮助定位问题。
logging:
level:
de.codecentric.boot.admin.client: DEBUG
使用断点调试: 在 Spring Boot Admin Client 的相关代码中设置断点,可以跟踪代码的执行流程,了解 Spring Boot Admin Client 的工作原理。
抓包分析: 使用 Wireshark 等工具抓包分析,可以查看 Spring Boot Admin Client 和 Server 之间的网络通信情况。
十二、排查思路总结
通过以上步骤,我们应该能够找到 Spring Boot Admin 无法监控部分服务的原因,并采取相应的解决方案。总结一下,排查思路如下:
基础检查: 服务是否启动成功?依赖是否正确引入?配置核对: 或
application.yml 配置是否正确?尤其是 URL、端口、用户名密码等。日志分析: 查看服务和 SBA Server 的日志,是否有错误或警告信息?网络测试:
application.properties 和
ping 测试网络连通性。版本兼容: SBA Client 和 Server 的版本是否兼容?权限检查: 是否存在权限问题?其他问题: Actuator 端点是否暴露?安全配置是否正确?
telnet
希望今天的分享能够帮助大家解决 Spring Boot Admin 无法监控部分服务的问题。感谢大家的收听!
维护和持续监控的重要性
Spring Boot Admin 的监控不仅仅是配置完成就结束了,需要定期维护和持续监控,确保所有服务都能被正确监控,及时发现并解决潜在问题。






![[C++探索之旅] 第一部分第十一课:小练习,猜单词 - 鹿快](https://img.lukuai.com/blogimg/20251015/da217e2245754101b3d2ef80869e9de2.jpg)










暂无评论内容