Облачная платформаAdvanced

Настройка политик Index State Management (ISM)

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

По мере роста бизнеса его данные временных рядов, такие как журналы и метрики, могут экспоненциально увеличиваться. Стоимость хранения может резко возрасти, а слишком большие индексы могут приводить к ухудшению производительности запросов. Чтобы предотвратить эти проблемы, команды эксплуатации традиционно вынуждены были вручную создавать новые индексы, мигрировать старые данные и ежедневно удалять устаревшие данные, что является трудоёмким и подверженным ошибкам процессом. Автоматизация жизненного цикла индексов решает эти задачи, автоматически управляя переходами состояний индекса. Это обеспечивает производительность чтения и записи для горячих данных, снижает затраты на холодное хранение и автоматически удаляет устаревшие данные. Кластеры CSS OpenSearch предоставляют плагин Index State Management (ISM) для этой цели. Настраивая политики ISM, вы можете автоматизировать ключевые операции жизненного цикла, например, автоматически выполнять rollover индекса, когда он достигает 50 ГБ, переводить его в холодное хранилище, когда ему 30 дней, и удалять его, когда ему 90 дней. Это помогает снизить затраты и повысить эффективность.

Кроме того, CSS предоставляет расширенные функции ISM, такие как пропуск автоматического rollover для пустых индексов и автоматический повтор попытки выполнения неуспешных задач ISM. Эти функции дополнительно снижают операционную нагрузку и повышают надёжность задач ISM.

  • ISM: плагин OpenSearch, автоматизирующий управление жизненным циклом индекса. Для получения дополнительной информации см. официальный документ Index State Management.
  • Policy: набор правил для управления жизненным циклом индекса. Пример политики: если количество документов в индексе превышает 10 млн, происходит rollover индекса.
  • Rollover: когда индекс записи превышает заданный размер, возраст или количество документов, автоматически создаётся новый индекс, который становится новым индексом записи. Старый индекс переходит в режим только для чтения или в архивное состояние в соответствии с политикой ISM.

GUI OpenSearch Dashboards может различаться в зависимости от версии программного обеспечения. В качестве примера используется OpenSearch Dashboards 1.3.6.

Шаг 1: Создание политики ISM

Определите одну или несколько политик ISM в OpenSearch Dashboards, чтобы указать кластеру, как управлять индексами.

  1. Войдите в консоль управления CSS.
  2. В панели навигации слева выберите Clusters > OpenSearch.
  3. В списке кластеров найдите целевой кластер и нажмите Dashboards в столбце Operation, чтобы войти в OpenSearch Dashboards.
  4. Разверните меню OpenSearch Dashboards в верхнем левом углу и выберите Index Management.
  5. Нажмите Index Policies или State management policies.
  6. Нажмите Create policy справа, чтобы создать политику. В диалоговом окне Configuration method выберите JSON editor и нажмите Continue. Отображается страница создания политики ISM.
    • Policy ID: Введите пользовательское имя политики.
    • Define policy: Определите политику в формате JSON. Вы можете определить политику, изменив пример системы по умолчанию.

      Рисунок 1 Настройка политики


  7. нажмите Create.

Шаг 2: Связывание политики с индексами

После создания ISM‑политики свяжите её с конкретными индексами, чтобы применить её. Рекомендуется связать политику с шаблоном индекса. Это гарантирует, что политика будет автоматически применяться ко всем индексам, созданным на основе этого шаблона.

  • Метод 1: Связать политику с шаблоном индекса (рекомендовано)

    Используйте этот метод для индексов, хранящих данные временных рядов.

    Если поле ism_template настроено в JSON‑файле в Step 1: Creating an ISM Policy, созданная политика будет автоматически применяться к новым индексам, соответствующим указанным критериям (например, к любому индексу, имя которого начинается с logs-*). Дополнительный шаг не требуется.

    В следующем примере политика с именем policy1 связана с шаблоном индекса, указанным в ism_template. Политика будет автоматически применяться к новым индексам, имя которых начинается с logs-.

    PUT _plugins/_ism/policies/policy1
    {
    "policy": {
    "description": "an example policy",
    "default_state": "hot",
    "states": [
    // Ignore the states part.
    ],
    "ism_template": {
    "index_patterns": [
    "logs-*"
    ],
    "priority": 100
    }
    }
    }
  • Метод 2: Ручное связывание существующего индекса с политикой

    Используйте этот метод, чтобы связать политику с существующими индексами, которые в данный момент не связаны ни с одной политикой.

    1. Разверните меню OpenSearch Dashboards в верхнем левом углу и выберите Index Management.
    2. нажмите Indices.
    3. В списке Indices выберите один или несколько индексов.
    4. Нажмите Apply policy или Actions > Apply policy в правом верхнем углу. В открывшемся диалоговом окне выберите Policy ID.

      Рисунок 2 Apply policy


    5. Нажмите Apply.
    6. На странице Managed Indices или Policy managed indexes найдите индексы и убедитесь, что их Policy соответствует связанному идентификатору политики.

После связывания политики с индексами ISM автоматически создает задачу, которая запускается каждые 5 минут для выполнения политики, проверки критериев и изменения состояний индексов в соответствии с политикой.

Шаг 3: Управление политиками ISM

Чтобы управлять развернутыми политиками, выберите Index Management > Managed Indices или Index Management > Policy managed indexes в OpenSearch Dashboards.

  • Просмотр статуса: в списке Managed Indices или Policy managed indexes проверьте политику, связанную с каждым индексом, и статус политики.
  • Повторить политику: если политика, связанная с индексом, работает некорректно, выберите этот индекс и нажмите Retry policy.
  • Изменить политику: чтобы обновить политику для индекса, нажмите Change policy.
  • Удалить политику: чтобы остановить управление жизненным циклом индекса, нажмите Remove policy.

(Advanced Feature) Отключение Auto Rollover для пустых индексов

Политику жизненного цикла можно настроить для включения автоматического переключения индексов, то есть автоматического создания нового индекса, когда существующий индекс удовлетворяет определённым условиям (например, когда он достигает заданного возраста в днях). Новый индекс затем принимает последующие записи. По умолчанию, даже если существующий индекс не содержит документов, новые индексы всё равно создаются. Со временем это может привести к большому количеству пустых индексов. Чтобы предотвратить это, CSS позволяет отключить автоматическое переключение для пустых индексов. Это достигается настройкой политики жизненного цикла, позволяющей автоматическое переключение только для индексов, содержащих документы. Таким образом, можно избежать создания избыточного количества пустых индексов, оптимизируя использование хранилища и повышая общую эффективность системы.

Эта функция поддерживается только при выполнении следующих условий OpenSearch‑кластера:

  • Версия кластера: 1.3.6 или 2.19.0
  • Image version: x.x.x_25.9.0_xxx или позже

Вы можете отключить automatic rollover для пустых индексов на уровне индекса или уровне кластера. Настройки уровня индекса имеют приоритет над настройками уровня кластера. Вы должны настроить это вручную. Команды следующие:

  • Отключить empty index automatic rollover для указанного индекса:
    PUT {index_name}/_settings
    {
    "index.plugins.index_state_management.rollover.only_if_has_documents": true
    }
  • Отключить empty index automatic rollover на уровне cluster:
    PUT _cluster/settings
    {
    "persistent": {
    "plugins.index_state_management.rollover.only_if_has_documents": true
    }
    }

(Advanced Feature) Configuring Auto Retry for ISM Tasks

ISM задачи (например, преобразование горячих данных в холодные данные и удаление просроченных индексов) могут завершиться с ошибкой из‑за временных проблем кластера, таких как ограничения ресурсов, перезапуск узлов или сетевые перебои. Для решения этой проблемы CSS автоматически повторно пытается (реактивирует) выполнить неудавшиеся ISM задачи через настроенные интервалы, пока они не завершатся успешно. Это обеспечивает непрерывность и надёжность ISM задач.

Эта функция поддерживается только при выполнении следующих условий OpenSearch кластером:

  • Cluster version: 1.3.6 или 2.19.0
  • Image version: x.x.x_25.9.0_xxx или позже

Automatic retry of ISM tasks включён по умолчанию для OpenSearch кластеров, которые соответствуют вышеуказанным условиям.

Для OpenSearch кластеров, не соответствующих этим условиям, выполните их обновление, чтобы включить эту функцию. Однако ISM задачи, которые уже завершились с ошибкой до обновления, не будут повторно попытаны после обновления кластера. Вам потребуется вручную повторить их, прежде чем будет выполнена автоматическая повторная попытка. Команда для повторного выполнения неудавшихся ISM задач выглядит следующим образом:

POST _opendistro/_ism/retry/{index_name}

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

PUT _cluster/settings
{
"persistent": {
"plugins.index_state_management.coordinator.css.reactivate": true,
"plugins.index_state_management.coordinator.css.reactivate_period": "5m",
"plugins.index_state_management.coordinator.css.reactivate_duration": "30m",
"plugins.index_state_management.coordinator.css.reactivate_max_duration": "12h",
"plugins.index_state_management.coordinator.css.max_inflight_reactivate_tasks": 1000
}
}
Таблица 1 Параметры конфигурации

Параметр

Тип

Значение по умолчанию

Описание

plugins.index_state_management.coordinator.css.reactivate

Boolean

true

Определяет, включить ли функцию Reactivate (автоматический повтор).

  • true: Включает автоматический повтор задач index lifecycle management.
  • false: Отключает автоматический повтор задач index lifecycle management.

plugins.index_state_management.coordinator.css.reactivate_period

Время

30m

Интервал повторной активации.

Диапазон значений: ≥ 5m

plugins.index_state_management.coordinator.css.reactivate_duration

Время

1h

Начальный Reactivate interval, то есть время ожидания перед следующей попыткой после неудачной первоначальной попытки. На него не влияет механизм экспоненциального отката.

Value range: ≥ 1m

plugins.index_state_management.coordinator.css.reactivate_max_duration

Time

24h

Maximum Reactivate interval, то есть максимальное время ожидания между попытками повторного выполнения независимо от действия механизма экспоненциального отката. Этот параметр гарантирует, что интервал повторных попыток не будет увеличиваться бесконечно.

Value range: ≥ 1m

plugins.index_state_management.coordinator.css.max_inflight_reactivate_tasks

Long

10000

Maximum number of tasks that can be retried at the same time.

Value range: 1 to 100000

Соображения идемпотентности при повторных попытках задач ISM

  • Идемпотентные операции: все шаги повторяются, начиная с начала, чтобы обеспечить согласованность данных.
  • Неидемпотентные операции: повторная попытка начинается с места, где произошел сбой. Если исходная причина сбоя сохраняется, повторные попытки могут постоянно завершаться неудачей, и в этом случае требуется ручное вмешательство.

    Примеры неидемпотентных операций в ISM‑задачах OpenSearch: ForceMerge, Notification, Snapshot и Shrink (только для OpenSearch 2.19.0).

В ISM task details API CSS добавил поля, фиксирующие детали выполнения ISM‑задач. Вы можете выполнить следующую команду, чтобы проверить записи ISM‑задач, включая общее количество сбоев, время их возникновения, время активации и причины сбоев:

GET /_opendistro/_ism/explain/{index_name}

Пример ответа:

{
"rollover-0000001" : {
"index.opendistro.index_state_management.policy_id" : "logs-policy-rollover",
"index" : "rollover-0000001",
...
"reactivate_info" : {
"count": 2, //Total number of failures.
"latest_failed_time": 1764301006792, //Latest failure time.
"latest_reactivate_time": 1764301486800, //Latest activation time.
"failed_infos": [ //Historical execution failure records. Only the latest 10 records are retained.
{
"start_time": 1764299686801, //Task execution time. The earliest execution time is the index creation time.
"failed_time": 1764299686814, //Task failure time.
"info": { //Task failure cause.
"message" : "Missing rollover_alias index setting [index=rollover-0000001]"
}
},
{
"start_time" : 1764300286841,
"failed_time" : 1764301006792,
"info" : {
"message" : "Missing rollover_alias index setting [index=rollover-0000001]"
}
}
]
},
...
}
}