如何处理PromeQL一对多的运算
向量与向量之间的计算
- ignoring:在匹配时忽略某些标签
- on:将匹配限定在某些标签之内
- group_left:如果左边标签多的话,也就是多对一,使用group_left
- group_right:如果右边标签多的话,也就是一对多,使用group_right
- 一对一匹配(标签数量相同,排除不同的标签或限制指定的标签进行匹配)
vector1 / ignoring(code) vector2 - 多对一匹配和一对多
vector1 on(label) group_left vector2
vector1 on(label) group_right vector2
项目介绍
要监控rocketmq中生产者和消费者的积压,我们知道rocketmq中可以生产一次多人消费,那么生产者和消费者存在一对多的关系。
-
一份生产者数据:
sum by(topic) (rocketmq_producer_offset{topic="gt_inno_tf_o_model"})
-
多份消费者数据:
sum by(group, topic) (rocketmq_consumer_offset{topic="gt_inno_tf_o_model"})
消费者使用组区分 -
使用PromeQL计算如下
sum by(topic) (rocketmq_producer_offset{topic="gt_inno_tf_o_model"}) - on(topic) group_right() sum by(group, topic) (rocketmq_consumer_offset{topic="gt_inno_tf_o_model"})
这样就能计算出一对多的数据。