2. Prometheus 监控体系基础:架构、数据模型与指标类型
在深入连接池水位巡检之前,必须建立对 Prometheus 监控体系的底层认知。本章将拆解 Prometheus 的核心架构、数据模型以及四种指标类型(Counter、Gauge、Histogram、Summary),为后续配置连接池巡检规则打下坚实基础。
2.1 Prometheus 整体架构
Prometheus 采用“拉取(Pull)”模式采集指标,区别于传统“推送(Push)”模型。其核心组件包括:
- Prometheus Server:负责指标抓取、存储与查询。
- Exporters:将第三方系统(如数据库、中间件)的指标转换为 Prometheus 格式。
- Pushgateway:用于短期任务或无法直接拉取的场景。
- Alertmanager:处理告警去重、分组与通知。
- Service Discovery:动态发现目标实例(Kubernetes、Consul 等)。
架构要点: 连接池巡检通常通过 Exporter(如 MySQL Exporter、Java JMX Exporter)暴露连接池状态,Prometheus Server 定期拉取,再通过 PromQL 计算水位指标。
2.2 数据模型:时间序列与标签
Prometheus 所有数据均以时间序列(Time Series)形式存储。一个时间序列由指标名称(Metric Name)和一组标签(Labels)唯一标识。
| 概念 | 说明 | 示例 |
|---|---|---|
| Metric Name | 描述指标含义,如连接池活跃连接数 | hikaricp_connections_active |
| Labels | 键值对,用于维度区分(实例、数据库名、池名) | {instance="db01", pool="primary"} |
| Sample | 时间戳 + 数值 | @1710000000 15 |
| Time Series | 同一 Metric + Labels 的样本序列 | hikaricp_connections_active{instance="db01", pool="primary"} 15 |
巡检关键: 连接池水位巡检通常按
instance(主机)、pool(连接池名称)或 database 标签分组聚合。标签设计直接影响告警规则的灵活度。
2.3 四种核心指标类型
Prometheus 客户端库提供四种指标类型,理解其语义是配置巡检规则的前提。
2.3.1 Counter(计数器)
- 特点: 只增不减(除非系统重启)。
- 适用场景: 请求总数、错误总数、连接创建总数。
- PromQL 常用函数:
rate()、increase()。 - 连接池示例:
hikaricp_connections_creation_total(连接创建总数)。
2.3.2 Gauge(仪表盘)
- 特点: 可增可减,反映当前瞬时值。
- 适用场景: 内存使用率、连接池活跃连接数、队列深度。
- PromQL 常用函数:
avg()、max()、min()。 - 连接池示例:
hikaricp_connections_active(当前活跃连接数)。
2.3.3 Histogram(直方图)
- 特点: 对观测值(如请求延迟)进行分桶计数,可计算分位数。
- 适用场景: 请求延迟分布、连接获取等待时间。
- PromQL 常用函数:
histogram_quantile()。 - 连接池示例:
hikaricp_connections_acquire_seconds_bucket(连接获取耗时分布)。
2.3.4 Summary(摘要)
- 特点: 类似 Histogram,但直接在客户端计算分位数,无法聚合。
- 适用场景: 已知分位数需求且无需跨实例聚合的场景。
- 连接池示例:
hikaricp_connections_acquire_seconds_summary(连接获取耗时摘要)。
| 指标类型 | 是否可增减 | 典型连接池指标 | 推荐 PromQL |
|---|---|---|---|
| Counter | 只增 | 连接创建总数 | rate(hikaricp_connections_creation_total[5m]) |
| Gauge | 可增可减 | 活跃连接数、空闲连接数 | max(hikaricp_connections_active) |
| Histogram | 分桶计数 | 连接获取等待时间 | histogram_quantile(0.95, ...) |
| Summary | 客户端预计算 | 连接获取耗时摘要 | hikaricp_connections_acquire_seconds_summary{quantile="0.95"} |
2.4 指标类型选择原则
常见误区: 将 Counter 用于瞬时值(如当前连接数),或将 Gauge 用于累计值(如总请求数)。Counter 的
rate() 函数在连接池巡检中用于计算连接创建速率,而 Gauge 直接反映水位高低。
选择指标类型时遵循以下原则:
- 只增不减的累计值 → 使用 Counter(如连接创建总数、连接关闭总数)。
- 可上下波动的瞬时值 → 使用 Gauge(如活跃连接数、空闲连接数、等待获取连接数)。
- 需要分析分布或计算分位数 → 使用 Histogram(如连接获取耗时、SQL 执行耗时)。
- 已知分位数且无需跨实例聚合 → 使用 Summary(如每个实例的 P95 延迟)。
2.5 连接池巡检中的典型指标映射
| 连接池状态 | 指标名称(HikariCP 示例) | 指标类型 | 巡检用途 |
|---|---|---|---|
| 活跃连接数 | hikaricp_connections_active |
Gauge | 当前水位,判断是否接近上限 |
| 空闲连接数 | hikaricp_connections_idle |
Gauge | 空闲资源是否充足 |
| 等待获取连接数 | hikaricp_connections_pending |
Gauge | 是否存在连接饥饿 |
| 连接创建总数 | hikaricp_connections_creation_total |
Counter | 连接创建速率,判断是否频繁创建 |
| 连接获取耗时 | hikaricp_connections_acquire_seconds_bucket |
Histogram | 获取连接延迟分布,P99 延迟 |
实战提示: 在配置 Prometheus 指标时,务必确认 Exporter 暴露的指标类型。例如 HikariCP 的
hikaricp_connections_active 是 Gauge,而 hikaricp_connections_creation_total 是 Counter。错误理解类型会导致 PromQL 计算逻辑出错。