为应该在特定时间间隔内发生的活动触发警报(使用 Prometheus Metrics 和 AlertManager)



我对普罗米修斯警报管理器相当陌生,并且对仅在特定时间段内触发警报有疑问

我有一个微服务,它接收一个文件并对其进行一些处理,只有在它通过 Kafka 队列获取消息时才调用它。上述应该在每天上午 5 点到 6 点(UTC 时间(之间到来。微服务有一个指标,每次收到文件时都会递增 1。如果它在间隔内未收到文件,我想发出警报。我创建了一个这样的查询:

expr : sum(increase(metric_name[1m]) and on() hour(vector(time()))==5) < 1
for: 1h

我的问题:-
1(是否正确,或者有更好的方法可以做到这一点
2(如果没有更新,它会返回0还是"未找到数据点">
3(是否增加正确的函数,因为它倾向于由于外推而给出小数的结果,但我知道如果增加为0,它将显示0

我真的不能玩scrape_intervals,它设定在 30 多岁。

我没有运行这个表达式,但我希望它只会导致警报在 06:00 触发,然后在 06:01 关闭。这是表达式唯一一次保持一小时。

回答您的问题

  1. 如果您想要的是单个警报触发(通过示例发送邮件(但随后不再触发,则是正确的。即使这样,时间表也有点紧张,可能会受到警报管理器延迟的影响,从而导致警报丢失。
  2. 如果没有增加,您将获得表达式的计算结果为 0。有更新时它将为空
  3. 增加是正确的功能。它甚至考虑了计数器的重置。

回答是否有更好的方法

。关于您的表达式,您可以得到相同的结果,没有 for 子句,如下所示:

expr: increase(metric_name[1h])==0 and on() hour()==6 and on() minute()<1

它读作:从早上 6 点开始,持续 1 分钟,如果上一小时内指标没有增加。

警报时间更长

如果希望警报持续更长时间(例如一天,并在解决警报时将其静音(,则可以使用子查询;

expr: increase((metric and on() hour()==5)[18h:])==0 and on() hour()>5

它的内容是:从早上6点(hour()>5(开始,计算接下来18小时内凌晨5-6点的增加。如果您喜欢挂起,则可以删除尾随on() hour()>5并使用for: 1h子句。

如果要在提交文件之前发出警报,从而检测解决方案,只需转换表达式以评估到目前为止的增加:

expr: increase((metric and on() hour()>5)[18h:])==0 and on() hour()>5

最新更新