使用 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":
我错过了什么吗?
如果有更频繁的结果,那么我可以看到看起来正确的数字。
是否需要发送最低数量的统计数据?它是可配置的吗?
注意:也许对于这样的偶然数据,StatsD / Graphite不值得,但由于同一项目收集了其他非常频繁的数据,无论如何都会使用这些数据并希望可以使用一个独特的解决方案,即使是罕见的计数器。
答案 0 :(得分:3)
我的设置中的问题是flushInterval
(1秒)低于我的最小保留时间(30秒)
每个(我的情况:30秒),碳缓存存储结果,但是,例如,如果在第二个" 10"伯爵" 1"发送给我的 foobar 键,statsd将发送计数" 0"每秒(每次flushInterval更精确)之后。这意味着在第二个" 30", foobar 的最后一个值是" 0"。唯一的机会,价值" 1"将被考虑的是,如果那是在最近一刻发出的,就在第二个" 30"之前。
有人可以责怪我不要将statsd deleteIdleStats
或deleteCounters
设置用于不发送" 0"。但这样做,将计数器的两倍设置为" 1"在相同的30秒。插槽将错过第一个计数器,导致计数为" 1"正在注册而不是" 2"。
真正的解决方案是将statsd' flushInterval
与碳的最低保留率对齐:
statsd config.js:
flushInterval: 10000
carbon&storage-schemas.conf:
retentions = 10s:1d,1m:30d,5m:90d