PromQL是否支持类似左外连接的查询,可获取两个指标的差集?
PromQL单边存在指标查询方案
核心实现方法
你需要的「以item_stock为基准,筛选出不存在对应name标签的item_purchases记录的序列」需求,可以直接用PromQL原生的unless集合差集运算符实现,无需引入其他方案。
适用当前场景的查询语句
item_stock unless on(name) item_purchases
语句说明
A unless B是PromQL的集合运算符,返回结果为A中所有和B没有匹配到相同标签组合的时间序列on(name)指定仅通过name标签做两个指标的关联匹配,忽略其他标签差异- 执行上述语句后会直接返回你需要的
item_stock{name="item3", in_stock="1"}结果
原有查询问题说明
你之前使用的* on (name) group_left()属于二元算术运算的多对一匹配逻辑,仅会返回两边指标都匹配到的序列,天然会丢弃仅单边存在的记录,不适用于当前差集筛选的场景。
告警与Dashboard实践
- 告警规则直接使用上述查询作为
expr即可,只要查询返回结果非空就触发告警,完全匹配「实体仅在其中一个指标上报」的触发条件 - 如果需要反向筛选(item_purchases存在但item_stock不存在的序列),调换两个指标的顺序即可:
item_purchases unless on(name) item_stock
内容的提问来源于stack exchange,提问作者AdamG
相关产品推荐
相关产品推荐

