2016-08-18 91 views
1

我找我是否可以比較total number of event count for the current one hr intervaltotal number of event count with the previous one hour interval,如果當前的小時數is less比前一小時計,然後一個電子郵件應該從Riemann觸發事件計數值。如何比較與以前的時間間隔事件

我不確定我們是否可以存儲該值並將其與當前事件值進行比較,因爲我知道事件將由於Riemann中的TTL選項而過期。

請糾正我,如果我錯了,並建議我在Riemann實現它的參考代碼。

在此先感謝

+0

當我回到我的電腦時,我會寫出更好的答案,簡而言之:使用固定時間窗口摺疊/總和。或者使用您希望每秒事件的度量標準。在stream部分的http://riemann.io/api.html中有很多好東西。 –

+0

'rate'和'fol​​ds/sum'會給出計數,但我希望將計數與前一小時事件計數進行比較。 – Mangoski

回答

0

這聽起來像你想計數的變化率超過一個小時,然後決定是否這個速度是負的?其中一種方法就像您所描述的那樣:

(fold-interval-metric 3600 folds/count       
    (fixed-event-window 2 
    (smap folds/difference 
      (where (neg? (:metric event)) 
       email)))) 

這是有道理的。您可能會發現,如果您使用隨時間變化的內置衍生函數ddt並繪製圖表,您可以在更短的時間內發現這些問題。如果您的成功率在一分鐘三分鐘內降到零,那麼等待57分鐘後,計算機需要等待很長時間才能呼叫人類尋求幫助。如果15分鐘內的變化率接近負無窮大,則很可能您的服務剛剛停止。

我喜歡在指數加權包裝ddt均線ewma所以峯值不會掀起了報警和曾與這種模式極低的誤報率:

(ewma 30 (ddt ...your stuff here...)) 

我經常想

(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...))))) 

如果請求是:到請求的速率與這種模式,它使用ewmaddtproject響應比較服務在所有這些例子中,您經常需要使用間隔時間來確保報警不會在事件之間發生。如果你的事件很少發生,你可能還需要設置:ttl的事件足夠高,以防止他們在澆灌時過期。

ps:↲可以是任何您想要的符號,我只是選擇了unicode字符。
pss:如果你仔細考慮這些事情,每個季​​度一次報警的誤報率應該是合理的。