监控集成
监控集成基于 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 覆盖