Стоимость работы кластера OpenSearch во многом зависит от объема данных, хранящихся на кластере. Если вы храните данные, основанные на времени, то обычно старые данные запрашиваются реже, чем новые, и старые данные часто используются только для того, чтобы посмотреть на "общую картину" или сравнить исторические тенденции.
Задания Rollup позволяют значительно сократить расходы на хранение старых данных за счет хранения документов, обобщающих данные за определенный период времени. Это означает, что вы сохраняете возможность выполнять поиск по ключевым параметрам в этих данных, хотя и с меньшей детализацией. Например, вы можете хранить метрики использования процессора и диска, которые записываются каждую минуту. Можно настроить задание обобщения данных, чтобы суммировать эти данные в почасовых пакетах.
Определение задания общения данных
Вы можете определить задание общения данных, используя следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | PUT _rollup/job/metrics { "index_pattern": "metrics-*", "rollup_index": "metrics_rollup", "cron": "*/30 * * * * ?", "page_size": 1000, "groups": { "date_histogram": { "field": "@timestamp", "fixed_interval": "60m" }, "terms": { "fields": [ "node", "environment"] } }, "metrics": [ { "field": "cpu", "metrics": [ "min", "max", "sum", "avg" ] }, { "field": "disk", "metrics": [ "avg", "max" ] } ] } |
Планировщик
Cron определяет частоту запуска задания общения. Вы можете предпочесть распределить нагрузку на регулярные короткие задания с высокой частотой cron или запускать одно длинное задание в 2 часа ночи, в зависимости от профиля нагрузки на вашем кластере OpenSearch.
Группы (groups)
Группы определяют "ведра", по которым должны быть обобщены ваши данные. Внутри групп:
Гистограмма дат (date_histogram)
Обязательно нужно определить гистограмму дат.
Вы должны определить "календарный_интервал" (например, 1M для месяца) или "фиксированный_интервал" (например, 2h, 1d).
Имейте в виду, что месячные интервалы могут дать неравномерные по размеру ведра, поэтому в целом предпочтительнее использовать фиксированные интервалы.
Термины (terms)
Также важно включить любые другие "ведра", которые вы, возможно, захотите использовать для классификации данных. Например, вы можете объединить данные в подгруппы по узлам или средам.
Важно тщательно продумать, какие поля вы хотите включить сюда, чтобы иметь возможность анализировать и классифицировать данные. Если вы опустите поля, то не сможете разделить данные по полям, которые сюда не включены. Однако следует избегать включения полей с высокой кардинальностью, поскольку это приведет к увеличению размера свернутого индекса на диске.
Метрики (metrics)
Определите метрики, которые вы хотите анализировать, и необходимые вам агрегаты.
Возможные значения: min, max, sum, avg и value_count. Опять же, запрос по метрикам, не включенным в этот список, будет невозможен.
Запуск и остановка задания
1 2 | POST _rollup/job/<id>/_start POST _rollup/job/<id>/_stop |
Поиск обобщенных данных
Вы можете искать обобщенные данные, используя точно такой же синтаксис, как и при поиске стандартных данных. Кроме того, вы можете искать обобщенные данные в сочетании с индексами обычных данных. OpenSearch сам определит, какую комбинацию обобщенных данных/индексов использовать для оптимизации результатов. Единственное, что вам нужно сделать, это использовать специальную конечную точку _rollup_search вместо _search.
1 2 3 4 5 6 7 8 9 10 11 | GET /metrics_rollup/_rollup_search { "size": 0, "aggregations": { "max_cpu": { "max": { "field": "cpu" } } } } |