Рабочие нагрузки по обработке данных временных рядов, такие как аналитика журналов и мониторинг в реальном времени, часто сопровождаются быстрым ростом данных со временем. Если данные продолжают записываться в один индекс, индекс может стать чрезмерно большим, что приводит к ухудшению производительности запросов и увеличению потребления хранилища из‑за устаревших данных. Традиционно управление этим ростом требовало пользовательских скриптов для разделения индексов, что было сложно и дорого. Теперь, настроив политики управления состоянием индекса (ISM) для индексов в кластерах OpenSearch, можно автоматизировать переключение индекса на основе его размера или возраста и автоматически удалять устаревшие индексы. Это помогает сбалансировать производительность запросов и затраты на хранение.
В этой теме описывается, как настроить политику ISM для автоматизации переключения индекса.
Предположим, что приложение генерирует около 2,4 TB журналов каждый день. Можно создать политику ISM для оптимизации хранения журналов и производительности запросов. В этом примере мы определяем alias индекса как log-alias. Figure 1 log-alias data organization показывает организацию данных в этом индексе. При запросах alias указывает на все индексы, имена которых начинаются с test. При записях alias указывает только на последний индекс.
Figure 1 log-alias data organization

Один день в времени переключения относится к 24 часам после создания индекса, а не к календарному дню.
Левая часть консоли — это поле ввода команды, а треугольный значок в её правом верхнем углу является кнопкой выполнения. Правая часть отображает результат выполнения.
Например, создайте политику с именем "rollover workflow": Когда размер индекса достигает 1 TB или возраст индекса достигает одного дня, он переключается автоматически. Когда возраст индекса достигает семи дней, реплики отключаются. Когда достигает 30 дней, индекс удаляется. Кроме того, все вновь созданные индексы, имя которых начинается с test, будут автоматически связаны с этой политикой.
PUT _plugins/_ism/policies/rollover_workflow{"policy": {"description": "rollover test","default_state": "hot","states": [{"name": "hot","actions": [{"rollover": {"min_size": "1tb","min_index_age": "1d"}}],"transitions": [{"state_name": "warm","conditions": {"min_index_age": "7d"}}]},{"name": "warm","actions": [{"replica_count": {"number_of_replicas": 0}}],"transitions": [{"state_name": "delete","conditions": {"min_index_age": "30d"}}]},{"name": "delete","actions": [{"delete": {}}]}],"ism_template": {"index_patterns": ["test*"],"priority": 100}}}
После создания политики жизненного цикла выполните следующую команду, чтобы запросить детали политики:
GET _plugins/_ism/policies/rollover_workflow
Например, создайте шаблон индекса с именем template_test и используйте log_alias для переключения индекса.
PUT _template/template_test{"index_patterns": "test*","settings": {"number_of_replicas": 1, // Number of index replicas"number_of_shards": 1, // Number of index shards"index.opendistro.index_state_management.rollover_alias": "log_alias" // Index lifecycle policy name},"mappings": {"properties": {"name": {"type": "text"}}}}
После создания шаблона индекса вы можете выполнить следующую команду, чтобы запросить детали шаблона:
GET _template/template_test
Вручную создайте первый индекс, который запустит процесс автоматического переключения.
Например, создайте первый индекс, задайте формат даты, укажите aliases и установите is_write_index в true. Индекс автоматически будет использовать шаблон индекса template_test и наследовать политику жизненного цикла rollover_workflow через шаблон.
PUT %3Ctest-%7Bnow%2Fd%7D-000001%3E{"aliases": {"log_alias": {"is_write_index": true // Tells the customer to direct all write requests aiming at log_alias to this index.}}}
The index above is the URL code of <test-{now/d}-000001>. By default, the index name contains the creation date. For example, if an index was created on 2022-06-02, the index name is test-2022.06.02-000001.
POST log_alias/_bulk{"index":{}}{"name":"name1"}{"index":{}}{"name":"name2"}{"index":{}}{"name":"name3"}{"index":{}}{"name":"name4"}{"index":{}}{"name":"name5"}{"index":{}}{"name":"name6"}
GET _cat/indices/test*?s=i
Должно быть как минимум два индекса, например:
green open test-<Date>-000001 r8ab5NX6T3Ox_hoGUanogQ 1 1 6 0 416b 208bgreen open test-<Date>-000002 sfwkVgy8RSSEw7W-xYjM2Q 1 1 0 0 209b 209b
In the preceding information, test-<Date>-000001 is the index created in 4, and test-<Date>-000002 is the index generated through rollover.
GET _cat/aliases/log_alias?v
Алиас должен указывать на несколько индексов, например:
alias index filter routing.index routing.search is_write_indexlog_alias test-<Date>-000001 - - - falselog_alias test-<Date>-000002 - - - true
Сценарии
После того как rollover для индекса будет пропущен, ISM больше не будет пытаться выполнять rollover или создавать переключённые индексы. Это означает, что пропуск rollover индекса может привести к потере данных. Пожалуйста, будьте осторожны.
Процедура
PUT {index_name}/_settings{"index.plugins.index_state_management.rollover_skip": true}
Если true возвращено, конфигурация выполнена успешно.
POST _plugins/_ism/retry/{index_name}
Если возвращена следующая информация, повтор попытки считается успешным:
{"updated_indices": 1,"failures": false,"failed_indices": []}