问题描述
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
注意::如果您有一个度量标准来提供事件的时间戳,则可以使用它来确定今天的状态(通常是批量处理)