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 计算水位指标。
Prometheus 核心架构 Prometheus 核心架构 被监控目标 Exporter Pushgateway Prometheus Server 抓取 / 存储 / 查询 Alertmanager Grafana / API 服务发现 (K8s/Consul) 说明 实线:Pull 模式 虚线:Push 模式 连接池指标通过 Exporter 暴露

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"}
四种指标类型对比 四种指标类型对比 Counter 只增不减 Gauge 可增可减 Histogram 分桶计数 Summary 预计算分位数 应用场景 • 请求总数 • 错误总数 应用场景 • 活跃连接数 • 内存使用率 应用场景 • 延迟分布 • 等待时间 应用场景 • 已知分位数 • 无需聚合 连接池巡检指标示例 Counter: 连接创建总数 | Gauge: 活跃连接数 | Histogram: 获取等待时间 | Summary: 耗时摘要

2.4 指标类型选择原则

常见误区: 将 Counter 用于瞬时值(如当前连接数),或将 Gauge 用于累计值(如总请求数)。Counter 的 rate() 函数在连接池巡检中用于计算连接创建速率,而 Gauge 直接反映水位高低。

选择指标类型时遵循以下原则:

  1. 只增不减的累计值 → 使用 Counter(如连接创建总数、连接关闭总数)。
  2. 可上下波动的瞬时值 → 使用 Gauge(如活跃连接数、空闲连接数、等待获取连接数)。
  3. 需要分析分布或计算分位数 → 使用 Histogram(如连接获取耗时、SQL 执行耗时)。
  4. 已知分位数且无需跨实例聚合 → 使用 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 计算逻辑出错。