石墨是否可用于非常偶然的计数器?

时间:2014-07-09 13:29:24

标签: graphite statsd

使用 statsd ,配置flushInterval: 1000并与 graphite的碳缓存进行通信。我希望我能看到非常偶尔的专柜

我对碳有以下配置:

存储schemas.conf:

[carbon]
pattern = ^carbon\.
retentions = 60:90d

[default_30s_for_1day]
pattern = .*
retentions = 30s:1d

以这种方式发送一个独特的计数器:

$ echo "foobar:1|c" > /dev/udp/127.0.0.1/8125

我可以看到 statsd 收到的数据包:

9 Jul 14:43:05 - DEBUG: foobar:1|c

以及发送到carbon-cache(tcpdump extract)的数据:

stats.foobar 1 1404909785

在石墨中,查看" foobar"的数据。我可以看到那一刻发生的事情(细线,见图中的红色圆圈),但结果总是在" 0":

enter image description here

我错过了什么吗?

如果有更频繁的结果,那么我可以看到看起来正确的数字。

是否需要发送最低数量的统计数据?它是可配置的吗?

注意:也许对于这样的偶然数据,StatsD / Graphite不值得,但由于同一项目收集了其他非常频繁的数据,无论如何都会使用这些数据并希望可以使用一个独特的解决方案,即使是罕见的计数器。

1 个答案:

答案 0 :(得分:3)

我的设置中的问题是flushInterval(1秒)低于我的最小保留时间(30秒)

每个(我的情况:30秒),碳缓存存储结果,但是,例如,如果在第二个" 10"伯爵" 1"发送给我的 foobar 键,statsd将发送计数" 0"每秒(每次flushInterval更精确)之后。这意味着在第二个" 30", foobar 的最后一个值是" 0"。唯一的机会,价值" 1"将被考虑的是,如果那是在最近一刻发出的,就在第二个" 30"之前。

有人可以责怪我不要将statsd deleteIdleStatsdeleteCounters设置用于发送" 0"。但这样做,将计数器的两倍设置为" 1"在相同的30秒。插槽将错过第一个计数器,导致计数为" 1"正在注册而不是" 2"。

真正的解决方案是将statsd' flushInterval与碳的最低保留率对齐:

statsd config.js:

flushInterval: 10000

carbon&storage-schemas.conf:

retentions = 10s:1d,1m:30d,5m:90d