如何编写PromQL左连接查询以保留左侧指标向量全部数据?
解决PromQL关联向量时不丢失指标数据的问题
你的问题出在使用*运算符做关联时,本质是内连接——只有两边都存在匹配的consumergroup时,结果才会保留。要保留指标向量的所有数据,需要用左连接逻辑,同时确保右边向量能覆盖左边所有的consumergroup。
最终查询方案
方案1:保留缺失team标签的条目
如果接受缺失team标签的结果(仅对有匹配的条目添加team),可以用以下查询:
(sum(kafka_consumergroup_lag[1d]) by (consumergroup) >= 100) * on(consumergroup) group_left(team) ( catalog_entities_info or on(consumergroup) (sum(kafka_consumergroup_lag[1d]) by (consumergroup) >= 100) * vector(1) )
方案2:给缺失的team标签设默认值
如果希望所有条目都有team标签,缺失时用占位符(比如unknown),可以在上面的基础上加上label_replace:
label_replace( (sum(kafka_consumergroup_lag[1d]) by (consumergroup) >= 100) * on(consumergroup) group_left(team) ( catalog_entities_info or on(consumergroup) (sum(kafka_consumergroup_lag[1d]) by (consumergroup) >= 100) * vector(1) ), "team", "unknown", "team", "^$" )
逻辑说明
or on(consumergroup)部分:将catalog_entities_info和左边指标向量转换的默认向量(仅含consumergroup标签、值为1)合并,确保左边每个consumergroup在右边都有匹配项。group_left(team):强制保留左边所有条目,并将右边的team标签附加到结果中;右边没有team标签的条目,结果中就不会带该标签(方案1),或者通过label_replace给空值的team标签设置默认值(方案2)。
内容的提问来源于stack exchange,提问作者aiven
相关产品推荐
相关产品推荐

