Понимание групп
Данная функциональность находится в техническом превью и может быть изменена или удалена в будущих выпусках. Elastic будет работать над устранением любых проблем, но функции в техническом превью не подпадают под SLA поддержки официальных функций GA.
Для сохранения гибкости задачи Rollup определяются на основе того, как будущие запросы могут потребовать использования данных. Традиционно системы вынуждают администратора принимать решения о том, какие метрики сворачивать и с каким интервалом. Например, среднее значение cpu_time в часовом формате. Это ограничение; если в будущем администратор захочет увидеть среднее значение cpu_time в часовом формате и с разделением по host_name, у него не получится.
Конечно, администратор может решить сворачивать кортеж [hour, host] в часовом формате, но по мере увеличения количества ключей группировки увеличивается и количество кортежей, которые администратор должен настроить. Кроме того, эти кортежи [hours, host] полезны только для сворачивания данных в часовом формате… сворачивание в суточном, еженедельном или ежемесячном формате требует новых настроек.
Вместо того, чтобы заставлять администратора заранее решать, какие отдельные кортежи необходимо сворачивать, задачи Rollup 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", что демонстрирует, как порядок агрегаций не имеет значения для задач Rollup. Аналогично, хотя date_histogram требуется для сворачивания данных, оно не требуется при запросе (хотя часто используется). Например, это допустимая агрегация для выполнения Rollup Search:
"aggs" : {
"host_names": {
"terms": {
"field": "hostname"
}
}
} В конечном итоге, при настройке groups для задачи, думайте о том, как вы могли бы разделить данные в запросе в будущем… и включайте эти поля в конфигурацию. Так как Rollup Search позволяет использовать любой порядок или комбинацию сгруппированных полей, вам нужно только решить, полезно ли поле для агрегации позже и как вы могли бы его использовать (terms, гистограмма и т.д.).
Календарные против фиксированных интервалов времени
Каждая задача Rollup должна иметь группу с гистограммой дат с определенным интервалом. Elasticsearch понимает как календарные, так и фиксированные интервалы времени. Фиксированные интервалы довольно легко понять; 60s означает шестьдесят секунд. А что означает 1M? Один месяц времени зависит от того, о каком месяце идет речь; некоторые месяцы длиннее или короче других. Это пример календарного времени, и продолжительность этого блока зависит от контекста. Календарные единицы также зависят от високосных секунд, високосных лет и т.д.
Это важно, потому что создаваемые задачами Rollup корзины используют либо календарные, либо фиксированные интервалы, что ограничивает то, как вы можете их запросить позже. См. Запросы должны быть кратными конфигурации.
Мы рекомендуем использовать фиксированные интервалы, так как они легче поддаются пониманию и более гибкие при запросах. Это внесет некоторое смещение в ваши данные во время високосных событий, и вам придется думать о месяцах как о фиксированной величине (30 дней), а не об их фактической календарной продолжительности. Однако это часто проще, чем иметь дело с календарными единицами при запросах.
Кратные единицы всегда «фиксированные». Например, 2h всегда является фиксированной величиной 7200 секунд. Единичные единицы могут быть фиксированными или календарными, в зависимости от единицы:
| Единица | Календарная | Фиксированная |
|---|---|---|
миллисекунда | НЕТ |
|
секунда | НЕТ |
|
минута |
|
|
час |
|
|
день |
|
|
неделя |
| НЕТ |
месяц |
| НЕТ |
квартал |
| НЕТ |
год |
| НЕТ |
Для некоторых единиц, где есть как фиксированные, так и календарные значения, вам может потребоваться выразить количество в терминах следующей более мелкой единицы. Например, если вы хотите фиксированный день (не календарный день), вы должны указать 24h вместо 1d. Аналогично, если вы хотите фиксированные часы, укажите 60m вместо 1h. Это связано с тем, что единичное количество подразумевает календарное время и ограничивает вас запросами по календарному времени в будущем.
Ограничения группировки с гетерогенными индексами
Ранее существовало ограничение в том, как Rollup мог обрабатывать индексы с гетерогенными отображениями (множественные, несвязанные/непересекающиеся отображения). Тогда рекомендовалось настраивать отдельную задачу для каждого типа данных. Например, вы можете настроить отдельную задачу для каждого модуля Beats, который вы включили (одна для process, другая для filesystem и т.д.).
Это рекомендация была обусловлена внутренними особенностями реализации, которые могли привести к потенциально некорректным подсчетам количества документов, если использовалась одна «объединённая» задача.
Это ограничение с тех пор устранено. С версии 6.4.0 рекомендуется объединять все конфигурации Rollup в одну задачу.
Например, если ваш индекс содержит два типа документов:
{
"timestamp": 1516729294000,
"temperature": 200,
"voltage": 5.2,
"node": "a"
} и
{
"timestamp": 1516729294000,
"price": 123,
"title": "Foo"
} лучшей практикой является объединение их в одну задачу Rollup, охватывающую оба типа документов, как показано ниже:
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" ]
}
]
} Количество документов и перекрывающиеся задачи
Ранее существовала проблема с подсчетом документов в конфигурациях «перекрывающихся» задач, вызванная той же внутренней особенностью реализации. Если две задачи Rollup сохраняли данные в один и тот же индекс, где одна задача была «подмножеством» другой задачи, было возможно, что количество документов могло быть неверным для некоторых схем агрегаций.
Эта проблема также была устранена в версии 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/7.17/rollup-understanding-groups.html