В версии Elasticsearch 6.7 появилась возможность управлять индексами, теперь можно забыть про написание скриптов и запуском их по крону, а также выключить решения в виду Curator.
Предлагаю рассмотреть возможность создания политики удаления старых индексов внутренними средствами Elasticsearch. На текущий момент используя версию Elasticsearch 7 (7.3)
У lifecycle менеджера есть 4 вида политики — Hot, Warm, Cold, Delete. Политики Hot, Warm, Cold более направлены на доступность и хранение данных, более горячие на быстром железе, холодные на медленном железе, запрос к которым может выполняться долго. Нас больше интересует политика Delete, т.к. горячей (Hot) фазой ротации занимается сам filebeat на серверах с приложением.
Имеем индексы примерно со следующими названиями:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
dev-7.3.0-2019.07.29 dev-7.3.0-2019.07.30 dev-7.3.0-2019.07.31 dev-7.3.0-2019.08.01 dev-7.3.0-2019.08.02 dev-7.3.0-2019.08.03 dev-7.3.0-2019.08.04 dev-7.3.0-2019.08.05 dev-7.3.0-2019.08.06 dev-7.3.0-2019.08.07 dev-7.3.0-2019.08.08 dev-7.3.0-2019.08.09 dev-7.3.0-2019.08.10 |
Будем считать что сегодня 10 августа 2019 года. Задача стоит создать политику и удалить все индексы старше 10 дней.
Для этого нам необходимо создать Index Lifecycle Policies в Elasticsearch. Сделать это можно как PUT запросом так и банально в интерфейсе, рассмотрим вариант банальные, создание руками в интерфейсе т.к. это делается по факту всего один раз когда вы задумываете ту или иную политику. Например для dev вы создаете политику удалять логи через 10 дней, а для prod окружения — удалять через 30 дней.
Теперь необходимо создать шаблон. Темлейт включать в себя шаблоны тех индексов, которые должны обрабатываться данной политикой. Темплейт ссылается на политику. Темплейтов ссылающихся на политику ротации может быть много, например нам надо удалять не только индексы вида dev-7.3.0-2019.07.29, но и индексы от приложения app-7.3.0-2019.08.01.
Создаем темплейт.
1 2 3 4 5 6 7 8 9 |
PUT _template/dev-rotation_template { "index_patterns": ["dev-*"], "settings": { "number_of_shards": 1, "number_of_replicas": 1, "index.lifecycle.name": "dev-rotation_policy" } } |
Теперь необходимо применить наш шаблон ко всем уже существующим индексам dev-7.3.0-2019.07.29 — dev-7.3.0-2019.08.10
1 2 3 4 |
PUT dev-*/_settings { "index.lifecycle.name": "dev-rotation_policy" } |
Все, теперь индексы dev-* будут удалятся через 10 дней, а также к старым индексам будет применена эта политика и из списка выше будут удалены:
1 2 3 |
dev-7.3.0-2019.07.29 dev-7.3.0-2019.07.30 dev-7.3.0-2019.07.31 |