Prometheus中缺失指标致分组减法查询结果为空的问题咨询
解决Prometheus分组减法空结果问题
问题核心:Prometheus的减法操作要求两边时间序列的标签完全匹配,若某token仅在其中一个指标中存在,该token的运算结果会被直接丢弃,最终导致整体结果为空。
解决方案
我们需要先获取所有存在的token集合(涵盖deposit和withdraw中出现的所有token),再为每个token填充缺失指标的默认值0,最后执行减法:
兼容低版本Prometheus(无union函数)的写法
(sum by (token) (deposit) or on(token) group_left() sum by (token) (deposit or withdraw) * 0) - (sum by (token) (withdraw) or on(token) group_left() sum by (token) (deposit or withdraw) * 0)
高版本Prometheus(2.47+,支持union函数)的简洁写法
(sum by (token) (deposit) or on(token) group_left() sum by (token) (union(deposit, withdraw)) * 0) - (sum by (token) (withdraw) or on(token) group_left() sum by (token) (union(deposit, withdraw)) * 0)
原理说明
sum by (token) (deposit or withdraw)(或sum by (token) (union(deposit, withdraw)))会生成所有出现过的token集合,每个token对应值为0(乘以0后)。or on(token) group_left()会将缺失对应token的指标结果替换为0,确保每个token在两边都有值。- 最终减法操作会保留所有token的计算结果,不会因某一边无数据而丢失。
内容的提问来源于stack exchange,提问作者BEHRAD
相关产品推荐
相关产品推荐

