В сценариях аналитики журналов и мониторинга затраты на хранение исторических данных со временем накапливаются. Однако большинство «холодных» данных запрашивается лишь изредка для аудита или отката. Хранение таких данных на дорогих локальных SSD в течение длительных периодов не имеет экономического смысла. Чтобы сбалансировать затраты на хранение с требованиями длительного удержания, CSS предоставляет функцию разделения хранилища и вычислений для кластеров Elasticsearch. При настройке политики index state management (ISM) в сочетании с index freezing можно автоматически перемещать подходящие индексы с локальных SSD в объектное хранилище с более низкой стоимостью. Данные остаются доступными для поиска, хотя задержка запросов может увеличиться.
В этом разделе описывается, как настроить политику ISM для разделения хранилища и вычислений.
В этом примере для кластера Elasticsearch создаётся политика ISM. Согласно этой политике, вновь созданный индекс автоматически замораживается через три дня, при этом данные выгружаются в OBS; и удаляется через семь дней.
Рисунок 1 Разделение хранилища и вычислений

Только кластеры Elasticsearch 7.6.2 и 7.10.2 поддерживают разделённое хранилище и вычисления.
Левая часть консоли — это поле ввода команды, а треугольный значок в её правом верхнем углу является кнопкой выполнения. Правая часть отображает результат выполнения.
Например, создайте политику с именем hot_warm_policy. Согласно этой политике, вновь созданный индекс автоматически замораживается через три дня, данные выгружаются в OBS; и полностью удаляется через семь дней.
PUT _opendistro/_ism/policies/hot_warm_policy{"policy": {"description": "hot warm archive delete workflow","error_notification": null,"default_state": "hot","states": [{"name": "hot","actions": [],"transitions": [{"state_name": "warm","conditions": {"min_index_age": "3d"}}]},{"name": "warm","actions": [{"freeze_low_cost": {} // Freeze the index.}],"transitions": [{"state_name": "delete","conditions": {"min_index_age": "7d"}}]},{"name": "delete","actions": [{"delete": {}}],"transitions": []}]}}
Например, создайте шаблон индекса template_hot_warm, который определяет, что вновь созданные индексы, имя которых начинается с data, автоматически связываются с политикой ISM hot_warm_policy.
PUT _template/template_hot_warm{"index_patterns": "data*","settings": {"number_of_replicas": 5, // Number of index replicas"number_of_shards": 1, // Number of index shards"opendistro.index_state_management.policy_id": "hot_warm_policy" // Index lifecycle policy name},"mappings": {"properties": {"name": {"type": "text"}}}}
Например, создайте индекс с именем data-2022-06-06 и записывайте данные в него пакетами.
POST data-2022-06-06/_bulk{"index":{}}{"name":"name1"}{"index":{}}{"name":"name2"}{"index":{}}{"name":"name3"}{"index":{}}{"name":"name4"}{"index":{}}{"name":"name5"}{"index":{}}{"name":"name6"}
Индекс автоматически будет использовать шаблон индекса template_hot_warm и наследовать политику жизненного цикла hot_warm_policy через шаблон.
GET _cat/freeze_indices?s=i&v
Если возвращённый результат содержит data-2022-06-06, индекс был выгружен в OBS.
health status index uuid pri rep docs.count docs.deleted store.size pri.store.sizegreen open data-2022-06-06 x8ab5NX6T3Ox_xoGUanogQ 1 1 6 0 7.6kb 3.8kb
GET /_cat/indices?expand_wildcards=open,closed
Если возвращённый результат не содержит data-2022-06-06, индекс был удалён.