ES ILM 策略

Index Lifecycle Management(ILM)策略

Elasticsearch可以通过 Index Lifecycle Management (ILM) 策略自动创建每日滚动索引。以下是一个创建每日滚动索引的示例,配合ILM策略可以让索引根据数据增长自动创建新的每日索引,并在数据老化时移动到温或冷存储中。

配置ILM策略

首先,创建一个ILM策略来定义索引的生命周期,策略包括热(hot)、温(warm)和冷(cold)阶段。

PUT_ilm/policy/daily-log-policy { "policy":{ "phases":{ "hot":{# 热存储阶段,用于写入新数据 "actions":{ "rollover":{# 数据超过条件时,自动创建新的索引 "max_age":"1d",# 索引1天后滚动 "max_size":"50gb"# 或者当索引达到50GB时滚动 } } }, "warm":{# 温存储阶段,用于较少访问的数据 "min_age":"3d",# 数据进入温存储的最小年龄为3天 "actions":{ "forcemerge":{# 压缩索引,减少资源占用 "max_num_segments":1 } } }, "cold":{# 冷存储阶段,几乎不访问的数据 "min_age":"7d", "actions":{ "freeze":{}# 冻结索引,节省内存和CPU } }, "delete":{# 删除阶段 "min_age":"30d", "actions":{ "delete":{}# 索引存储超过30天后自动删除 } } } } }

创建ES索引模版并使用ILM策略

然后,创建一个索引模板,让新数据根据定义的ILM策略按天生成新的索引。

PUT_index_template/logs-template { "index_patterns": ["logs-*"], # 匹配名称前缀为logs-的索引 "template":{ "settings":{ "number_of_shards":1,#分片数量 "number_of_replicas":1,#副本数量 "index.lifecycle.name":"daily-log-policy",# 应用ILM策略 "index.lifecycle.rollover_alias":"logs"# 设置别名,供rollover使用 }, "aliases":{ "logs":{}# 创建一个别名“logs” } } }

创建初始索引并开始滚动

首次创建时,需要创建一个初始索引logs-000001,并与logs别名关联,之后的每日索引会在数据量达到滚动条件后自动创建。

PUTlogs-000001 { "aliases":{ "logs":{ "is_write_index":true# 将logs别名指向初始写入索引 } } }

开始索引数据

当Filebeat或其他数据源向Elasticsearch写入数据时,只需指定logs别名。ILM策略会确保每天创建新的索引(如 logs-000002, logs-000003 等),并自动将旧索引转移到温、冷阶段,最后根据生命周期删除。

总结

通过这种方式,可以实现按天自动创建索引,ILM策略会根据条件自动进行滚动,无需手动创建每日索引,索引的生命周期管理也更加智能和高效。