普罗米修斯:警惕价值变化

时间:2017-05-09 17:07:18

标签: prometheus

如果log_error_count在过去的一分钟内增加了至少1,我希望收到提醒。

所以最初我的查询看起来像

ALERT BackendErrors
  IF rate(log_error_count[1m]) > 0
  FOR 1s
  ...

但后来我尝试使用prometheus仪表板来检查图表。

使用查询

log_error_count

我的图表看起来像

log_error_count

当我查看带有查询的图表时

rate(log_error_count[2m])

我的图表看起来像

rate(log_error_count[2m])

事实上,我还尝试了功能iratechangesdelta,它们都变为零。

为什么速率为零,我的查询需要什么才能让我能够在计数器增加一次时发出警报?

2 个答案:

答案 0 :(得分:0)

planetlabs / draino也有类似的问题:
我希望能够检测出何时耗尽了节点。
(不幸的是,他们沿用了极简的日志记录策略,该策略对于日志记录是有意义的,而转移到了没有意义的指标上……)
raino_pod_ip:10002 / metrics终结点的网页完全为空...直到第一次出现耗尽才存在...
我的需求稍微难于检测,当value = 0(又称为Pod重新启动)时,我不得不处理不存在的指标。
我必须检测到从不存在-> 1以及从n-> n + 1过渡。
这是我想出的,请注意我检测到的指标是一个整数,我不确定用小数点表示该值如何,即使它需要根据您的需要进行调整,我认为它也可以帮助您指出正确的方向:


(absent(draino_cordoned_nodes_total offset 1m) == 1 and count(draino_cordoned_nodes_total) > -1)

^当度量从不存在转换为存在时,会创建blip 1

((draino_cordoned_nodes_total - draino_cordoned_nodes_total offset 1m) > 0)

^从n-> n + 1

开始增加时,创建blip 1

结合2:

(absent(draino_cordoned_nodes_total offset 1m) == 1 and count(draino_cordoned_nodes_total) > -1) or ((draino_cordoned_nodes_total - draino_cordoned_nodes_total offset 1m) > 0)

^或将它们结合在一起使我能够检测到变化,只要在grafana图上单点出现1,我想这就是您的追求。

答案 1 :(得分:0)

@neokyle有一个很好的解决方案,具体取决于您使用的指标。​​

就我而言,我需要解决类似的问题。问题是我还具有需要包含在警报中的标签。并且使用不存在是不可行的,因为这将意味着为每个标签生成警报。 (我正在使用Jsonnet,所以这是可行的,但仍然很烦人!)

在我的案例中,关键是使用unless,它是补数运算符。我写的东西看起来像这样:

(my_metric unless my_metric offset 15m) > 0

这将导致度量从不存在到不存在之后的一系列结果,同时还保留所有标签。该系列将持续到offset为止,因此会产生15m的斑点。这不是超级直观,但我的理解是,当系列本身不同时,它是正确的。因此,例如,当值更改时,这不会触发。

您可以继续使用or来增加(增量/增量)> 0,具体取决于您使用的是什么。这有点混乱,但举个例子:

(
  my_metric
  unless my_metric offset 15m
) > 0
or
(
  delta(
    my_metric[15m]
  )
) > 0