Prometheus 抓取标签与今天日期匹配的系列

Prometheus grab series where label matches today's date

我有一个看起来像这样的系列。

events{batch=20200818-00, stage=1} 10
events{batch=20200818-10, stage=1} 10
events{batch=20200818-20, stage=1} 10
events{batch=20200818-10, stage=2}  9
events{batch=20200818-20, stage=2}  8
events{batch=20200818-30, stage=2} 10

它有一个由日期和时间组成的标签 batch。我想设置一个警报,如果今天在 stage2 中的事件总数大于 stage1

如何根据 time() 筛选系列?在 Grafana 中,您可以在其中插入日期并使用正则表达式来匹配标签,这看起来很容易。但是设置和警告这种情况看起来很重要。请帮忙

普罗米修斯目前无法穿越label/value。但是你在某处有一个指标,在标签中为你提供当天的日期,并用它来过滤你的数据。

使用“今日”指标

生成它取决于您现有的组件:这可以在 node_exporter 文本文件或您每天更新的记录规则中完成:

today{date="20200818"} 1

并使用度量重新标记(在 configuration or using label_replace() 中),

label_replace(events, "date", "", "batch", "([0-9]+)-.*")

您获得了与您的指标相关的类似标签:

events{batch=20200818-00, date=20200818, stage=1} 10

然后您可以使用以下方法筛选系列:

label_replace(events, "date", "", "batch", "([0-9]+)-.*") AND ON(date) today

避免重复指标

在午夜时需要考虑一个小问题:之前的 today 指标在 5 分钟后变为 stale 后才会消失。您可以通过生成昨天的标签但使用不同的值来解决这个问题:

today{date="20200817"} 0
today{date="20200818"} 1

表达式变为:

label_replace(events, "date", "", "batch", "([0-9]+)-.*") AND ON(date) today == 1

注意:如果你有一个指标给你事件的时间戳,你可以用它来确定今天是什么(这通常是用批处理完成的)