普罗米修斯抢夺系列标签与今天的日期匹配

问题描述

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

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

其中有一个标签batch,该标签由日期和小时组成。我想设置一个警报,如果第二阶段今天的事件总数比第一阶段要好,则会触发该警报

如何根据time()过滤系列?在Grafana中,您可以轻松地在其中插入日期并使用正则表达式来匹配标签。但是为这种情况设置并发出警报似乎并不容易。请帮忙。

解决方法

Prometheus当前无法跨越标签/值。但是您在某处有一个指标,可以在标签中给您指定日期,并使用它来过滤数据。

使用“今天”指标

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

today{date="20200818"} 1

并使用指标重新标记(在https://wazuh.com/blog/nginx-load-balancer-in-a-wazuh-cluster/configuration中使用),

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

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

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

然后您可以使用过滤系列:

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

避免重复的指标

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

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

表达式变为:

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

注意::如果您有一个度量标准来提供事件的时间戳,则可以使用它来确定今天的状态(通常是批量处理)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...