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

whisper aggregation not working for older data points

碳储存方案

[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 图表上,我能够看到最近输入值的聚合(总和值)。但是 1 年前的值未汇总。事实上,只显示一个值(来自 window 的 1 小时的最新条目)8,而不是 4+6+8=18。

配置中可能缺少什么?

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

在你的例子中,5m:15d 意味着缓冲区将存储在过去 5 分钟内收到的所有点,并经常发出它们的总和用于碳缓存(这将写入 whisper 文件)。

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

示例:

  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)

会在whisper文件中写入2分:

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

但是,缓冲区是dropped when the the first point of the buffer is older than a given threshold

阈值的计算方式允许聚合迟到的点(如果点在正常的 windows 5 分钟后几秒出现)但是这必须在某处停止(否则所有点都应该被存储在碳聚合器的记忆中永远)。 这个阈值 resolution * settings['MAX_AGGREGATION_INTERVALS'] 其中 MAX_AGGREGATION_INTERVALS 默认为 5。

在您的情况下,所有在其携带的时间戳后 25 分钟收到的点都将找到已删除的缓冲区。在这种情况下,Graphite 将创建一个新的缓冲区并发出 "the aggregated" 值以耳语,覆盖正确的值。

在前面的例子中,如果你发送一个点:

hello.world 100  1427615690 (~15 minutes ago)

发射时间25分钟后覆盖耳语。 你会得到:

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

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

同样的问题,由于生产环境,无法访问石墨/耳语设置。 您可以在外部聚合数据,然后将其发送到石墨数据端口。 https://github.com/floringavrila/graphite-feeder