LINUX.ORG.RU
решено ФорумAdmin

Influxdb возвращает разное число строк с group by и без него

 ,


0

1

Строю себе мониторинг на fluentd+influxdb+grafana. Influx не умеет считать процент строк по критерию X из общего числа строк, поэтому хочу делать скриптами. Но столкнулся со странным поведением influx.

$ influx -database 'logs' -execute 'select count(status) from "access" where time > now() - 10s' -precision ms
name: access
time          count
----          -----
1504177821728 1320

$ influx -database 'logs' -execute 'select count(status) from "access" where time > now() - 10s group by time(10s)' -precision ms
name: access
time          count
----          -----
1504177820000 324
1504177830000 471

То есть получается, что одна и та же выборка дает два разных результата.

Поток новых данных стабильный и равномерный 80-100rps (без скачков), так что результаты запроса в influx должны быть в пределах погрешности. При выполнении несколько раз подряд запроса с group by так и происходит, я всегда в сумме получаю приблизительно 800 строк. Но при выполнении без group by результат равномерно снижается где-то до 800, потом вскакивает до 2000, затем снова снижается.

Чем такое поведение может быть обусловлено?

★★★★★

Последнее исправление: l0stparadise (всего исправлений: 1)

У инфлюха немного странная группировка. Но вообще тут при группировке он делит все таймстампы на 10000 без остатка и группирует по одинаковым значениям.

Dred ★★★★★
()

Но при выполнении без group by результат равномерно снижается где-то до 800, потом вскакивает до 2000, затем снова снижается.

У тебя случайно с одинаковыми таймстампами данные не пишет ? Он при группировке любит такое дело игнорить, если нет доп правил

Dred ★★★★★
()
Последнее исправление: Dred (всего исправлений: 1)
Ответ на: комментарий от Dred

Вообще гипотетически такое возможно, но у меня precision в миллисекундах, так что вероятность крайне мала (С).

Но вообще тут при группировке он делит все таймстампы на 10000 без остатка и группирует по одинаковым значениям.

Да, я думал об этом, но в таком случае запросов во втором случае должно быть еще больше (1504177821728 - то есть еще лишние полторы секунды сверху).

l0stparadise ★★★★★
() автор топика
Ответ на: комментарий от Dred

Но вообще инфлюкс вроде как не умеет в одинаковые таймстемпы и перезаписывает данные в таком случае.

l0stparadise ★★★★★
() автор топика
Ответ на: комментарий от l0stparadise

не, он же сначала достает по условию, а потом группирует.

перезаписывает

возможно, я как-то напарывался на это, но не помню точно как он себя вел.

Dred ★★★★★
()
Ответ на: комментарий от Dred

Решил. Серваки в закрытой сети без интернетов, ntp нет, а системное время разнилось на сервере мониторинга и на источнике логов. Изменил фильтр на time > now() - 10s and time < now(), все стало нормально.

l0stparadise ★★★★★
() автор топика
Ответ на: комментарий от l0stparadise

Серваки в закрытой сети без интернетов, ntp нет

Подними внутри свой ntp сервер. Синхронизировать с интернет не обязательно, достаточно будет источника local. Главное чтобы у всех было одинаковое время, пусть даже неточное.

imul ★★★★★
()
Ответ на: комментарий от imul

Главное чтобы у всех было одинаковое время, пусть даже неточное.

Идея хорошая. Но из-за слишком большого числа серверов в сети я не вижу пока правильного решения. Синхронизировать время только на своих - хорошо в рамках данной темы, но в рамках всей фирмы - возможно, будут расхождения. Лучший вариант - откопать какой-нибудь наиболее критичный сервис, уговорить админа стартануть ntpd и синхронизироваться с ним.

l0stparadise ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.