如何编写PromQL告警规则查找两个时间区间的共有标签值
PromQL跨时间窗口匹配共有标签值实现
场景说明
两个时间窗口采集到的fruits指标如下:
now-60m至now-30m区间采集结果:
fruits{name="apple"} 1 fruits{name="orange"} 1 fruits{name="pear"} 1
now-30m至now区间采集结果:
fruits{name="banana"} 1 fruits{name="pear"} 1 fruits{name="watermelon"} 1
需求为检测同时出现在两个指标集合中的name标签值,本例预期返回结果为pear。
实现PromQL
直接用PromQL自带的集合交集运算符and就能实现,搭配max_over_time区间函数覆盖整个时间窗口的存在性判断,不用关心指标具体值,只要序列在窗口内出现过就会被纳入匹配,语句如下:
max_over_time(fruits[30m] offset 30m) and max_over_time(fruits[30m])
语句说明
max_over_time(fruits[30m] offset 30m):覆盖now-60m到now-30m区间,提取该窗口内所有出现过的fruits序列and:集合交集操作符,仅保留左右两侧标签完全一致的时间序列,自动过滤仅在单侧存在的序列max_over_time(fruits[30m]):覆盖now-30m到now区间,提取该窗口内所有出现过的fruits序列
执行结果
上述语句执行后,仅会返回标签为name="pear"的fruits序列,和预期结果完全一致。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

