检测两个值的变化

Detect change in two values

我目前使用 prometheus alertmanager 警报来确定在给定时间 运行 的盒子数量。

我想创建一个警报,如果在线框的数量发生变化就会发出警报。我使用这样的东西:

sum(up{app="mybox"}) != sum(up{app="mybox"} offset 5m)

这将检测状态变化,但不会报告当前/先前值。所有 $labels.value 将 return 是一个 true/false。有没有一种方法可以编写此查询,以便 A) 它在更改时发出警报,并且 B) 报告不同的值?

alert templating 所示,只有一个 $value 可用,它是规则的表达式。

在你的例子中,它将是 sum(up{app="mybox"}) 的新值。根据您的用例,您可以将其表示为

  • 增加:sum(up{app="mybox"}) - sum(up{app="mybox"} offset 5m) != 0
  • 变化率:1 - clamp_max(sum(up) / sum(up{app="mybox"} offset 5m), 0) != 0

如果你真的需要另一个(以前的)值,你可以使用 a query template 但不要把它放在标签中。否则,将为每个先前的值生成不同的警报。

expr: sum(up{app="mybox"}) != sum(up{app="mybox"} offset 5m)
annotations:
   description: The new value {{ $value }} is different from the previous: {{with query "sum(up{app='mybox'} offset 5m)"}}{{ . | first | value}}{{end}}.

注意:您的情况可能简化了查询,但我写了一般情况。