ElasticSearch ILM rollover (ротация лога, кейс автоудаление старых логов)
И так, вы задались вопросом, как бы так настроить автоудаление старых логов в Elasticsearch средствами самого Elasticsearch. Как мне кажется, кейс который я рассматриваю ниже, может подойти для вас.
Нам поможет бортовой Index lifecycle management и Rollover
Я подготовил схему реализации, ознакомьтесь. Ниже будет пошаговая реализация политики.
1. Создаём Index Lifecycle Policies
PUT _ilm/policy/karpov
{ "policy": { "phases": { "hot": { "actions": { "rollover": { "max_docs": 5 }, "set_priority": { "priority": 100 } } }, "delete": { "min_age": "7d", "actions": { "delete": {} } } } } }
2. Создаём template
PUT _template/karpov
{ "order": 0, "index_patterns": [ "karpov-*" ], "settings": { "index": { "lifecycle": { "name": "karpov", "rollover_alias": "karpov" } } } }
3. Создаём index
PUT karpov-000001
{ "aliases": { "karpov": { "is_write_index":true } } }
4. Теперь можно добавлять документы по alias
POST karpov/_doc/
{ "@timestamp": "2099-11-15T13:12:00", "message": "GET /search HTTP/1.1 200 1070000", "user": { "id": "kimchy" } }
{ "_index" : "karpov-000002", "_type" : "_doc", "_id" : "6WR52HkBveAt0sSsNvDE", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 13, "_primary_term" : 1 }
В ответах можно увидеть, что _index инкрементируется (например если выполнить 4 пункт больше 5 раз). Следует отметить, что он делает это отвратно, см "Особенности" в конце статьи.
Проверить наличие записей с alias
GET /_alias/karpov
{ "persistent" : { "indices" : { "lifecycle" : { "poll_interval" : "5s" } } }, "transient" : { } }
Поправить persistent.indeces.lifecycle.pool_interva
l на 5s
, по дефолту там 10m
. (но это действие не обязательно)
Особенности:
При ротации лог может превысить условия правила. Судя по всему это происходит из-за того, что эластик не триггерится на изменение индекса, а делает его проверку по интервалу. Т.е. это норм.
Ряд действий можно выполнить вручную через Kibana
Горячий, теплый, холодный (если вы встретитесь с этими состояниями) не влияют на удаление или ротацию как таковую. Эти состояния влияют на скорость индекса и то как их эластик будет хранить. Старые логи можно помечать как холодные, чтобы оптимизировать работу эластика.