Удаление старых индексов в elasticsearch

Опубликовано SergeyOs - пт, 12/11/2020 - 16:04

Начиная с версии 6.8 в elasticsearch появилась возможность удалять индексы средствами самого elasticsearch. Для этого надо настроить политики и назначить их для шаблонов индексов, другими словами настроить "жизненный цикл индексов" (Index lifecycle management). 

Шаг первый, создание политики (policy).

Можно создать двумя способами: через интерфейс Kibana или PUT запросом. 

Допустим надо создать политику удаления индексов через 90 дней после их создания. Для этого выполняем такой запрос:

PUT _ilm/policy/example_90days
{
    "policy": {
        "phases": {
            "hot": {
                "min_age": "0ms",
                "actions": {
                    "set_priority": {
                        "priority": 100
                    }
                }
            },
            "delete": {
                "min_age": "90d",
                "actions": {
                    "delete": {}
                }
            }
        }
    }
}

Политика состоит из нескольких фаз: hot, warm, cold, delete. Из них сейчас нужны только две: hot (потому что она обязательная) и delete (чтобы собственно удалять). Поле min_age понимает только дни и часы, соответственно для дней постфикс d, для часов - h. В результате будет создана политика example_90d.

Всё это можно сделать в Kibana: Management -> Index Lifecycle Policies.

Шаг второй, привязка policy и шаблону индекса (index pattern).

Допустим есть индексы

example_index_1
example_index_2
example_index_3
example_index_4

значит создаём шаблон example_index_*:

PUT _template/example_index_template
{
    "index_patterns" : ["example_index_*"],
    "settings" : {
        "number_of_shards" : 1,
        "number_of_replicas"  : 1,
        "index.lifecycle.name" : "example_90d"
    }
}

И напоследок применим к уже имеющимся индексам:

PUT example_index_*/_settings
{
  "index.lifecycle.name": "example_90d" 
}