You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Prometheus中复用查询实例展示需关注磁盘的预测与实际指标?

问题描述

我正在制作磁盘空间预测监控仪表盘,现有如下Prometheus查询:

predict_linear(
   (1-(disk_volume_available_bytes{instance=~"$server"} / disk_volume_total_bytes{instance=~"$server"}))[32d:1d],
   864000
) > 0.95

该查询能筛选出需要关注的磁盘——也就是预测10天后使用率超过95%的磁盘。我想通过另一个查询复用这些磁盘实例,获取它们的实际使用指标,只展示预测使用率超95%的磁盘的预测线和实际数据,低于95%的就不显示。请问这能做到吗?

解决方案

当然可行,用PromQL的标签匹配和关联逻辑就能实现,核心就是用你筛选出的高风险磁盘实例作为条件,关联实际使用率和预测指标。

方法1:用and直接筛选

最简单的方式是把原筛选查询和实际指标做逻辑与操作,自动保留标签匹配的实例:

查符合条件磁盘的实际使用率

(1 - disk_volume_available_bytes{instance=~"$server"} / disk_volume_total_bytes{instance=~"$server"})
and
predict_linear(
   (1-(disk_volume_available_bytes{instance=~"$server"} / disk_volume_total_bytes{instance=~"$server"}))[32d:1d],
   864000
) > 0.95

查符合条件磁盘的预测使用率

predict_linear(
   (1-(disk_volume_available_bytes{instance=~"$server"} / disk_volume_total_bytes{instance=~"$server"}))[32d:1d],
   864000
)
and
predict_linear(
   (1-(disk_volume_available_bytes{instance=~"$server"} / disk_volume_total_bytes{instance=~"$server"}))[32d:1d],
   864000
) > 0.95

这种写法会自动匹配所有标签(比如instance、mountpoint)一致的时间序列,只展示达标的磁盘数据。

方法2:用group_left减少重复计算

如果不想重复写predict_linear的逻辑,可以先把预测结果存成临时序列,再关联实际指标:

# 先得到筛选后的预测结果
predict_result = predict_linear(
   (1-(disk_volume_available_bytes{instance=~"$server"} / disk_volume_total_bytes{instance=~"$server"}))[32d:1d],
   864000
) > 0.95

# 关联实际使用率,只保留符合条件的实例
(1 - disk_volume_available_bytes{instance=~"$server"} / disk_volume_total_bytes{instance=~"$server"})
group_left()
predict_result

这种写法更简洁,避免重复计算,适合在Grafana这类工具里用(大部分支持PromQL的变量定义)。

注意点

  • 确保两个查询的标签完全匹配,比如instance、mountpoint、device这些标签都得一致,不然关联会失败;
  • 如果你的磁盘指标有额外标签,不用额外处理,PromQL会自动匹配所有相同标签的序列;
  • 在Grafana里还可以把筛选后的预测查询做成变量,其他面板直接引用这个变量的实例列表,进一步复用筛选逻辑。

内容的提问来源于stack exchange,提问作者Ben Thul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:15:06