计算普罗米修斯发出的警报

时间:2018-09-24 13:30:50

标签: prometheus

我为Prometheus定义了一些警报规则,并且我希望获得有关Prometheus触发的警报数量的统计信息。

我试图计算使用grafana触发警报的次数,但它不起作用:

SUM(ALERTS{alertname="XXX", alertstate="firing"})

有一种方法可以计算触发警报的次数?

3 个答案:

答案 0 :(得分:0)

您的PromQL是正确的。请记住,标签(包括警报名称)是区分大小写的:也许是问题所在?

答案 1 :(得分:0)

您的查询返回现在触发了多少警报,而不是每个警报被触发了多少次。

我发现此查询(主要用于Prometheus 2.4.0及更高版本):

changes(ALERTS_FOR_STATE[24h])

它将返回每个警报在过去24小时内从“待处理”到“触发”的次数,这意味着它仅适用于首先处于待处理状态的警报(例如,带有{{1的警报}})。

for: <some_duration>是新添加的Prometheus内部指标,用于在Prometheus重新启动后恢复警报。并不是所有的文档都有据可查(实际上根本没有),但是似乎可以正常工作。

哦,如果您希望将结果按警报(或环境,工作或其他内容)分组,则可以按该标签或一组标签对结果进行求和:

ALERTS_FOR_STATE

将为您提供跨作业,环境等触发每个警报的次数。

答案 2 :(得分:0)

受“ AlinSînpălean”的启发,我计算了firing状态的警报,而忽略了pending状态。

  • 计算当前警报:

    count(ALERTS{alertstate="firing"}) by(alertname)
    
  • 计算每个警报已触发多少次:

    # Add a rule
    groups:
    - name: recording_rules
      rules:
      - record: ALERTS_FOR_STATE:firing
        expr: ALERTS_FOR_STATE and ignoring(alertstate) ALERTS{alertstate="firing"}
    
    sum(changes(ALERTS_FOR_STATE:firing[1w]) + 1) by(alertname)