我试图做一个自定义配置,显然简单使用黎曼和收藏品。基本上,我想要计算两个流之间的比率。为了做到这一点,我尝试了类似的方法(如Rieamann项目建议这里中的那样):
(project [(service "cahe-miss")
(service "cache-all")]
(smap folds/quotient
(with :service "ratio"
index)))这显然是可行的,但过了一段时间,我注意到了一些漏掉计算的结果。在日志调试之后,我完成了以下配置,以查看发生了什么,并发布值:
(project [(service "cache-miss")
(service "cache-all")]
(fn [[miss all]]
(if (or (nil? miss) (nil? all))
(do nil)
(do (where (= (:time miss) (:time all))
;to print time marks
(println (:time all))
(println (:time miss))
; to distinguish easily each event
(println "NEW LINE")
))
)
)
)令我惊讶的是,每次我从collectd (每10秒)获得新数据(每10秒一次),我创建的函数就会执行两次,就像重用以前未使用的数据一样,而且在(其中(=:time .))中,它似乎根本不关心我的时间等式约束。克莱苏。问题是,我用不同的时间戳来划分度量标准。下面是前面代码的一些输出:
1445606294
1445606294
NEW LINE -- First time I get data
1445606304
1445606294
NEW LINE
1445606304
1445606304
NEW LINE -- Second time I get data
1445606314
1445606304
NEW LINE
1445606314
1445606314
NEW LINE -- Third time I get data有没有人能给出一个提示,如何使数据按我预期的格式格式化?我想,关于“项目”功能,有一些东西我没有理解。或与如何在riemann中处理传入数据有关。
提前感谢!
更新的
我设法解决了我的问题,但我仍然不清楚它是如何工作的,但我设法做到了。现在,我收到了来自收藏品尾插件的两个不同的流(来自nginx原木),我设法使它们之间的商数如下:
(where (or (service "nginx/counter-cacheHit") (service "nginx/counter-cacheAll"))
(coalesce
(smap folds/quotient (with :service "cacheHit" (scale (* 1 100) index)))))我对它进行了广泛的测试,到目前为止,它产生了正确的结果。但是我还是不明白几件事..。首先,合并只是在处理两个事件之后才返回数据。每两秒钟以相同的时间标记发送这两个流的事件,使用"project“而不是”合二为一“,每两秒钟执行两次不同的smap (每个事件一次),但是合并结果只有一个smap与具有相同时间标记的两个事件执行一次,这正是我想要的。
最后,我不知道选择哪一个是分子和分母的标准。是“哪里”中的“或”从句的原因吗?
无论如何,它背后有一些黑魔法,但我设法解决了我的问题;
谢谢大家!
发布于 2015-10-23 21:04:58
以不同速度移动的溪流之间的比率对我来说是行不通的。此后,我决定在固定时间间隔或移动时间间隔内计算比率和费率。这样,您就可以捕获时间块中事件的一致快照,并对此进行计算。下面是将服务接收事件的速率与转发事件的速率进行比较的一些省略代码:
(moving-time-window 30 ;; seconds
(smap (fn [events]
(let [in (or (->> events
(filter #(= (:service %) "event-received"))
count)
0)
out (or (->> events
(filter #(= (:service %) "event-sent"))
count)
0)
flow-rate (float (if (> in 0) (/ out in) 0))]
{:service "flow rate"
:metric flow-rate
:host "All"
:state (if (< flow-rate 0.99) "WARNING" "OK")
:time (:time (last events))
:ttl default-interval}))
(tag ["some" "tags" "here"] index)
(where (and
(< (:metric event) 0.9)
(= (:environment event) "production"))
(throttle 1 3600 send-to-slack))))这将接受一个固定的事件窗口,计算该块的比率,并释放包含该比率的事件作为度量。如果度量不好,它就叫我松懈。
https://stackoverflow.com/questions/33304286
复制相似问题