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

Count alerts fired by prometheus

我有定义了一些警报规则的 Prometheus,我想获得有关 Prometheus 发出的警报数量的统计信息。

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

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

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

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

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

我发现此查询(大部分)适用于 Prometheus 2.4.0 及更高版本:

changes(ALERTS_FOR_STATE[24h])

它将 return 每个警报在过去 24 小时内从 "pending" 变为 "firing" 的次数,这意味着它仅适用于处于挂起状态的警报第一名(即指定 for: <some_duration> 的警报)。

ALERTS_FOR_STATE 是新添加的 Prometheus 内部指标,用于在 Prometheus 重启后恢复警报。它并没有得到很好的记录(实际上根本没有),但它似乎有效。

哦,如果您希望结果按警报(或环境、工作或其他)分组,您可以按该标签或标签集对结果求和:

sum by(alertname) (changes(ALERTS_FOR_STATE[24h]))

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

受“Alin Sî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)