Почему я получаю N+1 точек данных из графита, когда я просто запросил N точек данных?
render?target=summarize(\*.\*.\*.count,'15min','sum')&from=12:07_20131110&format=json&until=12:22_20131110
Я ожидаю 1 пункт данных здесь, но я получаю 2
[{"target"=>"summarize(foo.example.abc.count, \"15min\", \"sum\")", "datapoints"=>[[nil, 1384113600], [3.0, 1384114500]]}]
render?target=summarize(\*.\*.\*.count,'1hour','sum')&from=12:24_20131109&format=json&until=12:24_20131110
Я ожидаю 24 точки данных здесь, но я получаю 25, за последние 24 часа
[{"target"=>"summarize(foo.example.abc.count, \"1hour\", \"sum\")", "datapoints"=>[[nil, 1384027200], [nil, 1384030800], [nil, 1384034400], [nil, 1384038000], [nil, 1384041600], [nil, 1384045200], [nil, 1384048800], [nil, 1384052400], [nil, 1384056000], [nil, 1384059600], [nil, 1384063200], [nil, 1384066800], [nil, 1384070400], [nil, 1384074000], [nil, 1384077600], [nil, 1384081200], [nil, 1384084800], [nil, 1384088400], [nil, 1384092000], [nil, 1384095600], [nil, 1384099200], [nil, 1384102800], [nil, 1384106400], [4.0, 1384110000], [4.0, 1384113600]]}]
Вот until
всегда указывает на текущее время. Пожалуйста, кто-нибудь может объяснить, почему это так? и как ограничить точки данных, чтобы соответствовать моим ожиданиям?
2 ответа
Я передумал от того, что я сказал в комментариях.
Я посмотрел на документацию по графиту дляsummarize()
,
Проблема в том, что по умолчанию сегменты соответствуют интервалу. Если вы укажете интервал '15min'
, from=12:07_20131110
, а также until=12:22_20131110
тогда будет два ведра. Первое будет 12:00-12:15, а второе - 12:15-12:30. Аналогично, если вы укажете интервал '1hour'
, from=12:24_20131109
, а также until=12:24_20131110
тогда будет 25 ведер. Первый будет 12:00-1:00 2013-11-09, а последний будет 12:00-1:00 2013-11-10.
Проблема, как она есть, заключается в том, что сегменты выровнены по интервалу, а время от и до - нет. Вы можете указать alignToFrom=True
указать ведра, которые соответствуют вашему времени. Я не уверен, что это даст вам желаемое количество сегментов, но это должно сделать более очевидным, какой блок вы должны выбросить, потому что, если есть "дополнительный" блок, он почти полностью выпадет за пределы вашего до спектр.
Возможно, такое поведение так, потому что два n+1 ограничивающих конца необходимы для кадрирования n интервалов.
Передайте точное время эпох UNIX в from
а также until
,