【问题标题】:Riemann - Build a stream dynamically from a map黎曼 - 从地图动态构建流
【发布时间】:2015-03-03 00:15:55
【问题描述】:

我有以下函数,它获取带有服务名称和阈值的地图。它检查服务是否超过定义的阈值,然后在事件上调用多个下游子级。

(defn tc
  [s & children]
   (where
     (and (service (:service_name s)) (not (expired? event)))
       (by [:host :service]
         (where (> metric (:threshold s)
           (with :state "critical" 
             (apply sdo children)))))))

我想使用地图向量动态构建流:

(def services [{:service "cpu/usage" :threshold 90}
               {:service "memory/usage" :threshold 90}])

当尝试在流中运行它时,我收到以下警告:

(streams
  (doseq [s services] (tc s prn)))

WARN [2015-01-05 14:27:07,187] Thread-15 - riemann.core - instrumentation service caught
java.lang.NullPointerException
  at riemann.core$stream_BANG_$fn__11140.invoke(core.clj:19)
  at riemann.core$stream_BANG_.invoke(core.clj:18)
  at riemann.core$instrumentation_service$measure__11149.invoke(core.clj:57)
  at riemann.service.ThreadService$thread_service_runner__8782$fn__8783.invoke(service.clj:66)
  at riemann.service.ThreadService$thread_service_runner__8782.invoke(service.clj:65)
  at clojure.lang.AFn.run(AFn.java:22)
  at java.lang.Thread.run(Thread.java:701)

如果我在doseq 中运行streams 函数,它就可以工作。 这个工作并给出以下输出:

(doseq [s services]
  (streams (tc s prn)))

#riemann.codec.Event{:host "testhost", :service "memory/usage", :state "critical", :description nil, :metric 91.0, :tags nil, :time 1420460856, :ttl 60.0}

【问题讨论】:

  • 这些是您的确切事件还是已被省略?
  • @ArthurUlfeldt,我不确定问题是否出在事件中。由于该功能确实有效,因此如果我使用以下代码(doseq [s services] (streams (tc s prn)))。我不想为每个服务创建一个流,而是为所有服务创建一个流。
  • (with :service "everything" ... process combined stream here ..) 会将所有内容合并到一个服务中
  • @ArthurUlfeldt,我想做的是有一个地图矢量。每张地图描述一个服务和一个阈值。我想检查如果服务超过定义的阈值,则事件状态设置为“关键”。我想要做的是使用这个数据集运行流函数。

标签: clojure riemann


【解决方案1】:

如果您的事件没有所有必填字段,它似乎会爆炸,这是一个类似项目的示例,我从一系列事件中构建一个事件(减少)虽然我不完全是你正在做的事情' m 以同样的方式产生事件:

{:service (:service (first events))
 :metric (->> events count)
 :host "All-counts"
 :state "OK"
 :time (:time (last events))
 :ttl default-interval}

我专门在时间丢失时获得了 NPE。如果您无法从某处继承它,只需在此处弥补(例如使用now)没有合理的值,事件到期将不起作用,您将用完 RAM

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2016-03-19
    相关资源
    最近更新 更多