深色模式
PromQL 聚合 sum/by/topk
几十台机器的指标怎么看整体?聚合算子让你从“单机”上升到“集群”。
适用环境
- 已采集多实例指标(如多台 node_exporter,job="node")
- 在 Graph 页面验证聚合效果
bash
# 看集群里有多少台机器的 up==1
curl -s 'http://localhost:9090/api/v1/query?query=count(up%7Bjob=%22node%22%7D)'1
2
2
操作步骤
1. sum:求和
promql
# 集群整体 QPS
sum(rate(http_requests_total[5m]))1
2
2
2. by:按标签分组保留维度
promql
# 按 instance 分组求和,保留每台机器
sum by (instance) (rate(http_requests_total[5m]))
# 按 job 汇总
sum by (job) (up)1
2
3
4
5
2
3
4
5
3. without:去掉某些标签后聚合
promql
# 去掉 instance/cpu 标签,按其余维度聚合
sum without (instance, cpu) (rate(node_cpu_seconds_total[5m]))1
2
2
4. topk / bottomk:取头尾
promql
# CPU 使用率最高的 3 台
topk(3, 1 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])))1
2
2
验证
promql
# 集群内存总量与可用量
sum(node_memory_MemTotal_bytes) / 1024^3
sum(node_memory_MemAvailable_bytes) / 1024^31
2
3
2
3
常见坑
聚合会丢失标签
sum(x) 不带 by 会把所有标签抹掉,画不出分维度图,记得加 by (...)。
avg 不等于算数均值直觉
avg by (instance) 是对“该 instance 的多个序列”求平均,别和“按时间平均”混淆。