跳到主要内容

监控集成

监控集成基于 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 存在 SecurityFilterChainHttpSecurity(即应用引入了 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.AuthenticationAuditListenerauditevents 端点可用且 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 / lastModified
  • GET /actuator/logfiles/{name}:返回纯文本内容;自动透明解压 .gz / .zip
  • GET /actuator/logfiles/{name}Accept: application/octet-stream):作为附件下载
  • GET /actuator/logfiles/{name}?content=xxx:在文件中搜索关键字,返回匹配行号列表(由 LogSearchEngine 实现,URL 解码后匹配)

启用条件(LogbackCondition):以下任一配置存在即可启用,否则端点不注册。

  • logging.file.name
  • logging.file.path
  • logging.logback.rollingpolicy.file-name-pattern

相关资源