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

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

После связывания политики с индексами ISM автоматически создает задачу, которая запускается каждые 5 минут для выполнения политики, проверки критериев и изменения состояний индексов в соответствии с политикой.
Чтобы управлять развернутыми политиками ISM, выберите Index Management > Managed Indices в Kibana.
Политику жизненного цикла можно настроить для включения automatic index rollover, то есть автоматического создания нового индекса, когда существующий индекс удовлетворяет определённым условиям (например, когда он достигает заданного возраста в днях). Новый индекс затем получает последующие записи. По умолчанию, даже если существующий индекс не содержит документов, новые индексы всё равно создаются. Со временем это может привести к большому количеству пустых индексов. Чтобы предотвратить это, CSS позволяет отключить automatic rollover для пустых индексов. Это достигается настройкой политики жизненного цикла, позволяющей automatic rollover только для индексов, содержащих документы. Таким образом, вы можете предотвратить создание избыточных пустых индексов, оптимизируя использование хранилища и повышая общую эффективность системы.
Эта функция поддерживается только когда Elasticsearch‑кластер соответствует следующим условиям:
Вы можете отключить 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.
Эта функция поддерживается только когда Elasticsearch‑кластер соответствует следующим условиям:
Automatic retry of ISM tasks is enabled by default для Elasticsearch‑кластеров, соответствующих вышеуказанным условиям.
Для кластеров Elasticsearch, которые не соответствуют этим условиям, выполните их обновление, чтобы включить эту функцию. Однако задачи ISM, которые уже завершились с ошибкой до обновления, не будут повторно выполнены после обновления кластера. Вам потребуется вручную повторить их, прежде чем может произойти автоматический повтор. Команда для повторного выполнения неудавшихся задач ISM выглядит следующим образом:
POST _opendistro/_ism/retry/{index_name}
Выполните следующую команду, чтобы изменить настройки автоматического повторного выполнения задач index lifecycle management:
Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
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 | Начальный интервал повторной активации, то есть время ожидания перед следующей попыткой после неудачной начальной попытки. На него не влияет механизм экспоненциального отката. Диапазон значений: ≥ 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]"}}]},...}}