耳语聚合不适用于旧数据点
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
碳储存方案
[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