4. 数据采集与聚合:Prometheus与Grafana数据源配置、数据采样频率与聚合窗口、指标标签与维度设计

容量水位看板的核心价值在于将分散的、高基数的原始指标,转化为可决策的、低噪声的容量视图。本章聚焦数据管道的前端——从 Prometheus 采集、Grafana 数据源配置,到采样频率与聚合窗口的权衡,再到标签与维度设计的最佳实践。

4.1 Prometheus 与 Grafana 数据源配置

Prometheus 作为指标存储与查询引擎,Grafana 作为可视化层。两者通过标准的 HTTP API 通信,配置要点如下:

配置项 推荐值 / 说明 容量看板影响
URL http://prometheus-server:9090 Grafana 数据源指向 Prometheus 服务地址
Access Server(默认) 避免浏览器直接暴露 Prometheus 地址
Scrape Interval 15s(全局默认) 决定原始数据粒度,影响聚合窗口选择
Query Timeout 30s 长周期聚合查询需适当放宽
HTTP Method GET 兼容性最佳,避免 POST 缓存问题
配置检查清单: 在 Grafana 数据源设置页点击 "Save & Test",确认返回绿色 "Data source is working" 提示。若失败,检查网络连通性、Prometheus 服务状态及防火墙规则。

4.2 数据采样频率与聚合窗口

采样频率(Scrape Interval)与聚合窗口(Aggregation Window)是容量看板数据质量的基石。两者关系可用以下公式描述:

有效数据点 = 聚合窗口 / 采样频率

例如:聚合窗口 5 分钟,采样频率 15 秒,则每个聚合点包含 20 个原始样本。窗口越大,统计稳定性越高,但实时性下降。

场景 采样频率 聚合窗口 说明
实时水位告警 10s 1m 快速响应突增流量
容量趋势分析 15s 5m 平衡精度与存储成本
月度容量报告 30s 1h 长周期降采样,减少数据量
历史基线建模 60s 1d 极低频率,用于容量规划
常见陷阱: 聚合窗口过小(如 30s)会导致看板曲线抖动剧烈,难以识别真实趋势。建议容量看板的最小聚合窗口不低于 1 分钟,趋势分析不低于 5 分钟。

PromQL 中聚合窗口通过 [duration] 指定,例如:

# 过去 5 分钟的平均 CPU 使用率
avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100

# 过去 1 小时的 P99 内存使用量
quantile_over_time(0.99, node_memory_MemTotal_bytes[1h])

4.3 指标标签与维度设计

标签(Label)是 Prometheus 数据模型的灵魂。合理的标签设计决定了看板的灵活性与查询性能。容量水位看板通常围绕以下维度展开:

  • 资源维度: instance(主机/实例)、device(磁盘)、interface(网卡)
  • 服务维度: service(服务名)、namespace(命名空间)、pod(容器组)
  • 容量维度: type(总量/已用/可用)、unit(字节/百分比)
  • 环境维度: env(prod/staging/dev)、region(地域)、az(可用区)
标签设计原则:
  1. 基数可控: 避免高基数标签(如 user_id、request_id),会导致 Prometheus 内存膨胀。
  2. 命名规范: 使用小写字母 + 下划线,如 node_cpu_seconds_total。
  3. 维度正交: 每个标签代表一个独立维度,避免冗余组合。
  4. 可聚合: 标签值应支持 sum by()、avg by() 等聚合操作。

以下 SVG 展示了从指标采集到看板展示的完整数据流,重点突出采样频率、聚合窗口与标签维度的作用位置:

容量水位看板数据流:采集 → 聚合 → 维度 → 展示 指标源 CPU / 内存 / 磁盘 / 网络 Prometheus 采集 采样频率: 15s 聚合窗口 5m / 1h / 1d 标签维度 instance / service / env Grafana 数据源 Prometheus HTTP API 容量水位看板 实时 / 趋势 / 报告 关键设计决策 1. 采样频率决定原始数据粒度,聚合窗口决定看板平滑度 2. 标签维度应控制在 10 个以内,避免基数爆炸 3. 容量趋势看板推荐使用 5m 聚合窗口 + 15s 采样频率 4. 标签命名统一使用小写 + 下划线,如 node_memory_usage_bytes 5. 每个看板面板应明确标注聚合窗口与采样频率,方便后续排查

4.4 标签维度设计实战案例

以一个典型的 MySQL 容量看板为例,展示标签维度的分层设计:

指标名称 标签维度 聚合方式 看板用途
mysql_global_status_innodb_data_read instance, env rate[5m] 实时读取吞吐量
mysql_global_status_connections instance, region avg_over_time[1h] 连接数趋势
mysql_global_variables_max_connections instance 直接取值 容量上限基准
mysql_global_status_innodb_row_lock_current_waits instance, database max_over_time[5m] 锁竞争水位
标签复用策略: 在 Prometheus 的 relabel_configs 中,可以将 __meta_kubernetes_pod_label_env 等元标签映射为统一的 env 标签,确保所有指标的环境维度一致,便于 Grafana 全局变量联动。

4.5 聚合窗口与采样频率的权衡矩阵

以下矩阵帮助你在不同场景下快速选择参数组合:

需求 采样频率 聚合窗口 存储成本 实时性
秒级告警 10s 30s 高 极高
分钟级监控 15s 5m 中 高
小时级趋势 30s 1h 低 中
天级容量规划 60s 1d 极低 低

在实际容量看板中,建议为不同面板配置独立的聚合窗口:实时水位面板使用 5m 窗口,趋势面板使用 1h 窗口,报告面板使用 1d 窗口。通过 Grafana 的 PromQL 查询参数动态调整,无需修改数据源配置。