0

例如,如果我们想发送过去 10 分钟的平均数据,如果 metric 的平均值超过 1000,则警报 freezhan,我在 riemann 中这样表达想法:

(streams
  (moving-time-window 
    600 ; 600 sec = 10 min
    (folds/mean
    (where (> metric 1000)
      (email "freezhan@mycompany.com")))))

但是得到一些像这样的错误:

信息 [2016-06-01 18:26:49,002] SIGHUP 处理程序 - riemann.pubsub - 清除瞬态订阅。错误 [2016-06-01 18:26:49,069] SIGHUP 处理程序 - riemann.bin - 无法重新加载:java.lang.IllegalArgumentException:不知道如何从:riemann.config$eval2171$stream__2172 创建 ISeq,正在编译:(/etc/riemann/riemann.config:51:38) 在clojure.lang 的clojure.lang.Compiler.loadFile(Compiler.java:7086) 的clojure.lang.Compiler.load(Compiler.java:7142)。 RT$3.invoke(RT.java:318) at riemann.config$include.invoke(config.clj:408) at riemann.bin$reload_BANG_.invoke(bin.clj:27) at riemann.bin$handle_signals$fn__11886。在 riemann.bin.proxy$java.lang.Object$SignalHandler$d8c00ec7.handle(未知来源)在 sun.misc.Signal$1.run(Signal.java:212)在 java.lang 调用(bin.clj:43) .Thread.run(线程。

4

1 回答 1

2

不知道如何从:riemann.config$eval2171$stream__2172 创建 ISeq

这表明某种类型的错误,一些代码需要实现ISeq协议的东西,但传递了其他东西。所以让我们深入挖掘:

移动时间窗口

每次窗口内有新事件到达时,都会向子级发送窗口中的事件向量

向量不实现ISeq,所以这很可能是问题所在。尝试用smapfold/mean包装函数:

(streams
  (moving-time-window 
    600 ; 600 sec = 10 min
    (smap folds/mean
    (where (> metric 1000)
      (email "freezhan@mycompany.com")))))
于 2016-06-01T15:12:03.057 回答