Actuator API返回正常但审计日志记录404错误排查
问题场景
我在Spring Boot应用的application.yaml中配置了Actuator如下:
#Actuator management: endpoints: web: base-path: /manage exposure: include: "env,health,heapdump,info,metrics,prometheus,scheduledtasks,threaddump" metrics: se-global-registry: false export: prometheus: enabled: true # 是否开启Prometheus指标导出 step: 1m # 上报频率
部署后通过Postman调用http://localhost:{PORT}/manage/health,接口正常返回:
{ "status": "UP" }
但查看audit.log时,发现该接口的调用记录中存在404错误日志。
可能原因及解决方案
1. 审计组件路径匹配不匹配
审计拦截器/过滤器的路径规则未包含Actuator的base-path前缀(/manage)。比如审计逻辑监听的是/health而非/manage/health,导致请求进入时先触发“路径未匹配”的404日志,后续才被Actuator的正确处理逻辑路由,返回200。
解决:检查审计组件的路径配置,确保匹配规则覆盖/manage/**(比如自定义拦截器设置addPathPatterns("/manage/**"),或Spring Security中对Actuator路径的正确配置)。
2. 请求处理顺序问题
Actuator的端点通过特殊的EndpointHandlerMapping处理,若审计拦截器的执行顺序早于Actuator的请求映射逻辑,会在请求未匹配到Actuator端点前就记录404状态,后续请求才被正确处理返回200,但日志未更新最终状态。
解决:调整拦截器/过滤器的执行顺序,让Actuator的请求处理逻辑优先执行;或修改审计日志的记录时机,延迟到请求处理完成阶段(比如过滤器的afterCompletion方法),确保获取最终响应状态码。
3. 路径冲突
应用中存在其他控制器、过滤器映射了/manage/health或相似路径,导致请求先被这些组件处理,因找不到对应逻辑产生404日志,之后请求才流转到Actuator的处理逻辑返回正常结果。
解决:排查应用内的路径映射,移除或修改冲突的路径配置,确保/manage/health仅由Actuator端点处理。
4. 审计日志的中间状态误记录
部分审计组件会在请求处理的早期阶段(如刚进入过滤器链)记录临时状态,此时Actuator的特殊处理逻辑尚未触发,因此标记为404,而后续实际处理完成后未更新日志状态,导致最终日志保留了中间错误状态。
解决:修改审计日志的逻辑,仅在请求完全处理完成后记录最终的响应状态,避免记录中间过程的临时状态。
内容的提问来源于stack exchange,提问作者Shubham Shekhar

