耳语聚合不适用于较旧的数据点

时间:2015-03-09 10:42:42

标签: graphite whisper

碳储存计划

[default]  
pattern = .*  
retentions = 5m:15d,15m:1y,1h:10y,1d:100y

存储聚合:

[all_sum]  
pattern = .*  
xFilesFactor = 0.1  
aggregationMethod = sum  

现在,我正在输入条目:

echo "rec.test 25 $(date --date="-6 minute" +%s)" | nc localhost 2003  
echo "rec.test 50 $(date --date="-3 minute" +%s)" | nc localhost 2003  
echo "rec.test 100 $(date +%s)" | nc localhost 2003  
echo "rec.test 1 $(date --date="-1 year" +%s)" | nc localhost 2003  
echo "rec.test 4 $(date --date="-1 year minute" +%s)" | nc localhost 2003  
echo "rec.test 6 $(date --date="-1 year -1 minute" +%s)" | nc localhost 2003  
echo "rec.test 8 $(date --date="-1 year -2 minute" +%s)" | nc localhost 2003  

在grafana图上,我能够看到最近的feeded值的聚合(总和值)。但是在价值未汇总之前1年。实际上只显示一个值(窗口1小时的最新条目)8而不是4 + 6 + 8 = 18。

配置中可能缺少什么?

2 个答案:

答案 0 :(得分:1)

碳聚合器中有一个缓冲机制,用于存储在最佳保留期内收到的值并发出聚合值。

在您的示例中,5m:15d表示缓冲区将存储过去5分钟内收到的所有点,并经常发出碳缓存的总和(将写入耳语文件)。

这解释了石墨中点的正常工作流程。

示例:

  Metrics received:
  hello.world 42  1427615689 (15 minutes ago)
  hello.world 1   1427615869 (12 minutes ago)
  hello.world 1   1427615929 (11 minutes ago)
  hello.world 314 1427616049 (9 minutes ago)
  hello.world 1   1427616051(~9 minutes ago)

将在私语文件中写下2分:

1427615689 44 (42+1+1)
1427615989 315 (314+1)

但是,当缓冲区的第一个点比给定的dropped更早时,缓冲区为threshold

阈值的计算方式是允许汇总后期点(如果点数在5分钟的正常窗口后几秒钟),但这必须在某处停止(否则所有点都应存储在碳聚合器的内存中曾经)。 这是卖resolution * settings['MAX_AGGREGATION_INTERVALS'],其中MAX_AGGREGATION_INTERVALS默认为5.

在您的情况下,他们携带时间戳后25分钟收到的所有积分都会找到已删除的缓冲区。在这种情况下,石墨将创建一个新的缓冲区并发出“聚合”值来低语,覆盖正确的值。

在上一个示例中,如果您发送一个点:

hello.world 100  1427615690 (~15 minutes ago)
发射后25分钟,它将覆盖耳语。 你会得到:

1427615689 100 (100)
1427615989 315 (314+1)

晚点是grahite缓冲区设计(以及大多数时间序列数据库)的极端情况。 如果您知道某些点可能会迟到,您可以尝试增加MAX_AGGREGATION_INTERVALS设置,但我建议先将它们存储在其他位置,然后将它们与石墨中存储的内容进行离线重新组合。

答案 1 :(得分:0)

此处存在相同问题,并且由于产品环境而无法访问石墨/耳语设置。 您可以在外部汇总数据,然后将其发送到石墨数据端口。 https://github.com/floringavrila/graphite-feeder