未发现目标的 Prometheus 警报规则

Bud*_*ric 7 prometheus

我正在尝试编写一个通用规则来在发现的目标丢失时发出警报。特别是使用 kubernetes_sd_configs 为抓取和自动发现注释的 kubernetes pod。

形式的表达式:absent(up{job="kubernetes-pods"}==1)不返回作为正常运行时间序列的一部分可用的任何其他标签。如果一个 pod 被删除(比如错误),它就会作为目标从 prometheus 中消失。触发了基于缺席()的警报,但我没有关于丢失什么 pod 的信息。

我认为自动发现的 kubernetes 服务也会发生同样的情况。如果它被误删除了,它就会作为监视目标消失。我不确定具有 ip 范围的target_groups ( https://prometheus.io/blog/2015/06/01/advanced-service-discovery/ )的行为是否相同- 也就是说,如果物理节点已关闭指标只是停止和上升 == 0 不可用。

以一般方式检测自动发现的目标何时消失的正确方法是什么?或者我是否需要明确地为每个服务/节点/pod 硬编码规则,即使它是自动发现的?

bri*_*zil 8

或者我是否需要明确地为每个服务/节点/pod 硬编码规则,即使它是自动发现的?

是的,您需要为每件事情制定一个规则,以提醒您丢失的东西,因为 Prometheus 从任何地方都不知道他们的标签 - 服务发现不会返回它。

通常的警报是 absent(up{job="kubernetes-pods"})


Dav*_*vid 6

我们一直在解决类似的问题。我们的设置:当某些服务在某处启动时,某些指标会显示为非零值。然后,如果这些指标中的任何一个丢失,我们需要一个警报。

在我们的例子中,实现这一目标的正确表达是

count (our_metric offset 1h > 0) by (some_name) unless count(our_metric) by (some_name)
Run Code Online (Sandbox Code Playgroud)

这将返回一个向量,其中包含一个小时前存在但现在不存在的指标。指标的值count(...)来自 LHS(甚至可能有用)。

您可以使用任何 LHS/RHS。阅读有关除非运算符的更多信息。