如果 Prometheus 中某些标签中的数据丢失,则发出警报
Alert if data in certain labels is missing in 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"})
将达到目的。但我不想硬编码磁盘名称。
我能知道为这种情况设置警报的更好方法吗?
你可以使用这样的东西:
max_over_time(disk_up[1h])
unless
disk_up
即该指标在过去 1 小时内随时存在,但现在不存在。
不过,如果针对某些 diskC
弹出 disk_up
指标,您将得到误报。或者,如果指标由于导出器或您的 Prometheus 配置而获得或丢失一个标签。
您可以通过显式过滤您感兴趣的 disks/instances/whatever 来避免前者,但这会破坏您不对它们进行硬编码的目标。不过,这可能是更明智的做法:
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"}
以下 MetricsQL 查询 returns disk_up
时间序列,在过去 24 小时内可用,但在过去 5 分钟内没有收到新样本:
lag(disk_up[24h]) > 5m
查询returns自上次收到样本以来的持续时间(以秒为单位)。参见 lag() function docs。
我正在向普罗米修斯发送与两个磁盘相关的数据。如果一个磁盘的指标停止发送指标,我想发出警报。假设我有 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"})
将达到目的。但我不想硬编码磁盘名称。
我能知道为这种情况设置警报的更好方法吗?
你可以使用这样的东西:
max_over_time(disk_up[1h])
unless
disk_up
即该指标在过去 1 小时内随时存在,但现在不存在。
不过,如果针对某些 diskC
弹出 disk_up
指标,您将得到误报。或者,如果指标由于导出器或您的 Prometheus 配置而获得或丢失一个标签。
您可以通过显式过滤您感兴趣的 disks/instances/whatever 来避免前者,但这会破坏您不对它们进行硬编码的目标。不过,这可能是更明智的做法:
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"}
以下 MetricsQL 查询 returns disk_up
时间序列,在过去 24 小时内可用,但在过去 5 分钟内没有收到新样本:
lag(disk_up[24h]) > 5m
查询returns自上次收到样本以来的持续时间(以秒为单位)。参见 lag() function docs。