消息格式如下:
"user_login 1 13xxxxxxx" (key value timestamp)
我的问题是Graphite给了我一个只有值为“1”的线图,每分钟一次。 我每分钟发送随机数量的消息(在6到60之间),但我认为Graphite限制了显示一个值的第一个(或最后一个?)消息。
如何才能每分钟对每个消息进行求和呢?
"user_login 1 13xxxxxxx" (key value timestamp)
我的问题是Graphite给了我一个只有值为“1”的线图,每分钟一次。 我每分钟发送随机数量的消息(在6到60之间),但我认为Graphite限制了显示一个值的第一个(或最后一个?)消息。
如何才能每分钟对每个消息进行求和呢?
你也可以尝试使用碳聚合服务,这样指标在收集时就会被聚合起来,而不是在 Graphite UI 中聚合。请参阅 http://graphite.readthedocs.org/en/latest/config-carbon.html#aggregation-rules-conf 了解聚合规则的配置。需要注意的是,你需要将指标发送到运行在不同端口上的碳聚合服务端口,而不是普通的碳收集器端口。
Jari是正确的,carbon-aggregator是专门为此编写的。
确保在aggregation-rules.conf中使用sum函数进行聚合,例如:
bpu.<cluster>.<account>.<metric>_sum (1) = sum bpu.<cluster>.<account>.<metric>_sum
如果你想对超过一分钟的内容进行求和,可以使用 sumSeries(graphite.counterName) 或者 summarize 函数。
hitcount(seriesList, intervalString, alignToInterval=False)
http://code.hootsuite.com/accurate-counting-with-graphite-and-statsd/
http://obfuscurity.com/2012/04/Unhelpful-Graphite-Tip-1
http://graphite.readthedocs.org/en/latest/functions.html#graphite.render.functions.hitcount
默认情况下,Graphite仅在最小保留粒度(而不是平均值)中存储任何传入指标的最后值。如果您需要聚合数据,常见解决方案是使用statsd。
但是,您也可以使用carbon-aggregator。只需确保将指标发送到聚合器行端口,然后更新aggregation-rules.conf文件,并添加以下规则:
user_login (10) = sum user_login$
在你的系列上使用累积函数。
默认情况下,在绘制图形时,如果像素宽度小于要绘制的数据点数, Graphite会对每个像素的值进行平均。cumulative()函数将合并函数更改为从平均值到求和。
这也可能是您的数据按指标聚合的方式,它默认为平均值,这可能不是您所期望的。另请参见使用StatsD(通过Etsy)和Graphite跟踪指标,Graphite图似乎没有绘制所有数据。