我正在尝试创建错误警报。有一个指标可以计算应用程序中发生的错误。但当我尝试捕捉它的增加时,它总是返回 0。
increase(app_error[1h])
即使我用偏移量来做到这一点
offset 5h
,直到第一次遇到它时,它就会消失。有没有办法找到第一个遇到的错误及其第一个值的增加(从0到1)?我只需要在该指标的第一次计数时触发警报。
简短回答:否。
长答案:不,但是您可以通过在代码中声明相应指标时将指标初始化为 0 来绕过此限制。也许还有其他解决方案,我现在想不到。
原因是你的指标
app_error
只有在第一次增加后才开始在Prometheus中“存在”。因此 increase
会给你增加 0(从无到 1 是... 0)。
已经解决了
app_error unless app_error offset 1h
返回表达式的左侧
unless
表达式的右侧没有匹配项。
这是我迄今为止想出的最终解决方案:
sum(increase(app_error[1h]) or vector(0))
+ sum((app_error unless app_error offset 1h) or vector(0))
第一部分
sum(increase(app_error[1h]) or vector(0))
:
vector(0)
第二部分
sum((app_error unless app_error offset 1h) or vector(0))
:
vector(0)
将被返回结论:当您将这 2 项相加时,您应该检测到增加或第一个计数器增量。
如果您想按某些标签求和,我可以找到最好的:
sum by (label1, label2) (max_over_time(app_error[2m]) or vector(0))
- sum by (label1, label2) (max_over_time(app_error[1m] offset 1m) or vector(0))
我在这次讨论中发现它应用了我自己的标签并摆弄了范围以使其适合我的情况: https://github.com/prometheus/prometheus/issues/1673#issuecomment-508485652