添加spring-session-data-redis后Tomcat会话指标未追踪,咨询SpringBoot解决方案
Spring Session Data Redis替代Tomcat会话指标的方案
添加org.springframework.session:spring-session-data-redis依赖后,Tomcat原生会话指标会失效——因为此时会话管理逻辑被Spring Session接管,Tomcat不再负责会话的创建、销毁等生命周期操作,自然无法生成对应的tomcat_sessions_*指标。
一、Spring Boot提供的便捷指标方案
Spring Session自带了部分替代指标,只要项目引入spring-boot-starter-actuator并开启metrics功能,这些指标会自动暴露,对应关系如下:
spring_sessions_active→ 对应原tomcat_sessions_active_current_sessions(当前活跃会话数)spring_sessions_created_total→ 对应原tomcat_sessions_created_sessions_total(累计创建会话数)spring_sessions_expired_total→ 对应原tomcat_sessions_expired_sessions_total(累计过期会话数)
开启方式:确保配置文件中开启metrics暴露,示例配置:
management.endpoints.web.exposure.include=metrics management.metrics.enable.spring.session=true
二、需手动实现的缺失指标
对于以下原Tomcat指标,Spring Session没有提供原生支持,需要自行实现:
tomcat_sessions_active_max_sessions(历史最大活跃会话数)tomcat_sessions_alive_max_seconds(会话最长存活时间)tomcat_sessions_rejected_sessions_total(累计拒绝会话数)
实现思路参考:
历史最大活跃会话数:
自定义SessionRepository装饰类,在会话创建/销毁时更新当前活跃会话数,同时维护一个全局最大值变量,通过Micrometer将其注册为Gauge指标。会话最长存活时间:
在会话创建时记录时间戳,会话销毁时计算存活时长,维护全局最长存活时间值,注册为Gauge指标。累计拒绝会话数:
若配置了会话最大限制(如spring.session.max-sessions),可监听SessionCreationEvent,当捕获到SessionLimitExceededException时,累加计数器并注册为Counter指标。
内容的提问来源于stack exchange,提问作者user32570680




