为应该在特定时间间隔内发生的 activity 触发警报(使用 Prometheus Metrics 和 AlertManager)
Firing Alerts for an activity which is supposed to happen during a particular time interval(using Prometheus Metrics and AlertManager)
我对 Prometheus alertmanager 还很陌生,对仅在特定时期触发警报有疑问
我有一个微服务,它接收一个文件并对其进行一些处理,仅当它通过 Kafka 队列获取消息时才会调用该微服务。上述内容应该在每天早上 5 点到 6 点(UTC 时间)之间出现。微服务有一个指标,每次收到文件时该指标都会增加 1。如果它在间隔内没有收到文件,我想发出警报。我创建了一个这样的查询:
expr : sum(increase(metric_name[1m]) and on() hour(vector(time()))==5) < 1
for: 1h
我的问题:-
1) 是否正确或有更好的方法
2)如果没有更新,是return0还是"datapoints not found"
3)增加正确的功能,因为它往往会由于外推而给出小数的结果,但我知道如果增加为 0,它将显示 0
设置为 30 秒的 scrape_intervals 我实在玩不转。
我没有 运行 这个表达式,但我希望它会导致警报仅在 06:00 时触发,然后在 06:01 时关闭。这是该表达式唯一一次在一小时内成立。
回答您的问题
- 如果您想要的是一次警报(通过示例发送邮件)但之后不再触发,这是正确的。即便如此,日程安排还是有点紧,并且可能会受到 alertmanager 延迟的影响,导致警报丢失。
- 在没有增加的情况下,你会得到表达式的值为0。当有更新时它会是空的
- 增加是正确的功能。它甚至考虑了计数器的重置。
回答是否有更好的方法。
关于你的表达式,你可以得到相同的结果,没有 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
我对 Prometheus alertmanager 还很陌生,对仅在特定时期触发警报有疑问
我有一个微服务,它接收一个文件并对其进行一些处理,仅当它通过 Kafka 队列获取消息时才会调用该微服务。上述内容应该在每天早上 5 点到 6 点(UTC 时间)之间出现。微服务有一个指标,每次收到文件时该指标都会增加 1。如果它在间隔内没有收到文件,我想发出警报。我创建了一个这样的查询:
expr : sum(increase(metric_name[1m]) and on() hour(vector(time()))==5) < 1
for: 1h
我的问题:-
1) 是否正确或有更好的方法
2)如果没有更新,是return0还是"datapoints not found"
3)增加正确的功能,因为它往往会由于外推而给出小数的结果,但我知道如果增加为 0,它将显示 0
设置为 30 秒的 scrape_intervals 我实在玩不转。
我没有 运行 这个表达式,但我希望它会导致警报仅在 06:00 时触发,然后在 06:01 时关闭。这是该表达式唯一一次在一小时内成立。
回答您的问题
- 如果您想要的是一次警报(通过示例发送邮件)但之后不再触发,这是正确的。即便如此,日程安排还是有点紧,并且可能会受到 alertmanager 延迟的影响,导致警报丢失。
- 在没有增加的情况下,你会得到表达式的值为0。当有更新时它会是空的
- 增加是正确的功能。它甚至考虑了计数器的重置。
回答是否有更好的方法。
关于你的表达式,你可以得到相同的结果,没有 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