如何将事件计数值与先前的时间间隔事件进行比较

时间:2016-08-18 13:43:59

标签: clojure clojurescript riemann

我正在寻找是否可以将total number of event count for the current one hr intervaltotal number of event count with the previous one hour interval进行比较,如果当前小时数is less超过前一小时数,则应从{{1}触发一封电子邮件}。

我不确定是否可以存储该值并将其与当前事件值进行比较,因为我知道由于Riemann中的Riemann选项,事件将过期。

如果我错了,请纠正我,并建议我在TTL中提供参考代码。

提前致谢

1 个答案:

答案 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 ddtproject的此模​​式的回复进行比较:

 (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:如果仔细考虑这些事情,每季度一次警报的假阳性率应该是合理的。