【问题标题】:Alert if data in certain labels is missing in PrometheusPrometheus 中某些标签中的数据缺失时发出警报
【发布时间】:2019-02-21 10:38:59
【问题描述】:

我正在向 prometheus 发送与两个磁盘相关的数据。我想提醒一个磁盘的指标是否停止发送指标。假设我有 diskA 和 diskB,我正在收集 disk_up 指标。现在diskB失败了。在普罗米修斯

disk_up{disk="diskA"} 将有数据和 disk_up{disk="diskB"} 将丢失

absent(disk_up) 将为 0,因为 disk_up 有磁盘 A 的数据。 absent(disk_up{disk="diskB"}) 将达到目的。但我不想硬编码磁盘名称。

我能知道哪种方法更好地为这种情况设置警报吗?

【问题讨论】:

    标签: prometheus promql prometheus-node-exporter


    【解决方案1】:

    你可以这样使用:

    max_over_time(disk_up[1h])
      unless
    disk_up
    

    即该指标在过去 1 小时内的任何时间都存在,但现在不存在。

    但是,如果针对某些 diskC 弹出 disk_up 指标,您将得到误报。或者,如果指标由于导出器或您的 Prometheus 配置而获得或丢失一个标签。

    您可以通过显式过滤磁盘/实例/您感兴趣的任何内容来避免前者,但这会破坏您不对它们进行硬编码的目标。不过,这可能是更明智的做法:

    max_over_time(disk_up{disk~="disk(A|B)"}[1h])
      unless
    disk_up{disk~="disk(A|B)"}
    

    至少

    max_over_time(disk_up{job="my_disk_job"}[1h])
      unless
    disk_up{job="my_disk_job"}
    

    【讨论】:

    • 谢谢!为了快速响应
    【解决方案2】:

    以下MetricsQL 查询返回disk_up 时间序列,该时间序列在过去 24 小时内可用,但在过去 5 分钟内未收到新样本:

    lag(disk_up[24h]) > 5m
    

    查询返回自上次接收样本以来的持续时间(以秒为单位)。见lag() function docs

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 2021-04-24
      相关资源
      最近更新 更多