Шепот агрегации не работает для более старых точек данных

Схема хранения углерода

[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

Другие вопросы по тегам