在特定服务的 riemann 配置中,我试图将其分配给所有事件 metric=1,在 5 秒内对它们求和并将结果发送到 influxdb。
我尝试了以下方法:
(streams
(where (service "offers")
(fixed-time-window 5
(smap folds/sum (with :metric 1 index))))
influx)
它并没有真正起作用,存储在 influx 中的事件与此规则不匹配。
内置folds/count
函数执行此操作:
(fixed-time-window 5
(smap folds/count influx))
对 influx 的调用也需要是进行计数的流的子级,因此它是被索引的计数。
如果您想修复您的示例,folds/sum
您可以将(with :metric 1)
调用移至 sum 调用的外部或上游,以便将指标设置为 1,然后在对 的调用中对新指标求和folds/sum
。然后将调用 index 和/或 influx 作为 smap 的子流,以便汇总的项目被索引和转发。
添加到 Arthur 的答案中,您可能想要使用rate
(with scale
) 而不是fixed-time-window
(with smap
and folds/count
)。rate
通常比fixed-time-window
因为rate
一旦时间窗口结束就触发,而fixed-time-window
必须等到时间窗口结束后新事件到达,这永远不会发生或在未来发生太远。黎曼有一个关于这个的问题。
还有来自 aphyr 的评论,解释了为什么rate
比窗口函数更有效。
您只需要使用它,scale
因为rate
当您希望以 5 秒为单位(在 5 秒的间隔内测量)时,它将以秒为单位测量速率。