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

Microservices 为在特定时间间隔内发生的活动触发警报(使用Prometheus Metrics和AlertManager),microservices,prometheus,metrics,prometheus-alertmanager,Microservices,Prometheus,Metrics,Prometheus Alertmanager,我对普罗米修斯alertmanager还相当陌生,对只在特定时期发出警报有疑问 我有一个microservice,它接收一个文件并对其进行一些处理,只有当它通过Kafka队列获得消息时才会调用它。上述信息应在每天早上5点到早上6点(UTC时间)之间出现。微服务有一个度量,它在每次接收文件时都会增加1。如果在间隔时间内未收到文件,我希望发出警报。我创建了如下查询: expr : sum(increase(metric_name[1m]) and on() hour(vector(time(

我对普罗米修斯alertmanager还相当陌生,对只在特定时期发出警报有疑问

我有一个microservice,它接收一个文件并对其进行一些处理,只有当它通过Kafka队列获得消息时才会调用它。上述信息应在每天早上5点到早上6点(UTC时间)之间出现。微服务有一个度量,它在每次接收文件时都会增加1。如果在间隔时间内未收到文件,我希望发出警报。我创建了如下查询:

    expr : sum(increase(metric_name[1m]) and on() hour(vector(time()))==5) < 1
    for: 1h
expr:sum(增加(度量单位名称[1m])和on()小时(向量(时间())==5)<1
时间:1小时
我的问题:-
1) 这是正确的还是有更好的方法 2) 如果没有更新,将返回0或“未找到数据点”
3) 是增加正确的函数,因为由于外推,它倾向于以小数为单位给出结果,但我知道如果增加为0,它将显示0


我真的无法使用设置为30秒的“刮擦间隔”(scrape_interval)。

我还没有运行此表达式,但我希望它只会在06:00触发警报,然后在06:01发出警报。这是唯一一次该表达式在一小时内保持正确

回答您的问题

  • 如果你想要的是一次单一的警报(通过示例发送邮件),但随后不再触发,这是正确的。即使如此,时间表还是有点紧,可能会因为alertmanager延迟而受到影响,从而导致警报丢失
  • 在没有增加的情况下,您将得到表达式的计算结果为0。当有更新时,它将为空
  • 增加是正确的功能。它甚至考虑了计数器的重置
  • 回答是否有更好的方法。

    关于您的表达式,您可以得到相同的结果,没有for子句,具有:

    expr: increase(metric_name[1h])==0 and on() hour()==6 and on() minute()<1
    
    它的内容是:从早上6点开始(
    hour()>5
    ),计算接下来18个小时内5-6点的增长。如果您喜欢挂起,可以删除结尾的
    on()hour()>5
    并使用
    for:1h
    子句

    如果要在提交文件之前发出警报,从而检测分辨率,只需转换表达式以计算到目前为止的增加:

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

    我没有运行此表达式,但我希望它只会在06:00触发警报,然后在06:01熄灭。这是唯一一次该表达式在一小时内保持正确

    回答您的问题

  • 如果你想要的是一次单一的警报(通过示例发送邮件),但随后不再触发,这是正确的。即使如此,时间表还是有点紧,可能会因为alertmanager延迟而受到影响,从而导致警报丢失
  • 在没有增加的情况下,您将得到表达式的计算结果为0。当有更新时,它将为空
  • 增加是正确的功能。它甚至考虑了计数器的重置
  • 回答是否有更好的方法。

    关于您的表达式,您可以得到相同的结果,没有for子句,具有:

    expr: increase(metric_name[1h])==0 and on() hour()==6 and on() minute()<1
    
    它的内容是:从早上6点开始(
    hour()>5
    ),计算接下来18个小时内5-6点的增长。如果您喜欢挂起,可以删除结尾的
    on()hour()>5
    并使用
    for:1h
    子句

    如果要在提交文件之前发出警报,从而检测分辨率,只需转换表达式以计算到目前为止的增加:

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