Перейти к основному содержимому
Версия: 4.2

Политики

Описание

Политики - это JSON-документы, которые определяют:

  • Состояния, в которых может находиться индекс, включая состояние по умолчанию для новых индексов. Например, можно назвать состояния hot, warm, delete и т.д.
  • Любые действия, которые плагин должен выполнять, когда индекс переходит в то или иное состояние, например, выполнять rollover.
  • Условия, которые должны быть выполнены для перехода индекса в новое состояние, называемые переходами. Например, если возраст индекса превышает восемь недель, то его следует перевести в состояние "удаление".

Другими словами, политика определяет состояния, в которых может находиться индекс, действия, которые необходимо выполнять в том или ином состоянии, и условия, которые должны быть выполнены для перехода из одного состояния в другое.

При разработке политик предоставляется полная свобода действий. Можно создать любое состояние, перейти в любое другое состояние и указать любое количество действий в каждом состоянии.

В данной таблице перечислены соответствующие поля политики:

ПараметрОписаниеТипОбязательноеТолько для чтения
policy_idИмя политикиstringДаДа
descriptionОписание политики в человекочитаемом форматеstringДаНет
ism_templateУказанный шаблон ISM-шаблона, соответствующий индексу для применения политикиnested list of objectsНетНет
last_updated_timeВремя последнего обновления политикиtimestampДаДа
error_notificationНазначение и шаблон сообщения для уведомлений об ошибкахobjectНетНет
default_stateНачальное состояние по умолчанию для каждого индекса, использующего данную политикуstringДаНет
statesСостояния, которые определены в политикеnested list of objectsДаНет

Состояния

Состояние - это описание статуса, в котором в данный момент находится управляемый индекс. Одновременно управляемый индекс может находиться только в одном состоянии. Каждое состояние имеет связанные с ним действия, которые последовательно выполняются при входе в состояние, и переходы, которые проверяются после выполнения всех действий.

В этой таблице перечислены параметры, которые можно задать для состояния:

ПолеОписаниеТипОбязательное
nameНазвание состоянияstringДа
actionsДействия, которые необходимо выполнить после входа в состояние. Дополнительная информация описана в разделе «Действия»nested list of objectsДа
transitionsСледующие состояния и условия, необходимые для перехода в эти состояния. Если переходов нет, то политика считает, что она завершена и может прекратить управление индексом. Дополнительная информация описана в разделе «Переходы».nested list of objectsДа

Действия

Действия - это шаги, которые политика последовательно выполняет при переходе в определенное состояние.

ISM выполняет действия в том порядке, в котором они определены. Например, если определены действия [A,B,C,D], ISM выполняет действие A, а затем переходит в период сна, основанный на настройке кластера plugins.index_state_management.job_interval. После окончания периода сна ISM продолжает выполнять оставшиеся действия. Однако если ISM не может успешно выполнить действие A, операция завершается, а действия B, C и D не выполняются.

Опционально можно задать период тайм-аута действия, превышение которого приводит к принудительному завершению операции. Например, если тайм-аут установлен на 1d, а ISM не выполнил действие в течение одного дня, даже после повторных попыток, то действие завершится неудачей.

В этой таблице перечислены параметры, которые можно задать для действия:

ПараметрОписаниеТипОбязательныйПо умолчанию
timeoutПериод тайм-аута для действия. Принимаются единицы времени - минуты, часы и дни.time unitНет-
retryКонфигурация повторных попыток для данного действияobjectНетЗависит от действия

Операция retry имеет следующие параметры:

ПараметрОписаниеТипОбязательныйПо умолчанию
countКоличество повторных попытокnumberДа-
backoffТип политики обратного отсчета, используемый при повторных попытках. Допустимые значения: Exponential, Constant и LinearstringНетExponential
delayВремя ожидания между повторными попытками. Принимаются единицы времени - минуты, часы и дниtime unitНет1 минута

Следующий пример действия имеет период тайм-аута в один час. Политика повторяет это действие три раза с экспоненциальным обратным отсчётом, с задержкой в 10 минут между каждым повтором:

{
"actions": {
"timeout": "1h",
"retry": {
"count": 3,
"backoff": "exponential",
"delay": "10m"
}
}
}

Операции, поддерживаемые ISM

ISM поддерживает следующие операции:

force_merge

Уменьшает количество сегментов Lucene путем слияния сегментов отдельных шардов. Перед началом процесса слияния выполняется попытка перевести индекс в состояние read-only.

ПараметрОписаниеТипОбязательный
max_num_segmentsКоличество сегментов, на которые необходимо уменьшить шардnumberДа
wait_for_completionПри установке значения false запрос возвращается сразу, а не после завершения операции. Для контроля состояния операции можно использовать API Tasks с идентификатором задачи, возвращенным запросом. По умолчанию значение true.booleanНет
task_execution_timeoutТайм-аут выполнения задачи. Применяется только в том случае, если параметр wait_for_completion имеет значение false. По умолчанию 1h.time unitНет
{
"force_merge": {
"max_num_segments": 1
}
}

read_only

Устанавливает управляемый индекс в режим "только для чтения".

{
"read_only": {}
}

Установите параметр index.blocks.write в true для управляемого индекса.

Примечание

Этот блок не препятствует обновлению индекса.

read_write

Устанавливает управляемый индекс в режим доступный для записи.

{
"read_write": {}
}

replica_count

Устанавливает количество реплик, назначаемых индексу.

ПараметрОписаниеТипОбязательный
number_of_replicasОпределяет количество реплик, назначаемых индексу.numberДа
{
"replica_count": {
"number_of_replicas": 2
}
}

shrink

Позволяет сократить количество первичных шардов в индексах. С помощью этого действия можно указать:

  • количество первичных шардов, которые должен содержать целевой индекс
  • максимальный размер шарда для первичных шардов в целевом индексе
  • процентное соотношение для уменьшения количества первичных шардов в целевом индексе
ПараметрОписаниеТипПримерОбязательный
num_new_shardsМаксимальное количество первичных шардов в уменьшенном индексе.integer5Да, однако он не может быть использован с max_shard_size или percentage_of_source_shards
max_shard_sizeМаксимальный размер в байтах шарда для целевого индекса.keyword5gbДа, однако он не может быть использован с num_new_shards или percentage_of_source_shards
percentage_of_source_shardsПроцент от числа исходных первичных шардов, подлежащих сокращению. Этот параметр указывает минимальный процент, который следует использовать при сокращении числа первичных шардов. Должен находиться в диапазоне от 0.0 до 1.0 исключая значения.percentage0.5Да, однако он не может быть использован с max_shard_size или num_new_shards
target_index_name_templateИмя сокращенного индекса. Принимает строки и переменные Mustache and.string или шаблон Mustache{"source": "_shrunken"}Нет
aliasesПсевдонимы для добавления в новый индекс.objectmyaliasНет, но должен быть массив объектов псевдонимов
force_unsafeЕсли true, то действие shrink выполняется даже при отсутствии реплик.booleanfalseНет
{
"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"
}
},
]

Move to ClickHouse

Действие Move to ClickHouse позволяет автоматически перемещать данные из OpenSearch в ClickHouse, обеспечивая эффективное управление большими объемами данных и снижение нагрузки на OpenSearch. Это действие можно настроить как часть политики ISM для определённых индексов.

Параметры для настройки действия "Move to ClickHouse"

ПараметрОписаниеТипПримерОбязательный
table_name_templateРегулярное выражение, определяющее имя таблицы в ClickHouse на основе названия индекса. Именованная группа захвата в регулярном выражении будет использоваться в качестве имени таблицы. Группа захвата должна называться name.string(?<name>.*?)-\d+Да
connection_idИдентификатор подключения к ClickHouse, настроенный в конфигурации OpenSearch.stringcold_nodeДа
batch_sizeКоличество событий, отправляемых в ClickHouse за один раз (batch).integer1000Нет