Политики
Описание
Политики - это конфигурации управления индексами, описывающие:
- состояния, в которых может находиться индекс, которые отражают этапы его жизненного цикла (например hot, warm, delete и т.д.)
- действия, которые будут выполняться над индексами в определенном состоянии (например релокация на узлы холодного хранения или удаление)
- условия, которые должны быть выполнены для перехода индекса из одного состояния в другое. Например, если возраст индекса превышает восемь недель, то его следует перевести в состояние, в котором определено действие удаления
В политиках вы можете создавать любое количество состояний, связей между ними и выполняемых в них действий.
В данной таблице перечислены соответствующие поля политики, которые доступны при заполнении через интерфейс (Навигационное меню - Управление индексами - Политики индекса - Создать политику):
| Идентификатор поля | Название поля | Описание | Тип | Обязательное | Изменяемое |
|---|---|---|---|---|---|
policy_id | Идентификатор политики | Идентификатор политики (отображаемое имя). | string | Да | Нет |
description | Описание | Описание политики. | string | Да | Да |
ism_template | ISM Шаблоны | Паттерн индексов к которому будет применяться политика. | array<object> | Нет | Да |
states | Состояния | Состояния, которые определены в политике. | array<object> | Да | Да |
Состояния
Состояние - это описание статуса, в котором в данный момент находится управляемый индекс. Одновременно управляемый индекс может находиться только в одном состоянии.
В данной таблице приведены параметры, которые можно настроить для состояния:
| Идентификатор поля | Название поля | Описание | Тип | Обязательное |
|---|---|---|---|---|
name | Название состояния | Название состояния. | string | Да |
actions | Действия | Действия, которые необходимо выполнить после входа в состояние. Дополнительная информация описана в разделе «Действия». | array<object> | Да |
| Определяется порядком в списке | Порядок | Расположение относительно других состояний. Выбирается с помощью выпадающего списка, состоящего из имен созданных состояний. | string | Да |
transitions | Переходы | Следующие состояния и условия, необходимые для перехода в эти состояния. Если переходов нет, то политика считает, что она завершена и может прекратить управление индексом. Если переходов несколько, то переход будет совершен в то состояние, для которого условие выполнилось первым. Дополнительная информация описана в разделе «Переходы». | array<object> | Да |
Действия
Действия - это шаги, которые политика последовательно выполняет над индексом при его переходе в определенное состояние.
ISM выполняет действия в том порядке, в котором они определены. Например, если определены действия [A,B,C,D], ISM выполняет действие A, а затем переходит в период сна, интервал которого задается настройкой кластера plugins.index_state_management.job_interval. После окончания периода сна ISM продолжает выполнять оставшиеся действия одно за другим аналогично. Однако если ISM не может успешно выполнить действие A, операция завершается, а действия B, C и D не выполняются. Для таких случаев существует механизм повторных попыток, который будет описан ниже.
Опционально можно задать период тайм-аута действия, превышение которого приводит к принудительному завершению операции. Например, если тайм-аут установлен на 1d, а ISM не успел выполнить действие над индексом в течение одного дня (даже в рамках повторных попыток), то действие завершится неудачей.
Для любого действия можно задать настройки таймаута и повторных попыток:
| Идентификатор поля | Название поля | Описание | Тип | Обязательный | По умолчанию |
|---|---|---|---|---|---|
timeout | Tаймаут | Максимально допустимое время выполнения действия. | string (time unit, примеры значений: 30m, 4h, 7d) | Нет | Не задано |
count | Количество повторных попыток | Количество раз, которое следует повторять действие если оно завершается неудачей. | number | Да | Не задано |
backoff | Повторение попытки возврата | Функция обратного отсчета, используемая при ожидании повторных попыток. | string (допустимые значения: Exponential, Constant, Linear) | Нет | Exponential |
delay | Задержка повторной попытки | Время ожидания между повторными попытками. | string (time unit) | Нет | Не задано |
Следующий пример настройки действия имеет период тайм-аута в один час. Политика повторяет это действие три раза с экспоненциальным обратным отсчетом, с начальной задержкой в 10 минут:

Аналогичная конфигурация в json представлении:
{
"actions": {
"timeout": "1h",
"retry": {
"count": 3,
"backoff": "exponential",
"delay": "10m"
}
}
}
Остальные параметры определяются самим действием.
Список доступных действий
ISM поддерживает следующие действия:
- force_merge
- read_only
- read_write
- replica_count
- shrink
- close
- open
- delete
- rollover
- notification
- snapshot
- index_priority
- allocation
- rollup
- Move to clickhouse
- Delete by max size
Force Merge
Уменьшает количество сегментов индекса путем слияния сегментов отдельных шардов. Перед началом процесса слияния выполняется попытка перевести индекс в состояние read-only.
| Параметр | Описание | Тип | Обязательный |
|---|---|---|---|
max_num_segments | Количество сегментов, на которые необходимо уменьшить шард. | number | Да |
wait_for_completion | Следует ли ожидать выполнения действия или же вернуть ответ сразу после запуска действия. | boolean | Нет |
task_execution_timeout | Тайм-аут выполнения задачи. Применяется только в том случае, если параметр wait_for_completion имеет значение false. | string (time unit) | Нет |
Пример настройки:
{
"force_merge": {
"max_num_segments": 1
}
}
Read Only
Устанавливает индекс в режим только для чтения.
Пример настройки:
{
"read_only": {}
}
Read Write
Устанавливает индекс в режим для записи.
Пример настройки:
{
"read_write": {}
}
Replica Count
Устанавливает количество реплик индекса.
| Параметр | Описание | Тип | Обязательный |
|---|---|---|---|
number_of_replicas | Определяет количество реплик индекса. | number | Да |
Пример настройки:
{
"replica_count": {
"number_of_replicas": 2
}
}
Shrink
Позволяет сократить количество первичных шардов индекса. С помощью этого действия можно указать:
| Параметр | Описание | Тип | Обязательный |
|---|---|---|---|
num_new_shards | Максимальное количество первичных шардов в уменьшенном индексе. | integer | Да, однако не может быть использован с max_shard_size или percentage_of_source_shards |
max_shard_size | Максимальный размер в байтах шарда для целевого индекса. | string (size unit, примеры значений: 500mb, 1gb) | Да, однако не может быть использован с num_new_shards или percentage_of_source_shards |
percentage_of_source_shards | Процент от числа исходных первичных шардов, подлежащих сокращению. Этот параметр указывает минимальный процент, который следует использовать при сокращении числа первичных шардов. Должен находиться в диапазоне от 0.0 до 1.0 исключая значения. | number | Да, однако не может быть использован с max_shard_size или num_new_shards |
target_index_name_template | Имя сокращенного индекса. Принимает строки и переменные Mustache and (например {"source": "_shrunken"}). | string | Нет |
aliases | Псевдонимы для добавления в новый индекс. | array<object> | Нет |
force_unsafe | Следует ли выполнять действие даже при отсутствии реплик. | boolean | Нет |
Пример настройки:
{
"shrink": {
"num_new_shards": 1,
"target_index_name_template": {
"source": "_shrunken"
},
"aliases": [
{
"my-alias": {}
}
],
"force_unsafe": false
}
}
Если необходимо добавить псевдонимы к действию, то параметр должен содержать массив объектов псевдонимов. Например:
"aliases": [
{
"my-alias": {}
},
{
"my-second-alias": {
"is_write_index": false,
"filter": {
"multi_match": {
"query": "QUEEN",
"fields": ["speaker", "text_entry"]
}
},
"index_routing" : "1",
"search_routing" : "1"
}
},
]
Delete
Удаляет индекс.
Пример настройки:
"delete": {}
Rollover
Создает новый индекс, если текущий достиг лимитов по размеру, возрасту или количеству документов.
| Параметр | Описание | Тип | Обязательный |
|---|---|---|---|
min_index_age | Минимальный возраст индекса. | string (time unit) | Нет, обязательно указание только одного из параметров. |
min_doc_count | Минимальное количество документов. | integer | Нет, обязательно указание только одного из параметров. |
min_size | Минимальный общий размер индекса. | string (size unit) | Нет, обязательно указание только одного из параметров. |
min_primary_shard_size | Минимальный размер первичного шарда. | string (size unit) | Нет, обязательно указание только одного из параметров. |
Пример настройки:
"rollover": {
"min_size": "100gb",
"min_index_age": "1d",
"min_primary_shard_size": "20gb",
"copy_alias": false
}
Allocation
Обновляет параметры аллокации индекса, в следствии чего происходит его перемещение на узел с заданным атрибутами.
| Параметр | Описание | Тип | Обязательный |
|---|---|---|---|
require | Индекс размещается только на узлах, у которых указанные атрибуты соответствует всем заданным значениям. | object | Нет |
include | Индекс может размещаться на узлах, у которых указанные атрибуты соответствует хотя бы одному из заданных значений. | object | Нет |
exclude | Индекс не размещается на узлах, у которых указанные атрибут соответствует любому из заданных значений. | object | Нет |
wait_for | При значении true политика ожидает завершения перемещения всех шардов. При значении false (по умолчанию) действие выполняется в асинхронном режиме. | boolean | Нет |
"allocation": {
"require": {
"routing_mode": "cold"
},
"include": {},
"exclude": {},
"wait_for": false
}
При настройке параметров действия необходимо учитывать существующие правила аллокации индексов, подпадающих под данную политику. Например, если исходная конфигурация индекса содержит параметр include: hot, то в настройках действия следует использовать только поле include (без применения require). Совместное использование этих параметров может привести к конфликту условий аллокации, в результате чего шарды не смогут быть размещены ни на одном узле.
Move to ClickHouse
Перемещает данные в ClickHouse.
| Параметр | Описание | Тип | Обязательный |
|---|---|---|---|
index_name_pattern | Регулярное выражение, определяющее имя таблицы в ClickHouse на основе названия индекса. Именованная группа захвата в регулярном выражении будет использоваться в качестве имени таблицы. Группа захвата должна называться name. | string (например (?<name>.*?)-\d+) | Да |
connection_id | Идентификатор подключения к ClickHouse, настроенный в конфигурации OpenSearch. | string | Да |
fetch_size | Количество событий, отправляемых в ClickHouse за один раз. | integer | Нет |
data_scheme_parameters | Дополнительные настройки, влияющие на взаимодействие с таблицей в ClickHouse. | object | Нет |
Схема data_scheme_parameters
| Параметр | Описание | Тип | Обязательный |
|---|---|---|---|
ttl_interval | Интервал времени жизни документов в таблице в формате interval <count> <time unit> Доступные интервалы (устанавливается на всю таблицу при создании). | string | Нет |
ttl_column | Имя поля типа datetime, на основе которого будет высчитываться TTL. | string | Нет |
cluster_name | Имя кластера ClickHouse (обязательное поле при replication = true или distributed = true). | string | Да, при указании replication или distributed |
replication | Флаг, отвечающий за создание реплицируемой таблицы при переливке (учитывается, если перемещение инициирует создание новой таблицы). | boolean | Нет |
distributed | Флаг, отвечающий за создание распределенной таблицы при переливке (учитывается, если перемещение инициирует создание новой таблицы). | boolean | Нет |
click_server_settings | Словарь "ключ-значение" для передачи настроек ClickHouse клиенту, который используется для подключения к ClickHouse при перемещении данных. | object | Нет |
override_field_types | Словарь для переопределения типов полей исходного индекса на типы ClickHouse, например {"integer_field": "Int64"}. Вложенные поля указываются через точку, например human.age. Если переопределить тип родительского вложенного поля, его дочерние поля не будут созданы отдельно. Вместо этого всё значение будет сохранено в родительском поле как строка типа String, содержащая JSON-структуру. | object | Нет |
override_field_date_formats | Словарь для указания форматов дат в полях, значения которых отличаются от стандартного ISO 8601. Для одного поля можно указать один формат, например "dd.MM.yyyy HH:mm:ss". После обработки дата будет сохранена в результирующей таблице ClickHouse в стандартном формате. | object | Нет |
view_json_as_string | Флаг, определяющий, должны ли столбцы типа JSON представляться как столбцы типа String в VIEW. Необходим для версий ClickHouse, которые не поддерживают использование столбцов типа JSON в VIEW. | boolean | Нет |
json_fields | Список путей к полям, дочерние поля которых будут перемещены в ClickHouse как единый объект JSON. Необходим для перемещения динамически формируемых полей, например a1, a2, a3. | string[] | Нет |
blacklist | Список путей к полям, которые будут проигнорированы и не будут перемещены. Можно указывать префиксы путей, например host.*. | string[] | Нет |
whitelist | Список путей к полям, которые будут перемещены, несмотря на совпадение с черным списком. Можно указывать префиксы путей, например host.*. | string[] | Нет |
timestamp_field_name | Имя поля, в котором хранится временная метка события. Используется, когда имя поля отличается от @timestamp. | string | Нет |
codec | Название кодека, который будет использоваться для кодека по умолчанию. Например, ZSTD(3). | string | Нет |
table_name_template | Шаблон для переименования целевой таблицы. В шаблоне можно использовать имя, извлеченное с помощью index_name_pattern через токен {{name}}, например {{name}}-suffix. | string | Нет |
source_read_mode | Режим чтения исходного документа. Доступны 3 режима: DEFAULT - режим по умолчанию, при котором исходный документ имеет стандартную структуру JSON; FLAT - используется, если исходный документ был проиндексирован в "плоском" виде, например {"user.firstname": "ivan", "user.lastname": "ivanov"}; MIXED - используется, если часть полей была сохранена в "плоском" виде, а часть — в стандартном вложенном формате. | string | Нет |
cb_retries_max_retries | Максимальное количество повторных попыток выполнения задачи после срабатывании Circuit Breaker. После превышения лимита задача завершается с ошибкой. | long | Нет |
cb_retries_initial_delay_millis | Начальная задержка перед первой повторной попыткой после срабатывания Circuit Breaker. Значение указывается в миллисекундах. | long | Нет |
cb_retries_max_delay_millis | Максимальная задержка между повторными попытками. Задержка увеличивается с каждой попыткой, но не превышает указанное значение. | long | Нет |
Допустимые изменения маппинга
Допустимо изменение точности для дат и числовых типов в сторону большей либо той же размерности, либо изменение типа на тип string.
| Было | Стало |
|---|---|
date | date_nanos |
date_nanos | date |
byte | integer, long, short |
short | integer, long |
integer | long |
float | half_float, scaled_float, double |
half_float | float, scaled_float, double |
scaled_float | float, half_float, double |
Кластерные настройки связанные с процессом перемещения данных в ClickHouse
| Настройка | Значение по умолчанию | Описание |
|---|---|---|
plugins.sm.move_to_click.circuit_breaker.limit | "30%" | Лимит для Circuit Breaker, который отвечает за контроль, используемой для преобразования событий, памяти. При достижении лимита перемещение событий, которые стали причиной превышения лимит, будет остановлено. |
plugins.sm.move_to_click.circuit_breaker.overhead | 1.0 | Константа, на которую умножаются оценки размера событий для определения окончательной оценки. |
plugins.sm.move_to_click.estimation.first_n_batch | 10 | Сколько пачек событий будет использовано для формирования коэффициента, используемого для оценки размера трансформированных событий. |
plugins.sm.move_to_click.estimation.each_n_batch | 10 | Константа, как часто будет корректироваться коэффициент, используемый для оценки размера трансформированных событий. Каждые N пачек. |
Delete by max size
Действие удаляет индексы таким образом, чтобы их суммарный размер в каждой группе ISM-шаблонов не превышал заданного значения max_size.
При каждом пересчете политики ISM-действие обрабатывает группы ISM-шаблонов отдельно. Для каждой группы формируется список индексов, соответствующих указанным паттернам. Индексы сортируются по дате создания: от самых старых к самым новым.
Действие Delete by max size обрабатывает только открытые индексы. Закрытые индексы не учитываются при расчете суммарного размера группы и не добавляются в список на удаление.
Параметры действия
| Параметр | Тип | Описание | Обязательный |
|---|---|---|---|
patterns_size | массив | Настройки групп ISM-шаблонов | Да |
Параметры для настройки элементов patterns_size
| Параметр | Тип | Описание | Обязательный |
|---|---|---|---|
patterns | массив | Паттерны индексов, входящих в группу | Да |
max_size | строка | Максимальный допустимый суммарный размер индексов в группы | Да |
max_index_age | строка | Возраст индекса, по достижении которого индекс может быть удален | Нет |
В параметре patterns рекомендуется указывать паттерны индексов, настроенные в ISM-шаблонах, а не имена отдельных индексов.
Использование паттернов позволяет автоматически включать в группу новые индексы, создаваемые в рамках ISM-шаблона, без необходимости изменять политику.
Если суммарный размер индексов в группе превышает значение max_size, действие последовательно добавляет в список на удаление самые старые индексы до тех пор, пока суммарный размер оставшихся индексов не станет меньше заданного лимита.
Если возраст индекса превышает указанное значение max_index_age, индекс удаляется независимо от того, превышает ли суммарный размер группы значение max_size.
Пример настройки политики и расчета удаляемых индексов приведен в соответствующем разделе настройка политики с delete by max size.
{
"delete_by_max_size": {
"patterns_size": [
{
"patterns": [
"patterns1*"
],
"max_size": "5tb",
"max_index_age": ""
},
{
"patterns": [
"patterns2*",
"patterns3*"
],
"max_size": "100gb",
"max_index_age": "5d"
}
]
}
}
Примеры настройки политики
Общая информация
Для начала создайте новую политику. Перейдите в раздел Политики индекса (Навигационное меню - Параметры системы - Управление индексами - Политики индекса) и нажмите Создать политику. В открывшемся окне выберите Визуальный редактор и нажмите Далее.
В форме создания укажите значения полей:
- идентификатор политики — уникальное имя политики
- описание — краткое описание ее назначения
В разделе ISM Шаблоны задайте паттерны индексов, к которым будет автоматически применяться данная политика при создании новых индексов.
Пример конфигурации приведен ниже:

Настройка политики с rollover
- Добавление состояния
init
Перейдите в раздел Состояния и нажмите Добавить состояние. Задайте имя состояния — init, затем нажмите Добавить действие и выберите тип действия Rollover. Укажите необходимые параметры, соответствующие требованиям вашей конфигурации.
В данном примере заданы значения для следующих параметров:
- минимальный возраст индекса
- минимальный размер первичного шарда
Подробнее о параметрах действия Rollover смотрите в соответствующем разделе.

- Настройка параметров повторной попытки
В блоке Настройки таймаута и повторной попытки рекомендуется установить следующие значения:
- количество повторных попыток:
144 - задержка повторной попытки:
10m
Эти параметры обеспечивают выполнение повторных попыток в течение 24 часов с интервалом 10 минут, что увеличивает надежность выполнения действия.

После ввода параметров нажмите Добавить действие, затем - Сохранить состояние.
Разделы Порядок и Переходы на данном этапе не настраиваются.
- Добавление состояния delete
Нажмите Добавить состояние, укажите имя — delete, и настройте его, как показано на примере ниже:

Добавьте действие delete и задайте соответствующие параметры в блоке Настройки таймаута и повторной попытки:

После завершения конфигурации нажмите Добавить действие, затем Сохранить состояние.
- Настройка порядка и переходов
Вернитесь к состоянию init и в разделе Порядок выберите Добавить перед и укажите состояние delete.
Далее нажмите Добавить переход. Укажите:
- состояние назначения: delete
- условия: параметр, при котором будет происходить переход между состояниями

Завершите настройку нажатием Добавить переход, затем - Обновить состояние.
- Создание политики
После завершения всех этапов нажмите Создать.
На этом конфигурация политики с использованием rollover завершена.
Настройка политики с релокацией
Настройка действия будет выполнена на примере существующей политики.
- Добавление состояния
Создайте новое состояние, например с именем cold. В параметрах Порядок укажите: Добавить после и выберите состояние init.
- Настройка действия allocation
Добавьте новое действие, выбрав тип действия — allocation. Заполните параметры, например, следующим образом:
{
"require": {},
"include": {
"routing_mode": "cold"
},
"exclude": {},
"wait_for": false
}
При настройке данного действия важно учитывать текущую аллокацию индексов, см. действие allocation.
Параметры в разделе Настройки таймаута и повторной попытки можно задать аналогично тем, что использовались при настройке действия delete. Рекомендуемые значения указаны в соответствующем разделе выше.
- Настройка перехода
Для настройки перехода нажмите Добавить переход. Укажите следующие параметры:
- состояние назначения — выберите целевое состояние
- условия — задайте условие, при котором будет выполнен переход
Пример настройки:

Затем нажмите Добавить переход, после чего - Сохранить состояние.
- Актуализация порядка состояний
initиdelete
- откройте состояние
initи задайте порядок:Добавить перед-cold - для состояния
deleteукажите порядок:Добавить после-cold
На этом настройка политики с релокации завершена.
Настройка политики с ожиданием данных до отсчета rollover
Для выполнения данной настройки требуется наличие ранее настроенной политики с использованием rollover, дополнительная информация приведена в соответствующем разделе настройка политики с rollover.
- Создание состояния
Добавьте новое состояние с именем, например, wait_events. Откройте его для редактирования и в разделе Порядок укажите: Добавить перед - init.
Для состояния wait_events действия не добавляются.
- Настройка перехода
Нажмите Добавить переход и задайте параметры:
- состояние назначения — выберите целевое состояние
- условия — определите условие для выполнения перехода
Пример настройки перехода:

После заполнения параметров нажмите Добавить переход, затем - Сохранить состояние.
- Обновление порядка состояний
Откройте состояние init и в разделе Порядок задайте: Добавить после - wait_events.
На этом настройка политики с ожиданием данных до отсчета rollover завершена.
Настройка политики с delete by max size
- Добавление состояния
Добавьте новое состояние, например с именем init, и настройте его в соответствии с требованиями вашей политики.
- Добавление действия
Delete by max size
Нажмите Добавить действие и выберите тип действия Delete by max size. Затем заполните параметры действия, нажмите Добавить действие и настройте необходимые переходы.
Пример настройки действия:

В данном примере настроены две группы ISM-шаблонов:
- группа №1:
[index1, index3, index5] - группа №2:
[index2, index4, index6]
| Индекс | Размер |
|---|---|
index1 | 10gb |
index2 | 50gb |
index3 | 5gb |
index4 | 5gb |
index5 | 100gb |
index6 | 62gb |
Группа №1
Для группы №1 задан лимит размера 20gb и максимальный возраст индекса 5d.
Предположим, что при пересчете политики сформирован следующий список индексов, отсортированный по дате создания:
[index5, index1, index3]
Суммарный размер группы составляет 115gb, что превышает заданный лимит 20gb.
В этом случае будет удален только индекс index5, так как после его удаления суммарный размер оставшихся индексов составит 15gb.
Это значение не превышает лимит 20gb, поэтому индексы index1 и index3 не будут удалены в рамках текущего пересчета.
При последующих пересчетах политики эти индексы могут быть удалены, если выполнится одно из следующих условий:
- суммарный размер группы снова превысит
20gb - возраст индексов превысит значение
max_index_age, равное5d
Группа №2
Для группы №2 задан лимит размера 100gb и максимальный возраст индекса 1w.
Предположим, что при пересчете политики сформирован следующий список индексов, отсортированный по дате создания:
[index4, index2, index6]
Суммарный размер группы составляет 117gb, что превышает заданный лимит 100gb.
Сначала действие удалит самый старый индекс index4. После этого суммарный размер оставшихся индексов составит 112gb.
Поскольку 112gb все еще превышает лимит 100gb, действие продолжит удаление и удалит следующий индекс - index2.
После удаления index2 суммарный размер оставшихся индексов составит 62gb, что не превышает лимит 100gb. Поэтому index6 не будет удален в рамках текущего пересчета
Если один и тот же ISM-шаблон соответствует нескольким группам из patterns_size, будут применены настройки первой подходящей группы.