Как уменьшить выборку данных старше 14 дней только в файле effxdb и сохранить их в той же таблице, что и исходные данные? - PullRequest
0 голосов
/ 25 октября 2019

У меня есть установка, собирающая метрики из телеграфа в приток. Затем Grafana использует infxdb в качестве источника данных для отображения графиков.

Моя проблема заключается в сокращении использования диска, поэтому я хочу уменьшить выборку старых данных (старше 3 дней) и сохранить новые данные (младше 3 дней) без изменений. (raw)

Я попробовал политику хранения (RP) Infliff и Continuous Queries (CQ), как описано в руководстве: https://docs.influxdata.com/influxdb/v1.2/guides/downsampling_and_retention

         influxdb ("telegraf")
+----------------------------+
|                            |
| +-----------------------+  |
| |  table disk_raw       |  |
| |  CURRENT RP (RAW)     +---------+
| |  (deleted after 3d)   |  |      |
| +-----------------------+  |      |CQ (average 30 min of datapoints into 1)
| +-----------------------+  |      |
| |  table_disk_ds        |  |      |
| |  LONGTERM RP          +<--------+
| |(downsampled, kept 90d)|  |
| +-----------------------+  |
|                            +<----+
+----------------------------+     |
                                   |
                                   |
      grafana                      | grafana query
+----------------------------+     |
|                            |     |
|  +----------------------+  |     |
|  |    data graph        |  +-----+
|  +----------------------+  |
|                            |
+----------------------------+

Проблема в том, что это решение дает вам2 таблицы, одна для необработанных данных и одна для данных с пониженной выборкой. CQ постоянно записывает данные с пониженной выборкой. Это не так хорошо для меня, как:

  • Я использую графану для запроса Infliff и она читает из одной таблицы в граф. И мне нужен один график как для старых, так и для новых данных.
  • Использование 2 баз данных увеличивает использование диска

Есть ли способ уменьшить выборку старых записей в той же таблице?

пример конфигурации: https://docs.influxdata.com/influxdb/v1.2/guides/downsampling_and_retention

запрос графана

SELECT mean("used_percent") FROM "disk" WHERE ("device" = 'dm-0') AND $timeFilter GROUP BY time(10s) fill(none)

1 Ответ

3 голосов
/ 25 октября 2019

EDIT2 : Вот обходной путь, реализованный с помощью шаблонных переменных в Grafana
https://github.com/grafana/grafana/issues/4262#issuecomment-475570324
Это похоже на действительно хорошее решение.

ОРИГИНАЛЬНЫЙ ОТВЕТ Рассматривая пример со страницы притока, на которую вы ссылались

CREATE CONTINUOUS QUERY "cq_30m" ON "food_data" BEGIN
  SELECT mean("website") AS "mean_website",mean("phone") AS "mean_phone"
  INTO "a_year"."orders"
  FROM "orders"
  GROUP BY time(30m)
END

Если вы указали одну и ту же исходную и целевую таблицы, а именно orders, в обоихINTO и FROM, тогда данные будут записаны в одну и ту же таблицу.

Однако это не решит вашу проблему.
Вам все равно понадобится два запроса для получения данных из обоих хранилищ. политики. Если вы сделаете общий select * from disk_raw ..., Influx будет использовать политику хранения по умолчанию и вернет данные оттуда.

Обычно вы делаете это, выполняя два запроса и объединяя результаты. В одном запросе что-то вроде
select * from rp_short.diskraw; select * from rp_long.diskraw

РЕДАКТИРОВАТЬ: Здесь обсуждается, почему невозможно сделать то, что вы (и многие другие люди) хотят https://github.com/influxdata/influxdb/issues/2625 А такженекоторые способы обойти это.
Вкратце, один из способов - обрабатывать данные понижающей дискретизации и высокого разрешения вручную (т.е. не с CQ) и сохранять их в той же политике хранения. Другой способ - использовать прокси-сервер, который увеличит запрос в зависимости от временного диапазона запроса, чтобы получить правильные данные.

...