Prometheus 针对缺失发现目标的警报规则

Prometheus 针对缺失发现目标的警报规则

我正在尝试编写一条通用规则,当发现的目标丢失时触发警报。特别是注释了用于抓取并使用 kubernetes_sd_configs 自动发现的 kubernetes pod。

形式为:的表达式absent(up{job="kubernetes-pods"}==1)不返回任何作为正常运行时间序列一部分的附加标签。如果删除了 pod(例如,由于错误),它将从 prometheus 中消失,不再是目标。会触发基于absent() 的警报,但我不知道哪个 pod 丢失了。

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

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

答案1

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

是的,你需要为每一件单独的事物制定一个规则,以便在丢失时发出警报,因为 Prometheus 根本不知道它们的标签——服务发现不会返回它。

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

答案2

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

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

count (our_metric offset 1h > 0) by (some_name) unless count(our_metric) by (some_name)

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

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

相关内容