Prometheus相加指定磁盘irate指标时返回空查询结果求助
解决Prometheus指定磁盘读取速率相加返回空结果的问题
问题原因
你遇到的空结果问题,核心是Prometheus的二元运算(如+)默认要求左右两边的时间序列标签完全一致才能执行运算。如果两个irate查询返回的序列存在标签差异(比如job标签值不同,或者其他未注意到的标签),就无法找到匹配的序列对,最终返回空结果。
解决方案
方法1:正则匹配+聚合求和(推荐,更简洁)
通过device=~"sdc|sdd"匹配你需要的特定磁盘,再用sum聚合同一实例下的结果,避免标签不匹配的问题:
sum(irate(node_disk_read_bytes_total{instance="10.0.0.10:9100", device=~"sdc|sdd"}[1m])) by (instance)
device=~"sdc|sdd":用正则精确匹配sdc和sdd两个设备sum(...) by (instance):将同一实例下这两个设备的读取速率相加,同时保留instance标签
方法2:操作符修饰符强制匹配
如果坚持要分开写两个irate查询,可以用on()或ignoring()指定匹配标签,忽略其他标签差异:
irate(node_disk_read_bytes_total{instance="10.0.0.10:9100", device="sdc"}[1m]) + on(instance) group_left irate(node_disk_read_bytes_total{instance="10.0.0.10:9100", device="sdd"}[1m])
on(instance):仅根据instance标签匹配两边的序列group_left:保留左侧序列的标签(如果需要保留右侧标签,可改用group_right)
验证步骤
可以先单独执行每个irate查询,查看返回序列的完整标签集(比如是否有job、namespace等额外标签),确认两边的标签值是否完全一致——这是默认+运算能生效的前提。
内容的提问来源于stack exchange,提问作者James Sutherland
相关产品推荐
相关产品推荐

