Политики
Описание
Политики - это конфигурации управления индексами, описывающие:
- состояния, в которых может находиться индекс, которые отражают этапы его жизненного цикла (например 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
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.
| Параметр | Описание | Тип | Обязательный | 
|---|---|---|---|
| table_name_template | Регулярное выражение, определяющее имя таблицы в ClickHouse на основе названия индекса. Именованная группа захвата в регулярном выражении будет использоваться в качестве имени таблицы. Группа захвата должна называться name. | string(например(?<name>.*?)-\d+) | Да | 
| connection_id | Идентификатор подключения к ClickHouse, настроенный в конфигурации OpenSearch. | string | Да | 
| batch_size | Количество событий, отправляемых в ClickHouse за один раз. | integer | Нет | 
Примеры настройки политики
Общая информация
Для начала создайте новую политику. Перейдите в раздел Политики индекса (Навигационное меню - Параметры системы - Управление индексами - Политики индекса) и нажмите Создать политику. В открывшемся окне выберите Визуальный редактор и нажмите Далее.
В форме создания укажите значения полей:
- идентификатор политики — уникальное имя политики
- описание — краткое описание ее назначения
В разделе 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 завершена.