4. Java应用连接池指标暴露(以HikariCP为例)
HikariCP 作为 Spring Boot 2.x/3.x 的默认连接池,原生集成了 Micrometer 指标门面。只需在项目中引入 Micrometer 注册表依赖,HikariCP 便会自动将连接池的核心水位指标暴露给 Prometheus。本章将详细说明配置步骤、指标清单及验证方法。
前置条件:应用已集成 Spring Boot Actuator 和 Micrometer Prometheus 注册表。若未集成,请先添加以下依赖(以 Maven 为例)。
4.1 依赖配置
在 pom.xml 中添加以下两个依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
Spring Boot 自动配置会检测到 HikariCP 在类路径中,并自动创建 HikariPoolMXBean 的 Micrometer 绑定器。无需额外编写代码。
4.2 暴露 Prometheus 端点
在 application.yml 中确保 Actuator 暴露 Prometheus 端点:
management:
endpoints:
web:
exposure:
include: health,info,prometheus
metrics:
export:
prometheus:
enabled: true
重启应用后,访问 /actuator/prometheus 即可看到以 hikaricp_ 为前缀的指标。
4.3 核心指标清单
HikariCP 通过 Micrometer 暴露以下关键水位指标:
| 指标名称 | 类型 | 含义 | 水位判断依据 |
|---|---|---|---|
hikaricp_connections_active |
Gauge | 当前活跃连接数(正在被使用的连接) | 接近 maximumPoolSize 时告警 |
hikaricp_connections_idle |
Gauge | 当前空闲连接数 | 持续为 0 表示池耗尽 |
hikaricp_connections_pending |
Gauge | 等待获取连接的线程数(排队数) | > 0 表示连接不足 |
hikaricp_connections_timeout_total |
Counter | 连接超时总次数(累计值) | 任何非零值均需排查 |
hikaricp_connections_max |
Gauge | 配置的最大连接数 | 用于计算使用率 |
hikaricp_connections_min |
Gauge | 配置的最小空闲连接数 | 用于判断池缩容下限 |
hikaricp_connections_creation_seconds |
Histogram | 连接创建耗时分布 | P99 过高说明数据库响应慢 |
巡检重点:日常水位巡检应重点关注
hikaricp_connections_active 与 hikaricp_connections_pending 两个指标。当 pending > 0 且持续上升时,说明连接池已无法满足并发请求,需要扩容或优化 SQL。
4.4 指标暴露流程架构
下图展示了从 HikariCP 连接池到 Prometheus 的完整指标暴露链路:
4.5 配置示例与验证
以下是一个完整的 HikariCP 连接池配置示例(application.yml):
spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
idle-timeout: 300000
connection-timeout: 20000
max-lifetime: 1200000
pool-name: MyServicePool
配置完成后,通过 curl 验证指标是否正常暴露:
curl -s http://localhost:8080/actuator/prometheus | grep hikaricp
预期输出示例:
# HELP hikaricp_connections_active Current active connections
# TYPE hikaricp_connections_active gauge
hikaricp_connections_active{pool="MyServicePool",} 3.0
# HELP hikaricp_connections_idle Current idle connections
# TYPE hikaricp_connections_idle gauge
hikaricp_connections_idle{pool="MyServicePool",} 5.0
# HELP hikaricp_connections_pending Pending threads waiting for a connection
# TYPE hikaricp_connections_pending gauge
hikaricp_connections_pending{pool="MyServicePool",} 0.0
常见问题:如果
1.
2. 是否引入了
3. 如果使用 Spring Boot 3.x,需确保
/actuator/prometheus 端点返回 404,请检查:1.
management.endpoints.web.exposure.include 是否包含 prometheus。2. 是否引入了
micrometer-registry-prometheus 依赖(注意版本与 Spring Boot 版本兼容)。3. 如果使用 Spring Boot 3.x,需确保
io.micrometer:micrometer-registry-prometheus 版本为 1.11+。
4.6 自定义指标标签
有时需要为连接池指标添加自定义标签(如环境、机房),可通过 MeterFilter 实现:
@Configuration
public class MetricsConfig {
@Bean
public MeterFilter customMeterFilter() {
return MeterFilter.commonTags(
Tags.of("env", "production", "region", "cn-east-1")
);
}
}
添加后,Prometheus 指标会携带 env="production",region="cn-east-1" 标签,便于多环境统一监控。