使用statsD时,有没有办法填充graphite中缺失的数据?

16
我正在使用statsD向graphite报告计数器数据;每当我收到消息时,就会发送一个tick。这很好用,除非statsD由于某种原因必须重新启动。然后我在图表中会出现巨大的空洞,因为statsD现在不再每隔10秒发送'0',以表示我没有收到任何消息的时间段。
我为各种不同的消息类型和队列报告,有时会有某个队列在很长一段时间内没有接收到消息。
是否有任何现有方式可以使用我指定的默认值(在我的情况下为0)“填充”缺失的数据?
我考虑发送给定指标的'0'计数,以便statsD开始为它发送0,但我并不总是提前知道将要报告的指标集。

原来有一个函数可以完全做到我想要的。虽然正如@ALQ所指出的那样,了解它会影响聚合函数是很重要的;transformNull()。 - BigBen
4个回答

19

请查看Graphite提供的transformNull函数。例如:

transformNull(stats.timers.deploys.all.duration.total.mean, 0)

这将把具有空数据的部分映射为0。


12
你可以在Graphite中使用"keepLastValue(requestContext, seriesList)"函数来处理缺失数据。当数据出现间隙('None'值)时,它会将线保持在最后接收到的值上,而不是使其中断。

太棒了!不完全是我想要的,因为我想报告0而不是最后一个值。不过,大多数情况下,这个值是0,所以这暂时可以解决问题。谢谢! - BigBen
2
不是要挑剔,发送0而不是“无数据”会降低您的聚合值(分位数、平均值)。 - Alexis Lê-Quôc

9
如果您只想在可视化图表中“填充”零值,请查看“Graph Options-> Line Mode-> Draw Null as Zero”。这不会让您设置除0以外的值,并且如果您以json或csv格式获取数据,它也不会导致0显示出来,但如果您只想查看一些没有记录数据的拉伸的图形,通常就是您想要的。

2
这个问题的解决方案不是保留最后一个值或转换null。实施这些选项只会导致显示不正确的数据,并且当出现问题时您将不会收到警报。
您需要更改存储模式,以便它存储您发送的数据量,而不是更多。
如果指标每5秒发送一次,而您的存储模式为1秒,则会得到五个数据点,其中四个为空。
请查看此文档:https://github.com/etsy/statsd/blob/master/docs/graphite.md

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接