這聽起來像你想計數的變化率超過一個小時,然後決定是否這個速度是負的?其中一種方法就像您所描述的那樣:
(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...)))))
如果請求是:到請求的速率與這種模式,它使用ewma
ddt
和project
響應比較服務在所有這些例子中,您經常需要使用間隔時間來確保報警不會在事件之間發生。如果你的事件很少發生,你可能還需要設置:ttl的事件足夠高,以防止他們在澆灌時過期。
ps:↲可以是任何您想要的符號,我只是選擇了unicode字符。
pss:如果你仔細考慮這些事情,每個季度一次報警的誤報率應該是合理的。
當我回到我的電腦時,我會寫出更好的答案,簡而言之:使用固定時間窗口摺疊/總和。或者使用您希望每秒事件的度量標準。在stream部分的http://riemann.io/api.html中有很多好東西。 –
'rate'和'folds/sum'會給出計數,但我希望將計數與前一小時事件計數進行比較。 – Mangoski