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

После создания ISM‑политики свяжите её с конкретными индексами, чтобы применить её. Рекомендуется связать политику с шаблоном индекса. Это гарантирует, что политика будет автоматически применяться ко всем индексам, созданным на основе этого шаблона.
Используйте этот метод для индексов, хранящих данные временных рядов.
Если поле 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 Apply policy

После связывания политики с индексами ISM автоматически создает задачу, которая запускается каждые 5 минут для выполнения политики, проверки критериев и изменения состояний индексов в соответствии с политикой.
Чтобы управлять развернутыми политиками, выберите Index Management > Managed Indices или Index Management > Policy managed indexes в OpenSearch Dashboards.
Политику жизненного цикла можно настроить для включения автоматического переключения индексов, то есть автоматического создания нового индекса, когда существующий индекс удовлетворяет определённым условиям (например, когда он достигает заданного возраста в днях). Новый индекс затем принимает последующие записи. По умолчанию, даже если существующий индекс не содержит документов, новые индексы всё равно создаются. Со временем это может привести к большому количеству пустых индексов. Чтобы предотвратить это, CSS позволяет отключить автоматическое переключение для пустых индексов. Это достигается настройкой политики жизненного цикла, позволяющей автоматическое переключение только для индексов, содержащих документы. Таким образом, можно избежать создания избыточного количества пустых индексов, оптимизируя использование хранилища и повышая общую эффективность системы.
Эта функция поддерживается только при выполнении следующих условий OpenSearch‑кластера:
Вы можете отключить automatic rollover для пустых индексов на уровне индекса или уровне кластера. Настройки уровня индекса имеют приоритет над настройками уровня кластера. Вы должны настроить это вручную. Команды следующие:
PUT {index_name}/_settings{"index.plugins.index_state_management.rollover.only_if_has_documents": true}
PUT _cluster/settings{"persistent": {"plugins.index_state_management.rollover.only_if_has_documents": true}}
ISM задачи (например, преобразование горячих данных в холодные данные и удаление просроченных индексов) могут завершиться с ошибкой из‑за временных проблем кластера, таких как ограничения ресурсов, перезапуск узлов или сетевые перебои. Для решения этой проблемы CSS автоматически повторно пытается (реактивирует) выполнить неудавшиеся ISM задачи через настроенные интервалы, пока они не завершатся успешно. Это обеспечивает непрерывность и надёжность ISM задач.
Эта функция поддерживается только при выполнении следующих условий OpenSearch кластером:
Automatic retry of ISM tasks включён по умолчанию для OpenSearch кластеров, которые соответствуют вышеуказанным условиям.
Для OpenSearch кластеров, не соответствующих этим условиям, выполните их обновление, чтобы включить эту функцию. Однако ISM задачи, которые уже завершились с ошибкой до обновления, не будут повторно попытаны после обновления кластера. Вам потребуется вручную повторить их, прежде чем будет выполнена автоматическая повторная попытка. Команда для повторного выполнения неудавшихся ISM задач выглядит следующим образом:
POST _opendistro/_ism/retry/{index_name}
Выполните следующую команду, чтобы изменить настройки автоматической повторной попытки для задач управления жизненным циклом индекса:
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
plugins.index_state_management.coordinator.css.reactivate | Boolean | true | Определяет, включить ли функцию Reactivate (автоматический повтор).
|
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]"}}]},...}}