OpenObserve中的PromQL标签匹配
使用OpenObserve及其Collector,我得到一个名为 system_filesystem_usage 的指标。
该指标带有一个标签state,其取值为used、free或 reserved。我对 "reserved" 不感兴趣,但我想用 "used" 和 "free" 来计算使用率的百分比。由于用于计算的数值来自多行/事件,我猜这可能属于PromQL标签匹配(PromQL label matching) 的情形。我尝试了:
system_filesystem_usage{state="used"}
/ (system_filesystem_usage{state="used"} + system_filesystem_usage{state="free"})
* 100
但即便是像 system_filesystem_usage{state="used"} + system_filesystem_usage{state="free"} 这样的更简单表达式,在OpenObserve中也不会产生任何结果。我到底错在哪儿?
解决方案
PromQL不能在state标签不同(used与 free)时匹配指标。你的查询失败,因为它试图对具有不同标签集合的时间序列进行运算。
作为解决方案,你可以使用聚合按公共标签分组(不包含state):
(
sum by (device, mountpoint, host_name) (system_filesystem_usage{state="used"})
/
sum by (device, mountpoint, host_name) (system_filesystem_usage{state=~"used|free"})
) * 100
这会按设备/挂载点/主机计算文件系统使用百分比。sum by() 会在state标签上进行聚合,因此分子和分母具有匹配的标签集合,PromQL可以进行除法。
备选方案(如果你想要保留除state之外的所有标签):
(
sum without (state) (system_filesystem_usage{state="used"})
/
sum without (state) (system_filesystem_usage{state=~"used|free"})
) * 100
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。