监控集成
监控集成基于 Spring Boot Admin Client 做了一层客户端侧扩展,无需引入 Server 端代码即可让应用以更丰富的元数据、更安全的端点暴露方式与更强的日志可观测性接入到 Spring Boot Admin。
主要扩展
- 环境元数据自动上报:自动注入 IP 与 active profiles 到注册元数据
- Endpoint Basic 安全:根据 client 凭据条件式启用 Actuator 端点鉴权
- 认证审计监听:将 Spring Security 认证事件桥接到
AuditEventRepository - HTTP Trace 内存仓库兜底:补齐 Spring Boot 2.2+ 默认未注册的
HttpTraceRepository - Logfiles 自定义 Endpoint:发现 / 查看 / 下载 / 搜索 RollingFile 日志文件(含
.gz/.zip)
安装
Maven
<dependency>
<groupId>com.jeeapp.spring.boot</groupId>
<artifactId>monitor-spring-boot-starter</artifactId>
</dependency>
Gradle
implementation 'com.jeeapp.spring.boot:monitor-spring-boot-starter'
配置
# 暴露完整的健康详情
management.endpoint.health.show-details=always
# 暴露所有 Actuator Web 端点(按需收紧)
management.endpoints.web.exposure.include=*
# httptrace 端点记录的字段
management.trace.http.include=request_headers,response_headers,authorization_header,principal,remote_address,time_taken
# Spring Boot Admin Client 接入凭据;配置 username/password 后会自动启用 Endpoint Basic 鉴权
spring.boot.admin.client.username=xxx
spring.boot.admin.client.password=xxx
# Spring Boot Admin Server 地址
spring.boot.admin.client.url=xxxx
# 上报到 Server 的当前实例 service URL(容器/反向代理场景常用)
spring.boot.admin.client.instance.serviceUrl=xxx
关键说明:
management.endpoints.web.exposure.include=*:让所有 Actuator 端点(含本 Starter 新增的logfiles)通过 HTTP 暴露。spring.boot.admin.client.username/password:一旦配置,MonitorAutoConfiguration.EndpointSecurityConfiguration会自动注册SecurityFilterChain,对全部 Actuator 端点开启 HTTP Basic 鉴权(无 Session)。management.trace.http.include:与新增的InMemoryHttpTraceRepository配合,决定httptrace端点能看到哪些字段。
扩展能力
环境元数据贡献者
com.jeeapp.monitor.metadata.EnvironmentMetadataContributor 实现了 Spring Boot Admin 的 MetadataContributor,自动把以下键值合并进注册元数据:
tags.ip:本机 IP(InetAddress.getLocalHost())tags.env:当前 active profiles(多 profile 以逗号分隔)
效果:在 Admin UI 的实例标签中可直接看到 IP 与环境,便于多实例区分。
Endpoint Basic 鉴权
MonitorAutoConfiguration.EndpointSecurityConfiguration 在以下条件全部满足时生效:
- classpath 存在
SecurityFilterChain与HttpSecurity(即应用引入了 spring-security) - 配置项
spring.boot.admin.client.username非空
此时自动注册:
- 一条
@Order(BASIC_AUTH_ORDER)的SecurityFilterChain,仅匹配EndpointRequest.toAnyEndpoint(),强制认证 + 关闭 CSRF + Stateless Session - 一个默认的
clientUserDetailsService(基于client.username/client.password内存用户),可通过同名 Bean 覆盖
认证审计监听
com.jeeapp.monitor.security.AuthenticationAuditListener 在 auditevents 端点可用且 classpath 存在 AbstractAuthenticationEvent 时自动注册:
- 监听
AuthenticationSuccessEvent/AbstractAuthenticationFailureEvent - 写入
AuditEvent(类别AUTHENTICATION_SUCCESS/AUTHENTICATION_FAILURE)到自定义的InMemoryAuditEventRepository - 仓库实现会自动过滤掉 Admin Client 自身用户名,避免心跳/Endpoint 拉取产生噪声
HTTP Trace 内存仓库
Spring Boot 2.2+ 默认不再注册 HttpTraceRepository。当 httptrace 端点启用(management.endpoints.web.exposure.include 包含 httptrace)时,MonitorAutoConfiguration.HttpTraceEndpointConfiguration 会自动注册 InMemoryHttpTraceRepository,让端点恢复可用。
Logfiles Endpoint
com.jeeapp.monitor.logback.LogbackWebEndpoint(端点 id:logfiles)通过反射 Logback 的 RollingFileAppender + TimeBasedRollingPolicy 自动发现日志目录与文件名模式,提供以下读操作:
GET /actuator/logfiles:返回日志文件列表(按修改时间倒序),每项包含name/size/lastModifiedGET /actuator/logfiles/{name}:返回纯文本内容;自动透明解压.gz/.zipGET /actuator/logfiles/{name}(Accept: application/octet-stream):作为附件下载GET /actuator/logfiles/{name}?content=xxx:在文件中搜索关键字,返回匹配行号列表(由LogSearchEngine实现,URL 解码后匹配)
启用条件(LogbackCondition):以下任一配置存在即可启用,否则端点不注册。
logging.file.namelogging.file.pathlogging.logback.rollingpolicy.file-name-pattern