有没有办法在 PromQL 中执行类似 "left outer join" 的查询?
Is there a way to do a "left outer join" like query in PromQL?
我正在尝试使用两个应该描述相同实体的指标(共享一些标签,包括我可以用作 UUID 的标签),以便创建 alerts/dashboard 来提醒我一个实体报告一个指标而不是另一个指标。
例如,对于以下指标:
item_purchases{name="item1", count="5"}
item_purchases{name="item2", count="7"}
item_stock{name="item1", in_stock="1"}
item_stock{name="item2", in_stock="0"}
item_stock{name="item3", in_stock="1"}
我使用 item_stock
作为我的“事实来源”,并且我正在尝试编写一个查询 return:
item_stock{name="item3", ...} # I don't care about the other labels, just the name.
我已经有一个查询可以帮助我在某些条件下进行过滤(例如,如果某件商品已购买但没有库存,如“item2”),它类似于:
item_purchases{in_stock="1"} * on (name) group_left () (item_purchases)
但不幸的是,它只是删除了 item_stock
中在 item_purchases
中没有匹配时间序列的所有记录 - 例如“item3”,这实际上是我正在寻找的结果。
有人有编码此类查询的经验吗?它们甚至可以在 PromQL 中使用,还是我应该恢复到其他解决方案?
可以使用 unless 运算符:
item_stock unless item_purchases
生成一个由 item_stock
的元素组成的向量,其中 item_purchases
中没有元素具有完全匹配的标签集。删除两个向量中的所有匹配元素。
请注意,相关指标没有“完全匹配的标签集”(name
很常见,但 count
和 in_stock
不是)。在这种情况下,您可以使用 on
来设置要匹配的标签列表:
item_stock unless on(name) item_purchases
我正在尝试使用两个应该描述相同实体的指标(共享一些标签,包括我可以用作 UUID 的标签),以便创建 alerts/dashboard 来提醒我一个实体报告一个指标而不是另一个指标。
例如,对于以下指标:
item_purchases{name="item1", count="5"}
item_purchases{name="item2", count="7"}
item_stock{name="item1", in_stock="1"}
item_stock{name="item2", in_stock="0"}
item_stock{name="item3", in_stock="1"}
我使用 item_stock
作为我的“事实来源”,并且我正在尝试编写一个查询 return:
item_stock{name="item3", ...} # I don't care about the other labels, just the name.
我已经有一个查询可以帮助我在某些条件下进行过滤(例如,如果某件商品已购买但没有库存,如“item2”),它类似于:
item_purchases{in_stock="1"} * on (name) group_left () (item_purchases)
但不幸的是,它只是删除了 item_stock
中在 item_purchases
中没有匹配时间序列的所有记录 - 例如“item3”,这实际上是我正在寻找的结果。
有人有编码此类查询的经验吗?它们甚至可以在 PromQL 中使用,还是我应该恢复到其他解决方案?
可以使用 unless 运算符:
item_stock unless item_purchases
生成一个由 item_stock
的元素组成的向量,其中 item_purchases
中没有元素具有完全匹配的标签集。删除两个向量中的所有匹配元素。
请注意,相关指标没有“完全匹配的标签集”(name
很常见,但 count
和 in_stock
不是)。在这种情况下,您可以使用 on
来设置要匹配的标签列表:
item_stock unless on(name) item_purchases