Понимание групп
Устарело в версии 8.11.0.
Функция сводки будет удалена в будущей версии. Пожалуйста, перейдите к сглаживанию вместо этого.
Для сохранения гибкости задачи сводки определяются на основе того, как будущие запросы могут использовать данные. Традиционно системы вынуждают администратора принимать решения о том, какие метрики сводить и с каким интервалом. Например, среднее значение cpu_time в почасовом интервале. Это ограничение; если в будущем администратор захочет увидеть среднее значение cpu_time в почасовом интервале и разделенное по host_name, у него не будет такой возможности.
Конечно, администратор может решить сводить кортеж [hour, host] в почасовом интервале, но по мере увеличения количества ключей группирования увеличивается и количество кортежей, которые администратор должен настроить. Кроме того, эти кортежи [hours, host] полезны только для почасовых сводок… для суточных, еженедельных или ежемесячных сводок требуется новая конфигурация.
Вместо того, чтобы заставлять администратора заранее решать, какие отдельные кортежи должны быть объединены, задачи сводки Elasticsearch настраиваются на основе групп, которые могут быть полезны для будущих запросов. Например, эта конфигурация:
"groups" : {
"date_histogram": {
"field": "timestamp",
"fixed_interval": "1h",
"delay": "7d"
},
"terms": {
"fields": ["hostname", "datacenter"]
},
"histogram": {
"fields": ["load", "net_in", "net_out"],
"interval": 5
}
} Позволяет использовать date_histogram на поле "timestamp", агрегации terms на полях "hostname" и "datacenter" и histograms на любом из полей "load", "net_in", "net_out".
Важно, что эти агрегации/поля могут быть использованы в любой комбинации. Эта агрегация:
"aggs" : {
"hourly": {
"date_histogram": {
"field": "timestamp",
"fixed_interval": "1h"
},
"aggs": {
"host_names": {
"terms": {
"field": "hostname"
}
}
}
}
} так же валидна, как и эта агрегация:
"aggs" : {
"hourly": {
"date_histogram": {
"field": "timestamp",
"fixed_interval": "1h"
},
"aggs": {
"data_center": {
"terms": {
"field": "datacenter"
}
},
"aggs": {
"host_names": {
"terms": {
"field": "hostname"
}
},
"aggs": {
"load_values": {
"histogram": {
"field": "load",
"interval": 5
}
}
}
}
}
}
} Вы заметите, что вторая агрегация не только значительно больше, но и поменяла позицию агрегации terms по полю "hostname", иллюстрируя, что порядок агрегаций для сводок не имеет значения. Аналогично, хотя агрегация date_histogram требуется для сводки данных, она не требуется при запросе (хотя часто используется). Например, это допустимая агрегация для выполнения поиска сводки:
"aggs" : {
"host_names": {
"terms": {
"field": "hostname"
}
}
} В конечном счете, при настройке groups для задачи, подумайте о том, как вы могли бы разбить данные в запросе в будущем… и включите эти данные в конфигурацию. Поскольку поиск сводки позволяет использовать любой порядок или комбинацию сгруппированных полей, вам просто нужно определить, полезно ли поле для агрегирования позже и как вы хотели бы его использовать (terms, histogram и т.д.).
Календарные интервалы против фиксированных интервалов
Каждая задача сводки должна иметь группу по датам с определённым интервалом. Elasticsearch понимает как календарные, так и фиксированные интервалы. Фиксированные интервалы довольно легко понять; 60s означает шестьдесят секунд. Но что означает 1M? Один месяц времени зависит от того, о каком месяце мы говорим; некоторые месяцы длиннее или короче других. Это пример календарного времени, и продолжительность этого интервала зависит от контекста. Календарные единицы также зависят от високосных секунд, високосных лет и т. д.
Это важно, потому что корзины, сгенерированные сводкой, находятся либо в календарных, либо в фиксированных интервалах, что ограничивает способы их последующего запроса. См. Запросы должны быть кратными конфигурации.
Мы рекомендуем использовать фиксированные интервалы, поскольку они легче понять и более гибкие во время запроса. Это введет некоторое смещение в данные во время високосных событий, и вам придется думать о месяцах как о фиксированных значениях (30 дней) вместо фактической календарной длины. Однако это часто проще, чем иметь дело с календарными единицами во время запроса.
Кратные единицы всегда «фиксированные». Например, 2h всегда является фиксированным количеством 7200 секунд. Единичные единицы могут быть фиксированными или календарными в зависимости от единицы:
| Единица | Календарная | Фиксированная |
|---|---|---|
миллисекунда | НЕТ |
|
секунда | НЕТ |
|
минута |
|
|
час |
|
|
день |
|
|
неделя |
| НЕТ |
месяц |
| НЕТ |
квартал |
| НЕТ |
год |
| НЕТ |
Для некоторых единиц, где существуют как фиксированные, так и календарные, вам может потребоваться выразить количество в терминах следующей меньшей единицы. Например, если вы хотите фиксированный день (а не календарный день), вы должны указать 24h вместо 1d. Аналогично, если вы хотите фиксированные часы, укажите 60m вместо 1h. Это связано с тем, что отдельное количество подразумевает календарное время и ограничивает вас поиском по календарному времени в будущем.
Ограничения группировки с гетерогенными индексами
Ранее существовало ограничение в том, как сводка могла обрабатывать индексы с гетерогенными отображениями (несколько не связанных/непересекающихся отображений). Рекомендация на тот момент состояла в настройке отдельной задачи на каждый тип данных. Например, вы можете настроить отдельную задачу для каждого модуля Beats, который вы включили (одна для process, другая для filesystem и т. д.).
Эта рекомендация была обусловлена внутренними реализациями, которые приводили к потенциально некорректным значениям количества документов, если использовалась единственная «объединённая» задача.
Это ограничение с тех пор было устранено. Начиная с версии 6.4.0, лучшей практикой является объединение всех конфигураций сводки в одну задачу.
Например, если ваш индекс содержит два типа документов:
{
"timestamp": 1516729294000,
"temperature": 200,
"voltage": 5.2,
"node": "a"
} и
{
"timestamp": 1516729294000,
"price": 123,
"title": "Foo"
} лучшей практикой является объединение их в одну задачу сводки, которая охватывает оба типа документов, например, так:
PUT _rollup/job/combined
{
"index_pattern": "data-*",
"rollup_index": "data_rollup",
"cron": "*/30 * * * * ?",
"page_size": 1000,
"groups": {
"date_histogram": {
"field": "timestamp",
"fixed_interval": "1h",
"delay": "7d"
},
"terms": {
"fields": [ "node", "title" ]
}
},
"metrics": [
{
"field": "temperature",
"metrics": [ "min", "max", "sum" ]
},
{
"field": "price",
"metrics": [ "avg" ]
}
]
} Количество документов и перекрывающиеся задачи
Ранее существовала проблема с количеством документов в «перекрывающихся» конфигурациях задач, обусловленная тем же внутренним реализационным аспектом. Если было две задачи сводки, сохраняющие данные в одном индексе, где одна задача является «подмножеством» другой задачи, возможно, что количество документов было некорректным для определённых вариантов агрегаций.
Эта проблема также была устранена в версии 6.4.0.
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/rollup-understanding-groups.html