【问题标题】:PromQL query to find the duration of each firing alertPromQL 查询以查找每个触发警报的持续时间
【发布时间】:2020-10-24 05:36:25
【问题描述】:

我正在创建一个 Grafana 仪表板来查看每个触发警报的总警报计数和持续时间(意味着它应该捕获警报触发状态的时间长度)。

用于捕获警报总数的 PromQL 查询如下,

count by (alertname,customerName) (changes(customer_ALERTS[24h]))

想法是在 Grafana 表格面板中再添加两列,分别为 alert countduration

现在我需要获取查询以捕获每个警报的持续时间。有人可以分享一些想法吗?

【问题讨论】:

    标签: prometheus grafana promql grafana-variable


    【解决方案1】:

    如果您知道警报的评估间隔,则可以使用以下 PromQL 查询来计算过去 24 小时内处于触发状态的警报的持续时间(以秒为单位):

    count_over_time(customer_ALERTS[24h]) * <evaluation_interval_in_seconds>
    

    查询假定customer_ALERTS 在触发警报时包含非空值,并且在警报未触发时没有任何值。如果 customer_ALERTS 在警报未触发时包含 zero 值,在警报触发时包含 one 值,则应使用以下查询来确定处于触发状态的警报的持续时间(以秒为单位):

    avg_over_time(customer_ALERTS[24h]) * 24 * 3600
    

    如果customer_ALERTS 包含其他用于触发/未触发状态的值,则PromQL subqueries 可用于计数处于触发状态的样本。还可以查看MetricsQL functions,例如lifetime(m[d])share_gt_over_time(m[d], gt)count_gt_over_time(m[d], gt)

    【讨论】:

    • 谢谢。我使用了第二个查询,我看到所有警报的值都是 8600。(avg_over_time(customer_ALERTS{alertstate="firing",severity="critical"}[24h])) *24 * 3600 值相同的任何原因?
    • 您能看一下customer_ALERTS{alertstate="firing",severity="critical"} 最后一天的图表吗? avg_over_time() 查询期望图表没有间隙,并且在警报未触发时包含 0 个值,在警报触发时包含 1 个值,如答案中所述。
    猜你喜欢
    • 2018-02-08
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多