1

在特定服务的 riemann 配置中,我试图将其分配给所有事件 metric=1,在 5 秒内对它们求和并将结果发送到 influxdb。

我尝试了以下方法:

(streams
  (where (service "offers")
    (fixed-time-window 5
      (smap folds/sum (with :metric 1 index))))
  influx)

它并没有真正起作用,存储在 influx 中的事件与此规则不匹配。

4

2 回答 2

2

内置folds/count函数执行此操作:

(fixed-time-window 5
  (smap folds/count influx))            

对 influx 的调用也需要是进行计数的流的子级,因此它是被索引的计数。

如果您想修复您的示例,folds/sum您可以将(with :metric 1)调用移至 sum 调用的外部或上游,以便将指标设置为 1,然后在对 的调用中对新指标求和folds/sum。然后将调用 index 和/或 influx 作为 smap 的子流,以便汇总的项目被索引和转发。

于 2015-07-25T00:03:42.357 回答
1

添加到 Arthur 的答案中,您可能想要使用rate(with scale) 而不是fixed-time-window(with smapand folds/count)。rate通常比fixed-time-window因为rate一旦时间窗口结束就触发,而fixed-time-window必须等到时间窗口结束后新事件到达,这永远不会发生或在未来发生太远。黎曼有一个关于这个的问题。

还有来自 aphyr 的评论,解释了为什么rate比窗口函数更有效。

您只需要使用它,scale因为rate当您希望以 5 秒为单位(在 5 秒的间隔内测量)时,它将以秒为单位测量速率。

于 2015-07-26T00:14:02.240 回答