【问题标题】:Count alerts fired by prometheus计算普罗米修斯发出的警报
【发布时间】:2019-02-28 00:55:00
【问题描述】:

我有定义了一些警报规则的 Prometheus,我想统计 Prometheus 触发的警报数量。

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

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

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

【问题讨论】:

    标签: prometheus


    【解决方案1】:

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

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

    changes(ALERTS_FOR_STATE[24h])
    

    它将返回过去 24 小时内每个警报从“待处理”变为“触发”的次数,这意味着它仅适用于首先具有待处理状态的警报(即带有 for: <some_duration> 的警报指定)。

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

    哦,如果您想要按警报(或环境、工作或其他)分组的结果,您可以按该标签或标签集对结果进行汇总:

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

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

    【讨论】:

    • 关于这个话题的好article。我们必须添加一个,因为从不存在到存在的变化不计入价值变化。
    【解决方案2】:

    受“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)
      

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2022-11-02
        • 1970-01-01
        • 2021-07-20
        • 2021-07-24
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2020-05-28
        • 1970-01-01
        相关资源
        最近更新 更多