我正在寻找是否可以将total number of event count for the current one hr interval
与total number of event count with the previous one hour interval
进行比较,如果当前小时数is less
超过前一小时数,则应从{{1}触发一封电子邮件}。
我不确定是否可以存储该值并将其与当前事件值进行比较,因为我知道由于Riemann中的Riemann
选项,事件将过期。
如果我错了,请纠正我,并建议我在TTL
中提供参考代码。
提前致谢
答案 0 :(得分:1)
听起来你想要一小时内计数的变化率然后决定这个比率是否为负数?一种方法就像你描述的那样:
(fold-interval-metric 3600 folds/count
(fixed-event-window 2
(smap folds/difference
(where (neg? (:metric event))
email))))
这是有道理的。您可能会发现,如果您使用随时间变化的内置导数函数ddt
并对其进行绘图,则可以在更短的时间尺度内发现这些问题。如果你的成功率在一分钟三小时内降至零,那么计算机在呼叫人类寻求帮助之前需要等待很长时间。如果15分钟内的变化率无法实现负无穷大,那么您的服务很可能就会停止。
我喜欢将ddt
包裹在指数加权移动平均线ewma
中,因此峰值不会引发警报,并且具有极低的误报率:
(ewma 30 (ddt ...your stuff here...))
我经常希望将服务请求的比率与使用ewma
ddt
和project
的此模式的回复进行比较:
(pipe ↲ (splitp = service
"service:input" (ewma 30 ↲)
"service:output" (ewma 30 ↲)
bit-bucket) ;; throw out other services here
(project [(service "service:input")
(service "service:output")]
(smap folds/quotient-sloppy
(with :service "service-ratio-rate-of-change"
(ddt ...your streams here...)))))
如果请求不频繁,则需要在所有这些示例中使用间隔,以确保警报不会在事件之间发生。如果您的事件很少发生,您可能还需要将事件设置为:ttl,以便在您灌输它们时它们不会过期。
ps:↲可以是你想要的任何符号,我只选择了那个unicode字符 pss:如果仔细考虑这些事情,每季度一次警报的假阳性率应该是合理的。