普罗米修斯检查指标是否存在

prometheus check if a metric is present

我有基于指标的警报,在我的情况下,有时可能会消失。假设指标为 up(env=prod)up(env=staging)。我有一个基于此指标值的警报。现在,如果 up(env='staging') 不存在,我想触发另一个警报。我可以通过 env 对指标求和并查看值,但它没有告诉我缺少哪个环境。

您可以使用 absent(up{env="staging"})

absent function returns non-empty result if the inner time series selector 不匹配任何时间序列。如果系列选择器至少匹配一个时间系列,那么 absent() returns 什么都没有。例如,如果您有以下指标:

up{env="staging"}
up{env="prod"}

然后 absent(up) returns 如果 up{env="staging"} 停止接收新样本,则什么都没有,而 up{env="prod"} 继续接收新样本。这意味着您需要为每个受监控的时间序列定义一个单独的 absent() 查询:

absent(up{env="staging"})
absent(up{env="prod"})

当受监控的时间序列数量增加时,这并不能很好地扩展。这个问题在Prometheus中没有很好的通用解决方案,但是可以用下面的单MetricsQL query in VictoriaMetrics:

来解决
lag(up[24h]) > 5m

此查询returns所有up时间序列,在过去24小时内至少收到一个样本,但在过去5分钟内没有收到新样本。参见 docs for lag() function