使用statsD时,有没有办法填写石墨中的缺失数据?

时间:2012-12-06 04:19:32

标签: graphite statsd

我正在使用statsD向石墨报告计数器数据;每次收到消息时都会发送一个勾号。这种方法很有效,除非statsD因任何原因必须重新启动。然后我在我的图表中得到了很大的漏洞,因为在我没有收到任何消息的时间段内,statsD现在不再每10秒发送一次“0”。

我正在报告各种不同的消息类型和队列,有时我很长时间没有收到特定队列的消息。

是否有任何现有方法使用我指定的默认值“填充”缺失的数据(在我的情况下,这将是0)?

我考虑为给定的指标发送'0'计数,以便statsD开始为它发送0,但我并不总是知道我将提前报告的指标集。

4 个答案:

答案 0 :(得分:17)

查看Graphite提供的功能transformNull。 e.g。

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

这会将包含空数据的部分映射到0。

答案 1 :(得分:11)

您可以在graphite中使用“keepLastValue(requestContext,seriesList)”函数来处理缺失的数据。它“[c]在数据中出现间隙('无'值)时,将最后收到的值打开,而不是破坏你的行。”

答案 2 :(得分:9)

如果您只想用零填充视觉图形,请查看“图形选项 - >线条模式 - >绘制零点为零”。这不会让你设置0以外的值,如果你得到json或csv格式的数据,它不会导致0出现,但如果你只是想看到一些图形,它通常是你想要的伸展,没有数据记录。

without Draw Null as Zero

With Draw Null as Zero

答案 3 :(得分:2)

此问题的解决方案不是保留最后一个值或转换空值。实现其中一个选项只会导致您显示不正确的数据,并在出现问题时不会收到警报。

您需要更改存储架构,以便存储您要发送的数据量,而不是更多。

如果每5秒发送一次指标,并且您的存储架构显示为1,那么您将获得5个数据点,其中4个将为空。

查看此文档:https://github.com/etsy/statsd/blob/master/docs/graphite.md