2. 连接池核心指标:活跃连接数、空闲连接数、等待队列长度、连接超时次数、连接创建速率、连接销毁速率

连接池是数据库、缓存、微服务 gRPC 等中间件与上游服务之间的关键资源层。水位巡检的核心在于持续观测连接池的 存量、流量 与 异常 三类指标。本章逐一拆解六个核心指标的定义、采集方式与 PromQL 表达。

2.1 指标全景图

下表从语义、典型 Prometheus Metric Name、数据类型与巡检价值四个维度对齐六个指标:

指标名称 Prometheus Metric 示例 类型 巡检价值
活跃连接数 db_connections_active Gauge 当前正在执行查询的连接数,反映并发压力
空闲连接数 db_connections_idle Gauge 可被复用的连接数,过低则频繁创建新连接
等待队列长度 db_connections_waiting Gauge 请求排队等待连接的线程数,直接反映连接饥饿
连接超时次数 db_connections_timeouts_total Counter 获取连接超时的累计次数,异常信号
连接创建速率 rate(db_connections_created_total[1m]) Counter → Rate 每秒新建连接数,过高说明连接复用率低
连接销毁速率 rate(db_connections_destroyed_total[1m]) Counter → Rate 每秒关闭连接数,与创建速率配合判断连接抖动
巡检原则: 活跃 + 空闲 ≈ 总连接数;等待队列长度 > 0 且持续增长时,必须立即触发告警。

2.2 活跃连接数与空闲连接数

这两个 Gauge 指标构成连接池的 水位基础。活跃连接数代表正在被线程占用的连接;空闲连接数代表已建立但未被使用的连接。两者之和应接近连接池的 max_total 上限。

  • 活跃连接数过高:接近 max_total 时,新请求将进入等待队列或直接超时。
  • 空闲连接数过低:接近 0 时,每次请求都可能触发创建新连接,增加延迟。
  • 空闲连接数过高:超过 max_idle 配置时,说明连接池收缩策略失效,浪费内存。
# 活跃连接占比(水位)
sum by (instance) (
  db_connections_active
  / on (instance) (db_connections_active + db_connections_idle)
) > 0.85

2.3 等待队列长度

等待队列长度是连接池 饥饿程度 的直接体现。当所有连接都被占用且空闲连接数为 0 时,新请求会进入阻塞队列。该指标为 Gauge,正常值应为 0 或极低。

关键阈值: 等待队列长度 > 0 持续超过 10 秒,说明连接池容量不足或后端响应变慢。若队列长度持续增长,则可能引发级联超时。
# 等待队列瞬时告警
db_connections_waiting > 0

# 等待队列持续告警(5 分钟内均值 > 0)
avg_over_time(db_connections_waiting[5m]) > 0

2.4 连接超时次数

连接超时次数是 Counter 类型,记录从连接池获取连接时因等待超时而失败的累计次数。该指标通常由连接池客户端(如 HikariCP、Druid、JedisPool)暴露。

  • 绝对值:db_connections_timeouts_total 在时间窗口内持续增加,说明连接池已无法满足并发需求。
  • 速率:rate(db_connections_timeouts_total[1m]) 应保持为 0;一旦 > 0,需立即定位。
# 超时速率告警(1 分钟内出现任何超时)
rate(db_connections_timeouts_total[1m]) > 0

2.5 连接创建速率与销毁速率

这两个速率指标通过 Counter 的 rate() 函数计算,反映连接池的 生命周期周转 情况。

场景 创建速率 销毁速率 诊断结论
正常 低且平稳 低且平稳 连接复用率高,池化效果良好
创建飙升 突然升高 不变或略升 空闲连接不足,大量请求触发新建
创建≈销毁 高 高 连接抖动(Connection Thrashing),需检查 max_lifetime 或后端稳定性
销毁 > 创建 低 高 连接池正在收缩,可能因空闲超时或后端主动断开
# 连接抖动检测:创建速率与销毁速率之比超过 1.5 倍
rate(db_connections_created_total[1m])
/
rate(db_connections_destroyed_total[1m]) > 1.5

2.6 六指标联动关系图

下图展示六个核心指标在连接池生命周期中的位置与数据流向:

连接池核心指标联动关系 连接池核心指标联动关系 连接池 活跃连接数 / 空闲连接数 Gauge 水位 等待队列 等待队列长度 连接创建 创建速率 (Counter→Rate) 连接销毁 销毁速率 (Counter→Rate) 连接超时 超时次数 (Counter) 请求排队 新建连接 关闭连接 超时失败 创建过快导致 巡检顺序:先看水位(活跃/空闲)→ 再看等待队列 → 最后检查创建/销毁速率与超时次数

2.7 指标采集注意事项

  • Gauge 指标:活跃连接数、空闲连接数、等待队列长度应使用 avg_over_time 或 max_over_time 降噪,避免瞬时抖动触发误告警。
  • Counter 指标:连接超时次数、创建/销毁总数必须使用 rate() 或 increase() 转换为速率,不能直接对原始 Counter 设置阈值。
  • 标签对齐:确保 instance、pool_name、datasource 等标签在指标间一致,否则比率计算会出错。
最佳实践: 在 Prometheus 的 recording rules 中预计算 rate(db_connections_created_total[1m]) 和 rate(db_connections_destroyed_total[1m]),避免告警规则中重复计算开销。