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

Настройка Index State Management (ISM) Policies

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

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

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

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

Ограничения

  • Поддержка плагина ISM доступна только в Elasticsearch clusters версии 7.6.2 и выше.
  • Интерфейс Kibana GUI различается в зависимости от версии Kibana. В качестве примера используется Kibana 7.10.2.

Шаг 1: Создание ISM Policy

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

  1. Войдите в консоль управления CSS.
  2. В панели навигации слева выберите Clusters > Elasticsearch.
  3. В списке кластеров найдите целевой кластер и нажмите Kibana в столбце Operation, чтобы войти в консоль Kibana.
  4. В консоли Kibana разверните меню в верхнем левом углу и выберите IM или Index Management, чтобы перейти на страницу управления индексами.
  5. Выберите Index Policies.
  6. Нажмите Create policy для настройки политики жизненного цикла индекса.
    • Policy ID: Введите пользовательское имя политики.
    • Define policy: Определите политику в формате JSON. Вы можете определить политику, изменив пример системы по умолчанию.

    Рисунок 1 Создание политики


  7. Нажмите Create.

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

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

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

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

    1. В левой панели навигации Kibana выберите Dev Tools.

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

    2. Выполните следующую команду для создания или обновления шаблона индекса:
      PUT _template/<template_name>
      {
      "index_patterns": ["index_name-*"], // Match all indexes whose name starts with index_name-.
      "settings": {
      "opendistro.index_state_management.policy_id": "Policy_ID" // Replace it with the target policy ID.
      }
      }

      Для получения дополнительной информации см. Create template.

    3. На странице Managed Indices проверьте наличие недавно созданных индексов, имя которых начинается с index_name-*, и проверьте, что их Policy соответствует идентификатору связанной политики.
  • Метод 2: Ручное связывание существующего индекса с политикой

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

    1. В консоли Kibana разверните меню в верхнем левом углу и выберите IM или Index Management, чтобы перейти на страницу управления индексами.
    2. Нажмите Indices.
    3. В списке Indices выберите один или несколько индексов.
    4. Нажмите Apply policy в правом верхнем углу. В открывшемся диалоговом окне выберите идентификатор политики.

      Рисунок 2 Apply policy


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

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

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

Чтобы управлять развернутыми политиками ISM, выберите Index Management > Managed Indices в Kibana.

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

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

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

Эта функция поддерживается только когда Elasticsearch‑кластер соответствует следующим условиям:

  • Версия кластера: 7.6.2 или 7.10.2
  • Версия образа: x.x.x_25.9.0_xxx или более поздняя

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

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

(Advanced Feature) Настройка Auto Retry for ISM Tasks

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

Эта функция поддерживается только когда Elasticsearch‑кластер соответствует следующим условиям:

  • Версия кластера: 7.6.2 или 7.10.2
  • Версия образа: x.x.x_25.9.0_xxx или более поздняя

Automatic retry of ISM tasks is enabled by default для Elasticsearch‑кластеров, соответствующих вышеуказанным условиям.

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

POST _opendistro/_ism/retry/{index_name}

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

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
}
}
Table 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

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

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

plugins.index_state_management.coordinator.css.reactivate_max_duration

Время

24h

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

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

plugins.index_state_management.coordinator.css.max_inflight_reactivate_tasks

Long

10000

Максимальное количество задач, которые могут быть повторно выполнены одновременно.

Диапазон значений: от 1 до 100000

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

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

    Примеры неидемпотентных операций в задачах управления жизненным циклом индекса Elasticsearch: ForceMerge, Notification и Snapshot.

В 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": 0, //Task execution time. The earliest execution time is 0.
"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]"
}
}
]
},
...
}
}