4. 应用画像方法:通过 Prometheus/Grafana 监控采集应用实际存储使用趋势

应用画像是容量规划的基石。脱离实际负载的估算往往导致过度配置或资源不足。本节将讲解如何利用 Prometheus 与 Grafana 构建应用存储画像,采集容量增长曲线与 IO 模式,为后续集群资源估算提供精确输入。

4.1 应用画像的核心维度

一个完整的应用存储画像需要覆盖以下四个维度,缺一不可:

维度 关键指标 采集来源 规划用途
容量增长 PVC 使用率、总容量、已用容量 kubelet / csi-exporter 确定扩容周期与预留水位
IOPS 读写 IOPS、平均队列深度 node-exporter / csi-exporter 选择存储后端类型(SSD/HDD)
吞吐量 读写带宽(MB/s) node-exporter / csi-exporter 规划网络带宽与存储节点吞吐
IO 时延 平均读写延迟(ms)、P99 延迟 csi-exporter / 应用 sidecar 判断是否需要本地盘或缓存加速
专家建议: 不要只采集 1 小时的数据。容量增长曲线至少需要 7 天的连续数据,IO 模式则需要覆盖业务高峰与低峰时段(通常 24 小时以上),才能反映真实特征。

4.2 关键 Prometheus 指标与采集配置

以下是指标采集的核心 PromQL 语句与配置要点:

4.2.1 容量增长曲线

# PVC 已用容量百分比(按 PVC 维度)
kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes * 100

# 按命名空间聚合总容量增长趋势
sum by (namespace) (
  kubelet_volume_stats_used_bytes
) / sum by (namespace) (
  kubelet_volume_stats_capacity_bytes
) * 100

# 预测 30 天后容量(使用线性回归预测函数)
predict_linear(kubelet_volume_stats_used_bytes[7d], 30*24*3600)

4.2.2 IO 模式指标

# 磁盘读写 IOPS(按设备聚合)
rate(node_disk_reads_completed_total[5m])
rate(node_disk_writes_completed_total[5m])

# 磁盘读写吞吐量(MB/s)
rate(node_disk_read_bytes_total[5m]) / 1024 / 1024
rate(node_disk_written_bytes_total[5m]) / 1024 / 1024

# 磁盘平均 IO 延迟(ms)
rate(node_disk_read_time_seconds_total[5m]) / rate(node_disk_reads_completed_total[5m]) * 1000
rate(node_disk_write_time_seconds_total[5m]) / rate(node_disk_writes_completed_total[5m]) * 1000
注意: 如果使用 CSI 驱动(如 Rook/Ceph、Longhorn),建议启用 CSI 侧车容器的指标暴露端口(通常为 8080 或 9090),获取更精确的卷级 IO 指标,而非节点级聚合数据。

4.3 应用画像流程:从采集到可视化

下图展示了从 Prometheus 指标采集到 Grafana 仪表盘输出的完整画像流程:

应用存储画像数据流 应用 Pod PVC 挂载 CSI Exporter 卷级 IO 指标 Node Exporter 节点磁盘指标 Prometheus 指标采集 + 存储 Grafana 仪表盘 + 告警 说明:CSI Exporter 提供卷级 IOPS/延迟,Node Exporter 提供节点级磁盘吞吐,两者互补形成完整画像。 Prometheus 通过 ServiceMonitor 自动发现目标,Grafana 使用变量模板实现多维度筛选。

4.4 Grafana 仪表盘设计要点

一个实用的存储画像仪表盘应包含以下面板布局:

  1. 容量总览面板:显示所有 PVC 的已用容量百分比热力图,按命名空间分组,颜色从绿(<60%)到红(>85%)渐变。
  2. 增长趋势面板:使用时间序列折线图展示 Top 10 增长最快的 PVC,叠加 predict_linear 预测线。
  3. IOPS 分布面板:柱状图展示各 PVC 的读写 IOPS 峰值与平均值,便于识别高 IO 应用。
  4. 延迟热力图:展示 24 小时内各 PVC 的 P99 延迟变化,帮助发现间歇性性能瓶颈。
  5. 存储类型分布:饼图或表格展示当前集群中 SSD、HDD、本地盘的使用比例。
实战案例: 某日志采集应用在 Grafana 仪表盘中显示其 PVC 容量以每天 3.2% 的速度增长,预测 22 天后达到 85% 水位线。同时 IOPS 曲线显示写入峰值集中在每小时的第 5-10 分钟(日志轮转期)。基于此画像,团队将 PVC 初始大小从 100Gi 调整为 200Gi,并配置了 HPA 风格的存储自动扩容策略。

4.5 应用画像输出模板

完成采集与可视化后,建议为每个应用生成标准化的画像报告,格式如下:

应用名称 命名空间 当前容量 日增长率 预测满容量日期 峰值 IOPS 峰值吞吐 P99 延迟 建议存储类型
nginx-log prod 120Gi / 200Gi 2.1% 2025-06-15 850 45 MB/s 2.3 ms SSD
mysql-db prod 450Gi / 500Gi 0.8% 2025-08-20 3200 210 MB/s 1.1 ms NVMe
media-cache staging 30Gi / 100Gi 0.3% 2026-01-10 120 8 MB/s 5.6 ms HDD