3、Prometheus监控体系基础:Prometheus架构、数据模型、指标类型、PromQL入门
在深入存储组件拓扑与租户配额校准之前,必须建立对Prometheus监控体系的系统性认知。本章将围绕Prometheus的核心架构、数据模型、指标类型以及PromQL查询语言展开,为后续的存储组件接入与配额计算打下坚实基础。
3.1 Prometheus整体架构
Prometheus采用拉取(Pull)模式采集指标,通过服务发现或静态配置确定目标端点。其核心组件包括:
- Prometheus Server:负责指标抓取、存储与查询。
- Exporters:将非原生支持Prometheus的应用指标转换为标准格式。
- Pushgateway:用于短期或批处理任务的指标推送。
- Alertmanager:处理告警路由、去重与通知。
- Service Discovery:动态发现Kubernetes、Consul等环境中的目标。
架构要点:Prometheus不依赖分布式存储,每个Server节点独立工作,通过联邦(Federation)实现跨集群监控。
3.2 数据模型
Prometheus将所有采集到的数据存储为时间序列(Time Series),每个时间序列由以下三部分唯一标识:
| 组成部分 | 说明 | 示例 |
|---|---|---|
| 指标名称(Metric Name) | 描述被监控对象的一般含义 | node_cpu_seconds_total |
| 标签(Labels) | 键值对,用于区分同一指标的不同维度 | {instance="10.0.0.1:9100", cpu="0", mode="idle"} |
| 样本(Sample) | 包含时间戳(Timestamp)和值(Value) | @1620000000 12345.67 |
标签设计原则:标签是Prometheus数据模型的灵魂。在Kubernetes存储场景中,建议将
namespace、persistentvolumeclaim、storageclass等作为标签,以便后续按租户进行配额聚合。
3.3 指标类型
Prometheus客户端库提供四种核心指标类型,理解其语义对于编写正确的PromQL至关重要:
| 指标类型 | 行为特征 | 典型用途 | 存储场景示例 |
|---|---|---|---|
| Counter | 只增不减,重启归零 | 请求总数、错误计数 | PVC总写入字节数 |
| Gauge | 可增可减,反映当前状态 | 内存使用量、连接数 | PV当前已用容量 |
| Histogram | 对观测值进行分桶统计 | 请求延迟分布、响应大小 | 存储IO延迟分布 |
| Summary | 类似Histogram,但计算分位数 | 请求延迟的p99 | 存储IO延迟的p99 |
常见误区:Counter类型不能直接用于计算当前速率,必须配合
rate()或increase()函数使用。Gauge类型则可以直接用于当前值查询。
3.4 PromQL入门
PromQL(Prometheus Query Language)是Prometheus内置的函数式查询语言。以下为最常用的查询模式:
3.4.1 基础查询
# 查询所有node_cpu_seconds_total指标
node_cpu_seconds_total
# 带标签过滤
node_cpu_seconds_total{cpu="0", mode="idle"}
# 正则匹配
node_cpu_seconds_total{instance=~"10.0.0.*"}
3.4.2 常用函数
| 函数 | 作用 | 示例 |
|---|---|---|
rate() |
计算Counter在指定时间窗口内的每秒平均增长率 | rate(node_cpu_seconds_total[5m]) |
increase() |
计算Counter在指定时间窗口内的增量 | increase(node_network_receive_bytes_total[1h]) |
avg_over_time() |
计算Gauge在指定时间窗口内的平均值 | avg_over_time(node_memory_MemAvailable_bytes[10m]) |
topk() |
返回排名前k的时间序列 | topk(3, node_filesystem_size_bytes) |
3.4.3 存储场景PromQL示例
# 查询每个PVC的当前已用容量(Gauge)
kubelet_volume_stats_used_bytes{namespace="tenant-a"}
# 计算每个PVC在过去1小时内的写入流量(Counter增量)
increase(ceph_pool_wr_bytes[1h])
# 按StorageClass聚合PV总容量
sum by (storage_class) (kube_persistentvolume_capacity_bytes)
# 计算租户配额使用率(假设配额为100Gi)
(
sum(kubelet_volume_stats_used_bytes{namespace="tenant-a"})
/
100 * 1024 * 1024 * 1024
) * 100
实战要点:在租户配额校准场景中,
rate()和increase()用于计算存储消耗速率,sum by (namespace)用于按租户聚合,/运算符结合配额常量计算使用率。
3.5 本章小结
本章建立了Prometheus监控体系的基础认知:
- 架构:Pull模式、Server、Exporter、Alertmanager各司其职。
- 数据模型:指标名称+标签唯一确定时间序列,标签是聚合的关键。
- 指标类型:Counter用于累计量,Gauge用于当前状态,Histogram/Summary用于分布统计。
- PromQL:
rate()、increase()、sum by是存储配额计算的核心工具。