普罗米修斯检查指标是否存在
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。
我有基于指标的警报,在我的情况下,有时可能会消失。假设指标为 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。