Шепот агрегации не работает для более старых точек данных
Схема хранения углерода
[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
На графике графана я могу видеть агрегацию (суммарное значение) для последних введенных значений. Но за 1 год до этого значения не агрегируются. Фактически отображается только одно значение (последняя запись из окна за 1 час) 8 вместо 4+6+8=18.
Чего не хватает в настройках?
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)
Однако буфер отбрасывается, когда первая точка буфера старше заданного порогового значения.
Порог вычисляется таким образом, чтобы позволить агрегировать поздние точки (если точки появляются через несколько секунд после обычных окон 5 минут), но это должно где-то останавливаться (в противном случае все точки должны храниться в памяти углеродного агрегатора навсегда). Это theshold 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)
Поздние точки являются угловым случаем дизайна буфера графита (и большинства баз данных временных рядов). Если вы знаете, что некоторые моменты могут прийти с опозданием, вы можете попытаться увеличить MAX_AGGREGATION_INTERVALS
настройки, но я бы порекомендовал сначала хранить их в другом месте и переосмыслить их в автономном режиме с тем, что хранится в графите.
Та же проблема и нет доступа к настройкам графита / шепота из-за среды prod. Вы можете агрегировать данные извне, а затем отправлять их в порт данных графита.https://github.com/floringavrila/graphite-feeder