如果log_error_count
在过去的一分钟内增加了至少1
,我希望收到提醒。
所以最初我的查询看起来像
ALERT BackendErrors
IF rate(log_error_count[1m]) > 0
FOR 1s
...
但后来我尝试使用prometheus仪表板来检查图表。
使用查询
log_error_count
我的图表看起来像
当我查看带有查询的图表时
rate(log_error_count[2m])
我的图表看起来像
事实上,我还尝试了功能irate
,changes
和delta
,它们都变为零。
为什么速率为零,我的查询需要什么才能让我能够在计数器增加一次时发出警报?
答案 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