ILM 是什么
ILM(索引生命周期管理)把索引按时间划入 hot、warm、cold、delete 等阶段:滚动到新索引、合并段、冻结、删除都由策略自动执行,用来同时控制存储成本与查询性能。日志类「每天一个索引」的场景几乎都靠它配合索引模板一起工作。
基本信息
| 阶段 | hot / warm / cold / frozen / delete |
|---|---|
| 触发方式 | min_age(相对滚动时间)与各项条件 |
| 关键动作 | rollover、forcemerge、freeze、delete |
| 接入方式 | 索引模板里引用策略名 |
| 滚动前提 | 需要写别名与 bootstrap 索引 |
| 作用范围 | 只影响新索引,已有索引不追溯 |
典型使用场景
- 日志索引按大小或天数自动滚动,避免单索引无限增长
- 滚动后进入 warm 阶段做段合并,降低查询开销
- 按合规要求保留固定天数后自动删除,控制存储成本
- 冷数据迁到低配节点或冻结,降低资源占用
- 用生命周期替代人工清理脚本,减少运维失误
- 配合快照策略,在 delete 前完成备份
策略与接入
策略与接入
PUT _ilm/policy/logs-policy
{
"policy": {
"phases": {
"hot": { "actions": { "rollover": { "max_primary_shard_size": "50gb", "max_age": "1d" } } },
"warm": { "min_age": "7d", "actions": { "forcemerge": { "max_num_segments": 1 } } },
"delete": { "min_age": "90d", "actions": { "delete": {} } }
}
}
}
# 新索引通过模板引用策略,rollover 需写别名指向新索引阶段与常用动作
| 阶段 | 常用动作 | 目的 |
|---|---|---|
| hot | rollover | 写入滚动到新索引 |
| warm | forcemerge / shrink | 降低段数、提升查询效率 |
| cold | allocate / freeze | 迁移到低成本节点 |
| delete | delete | 按保留期清理数据 |
rollover 需要 bootstrap 索引与写别名:客户端只写别名,ILM 负责把写入滚动到新的后备索引,缺了别名滚动就不会发生。
delete 阶段是不可逆操作:策略调整前先在测试环境验证 min_age 与条件,避免误删仍需保留的数据。
策略停留在 hot 阶段是常见故障:检查别名指向、滚动条件阈值,以及索引是否真的挂上了策略。
min_age 是相对滚动时间而非创建时间计算,理解这一点才能正确推算各阶段的进入时机。
策略解释接口能展示某个索引当前处于哪个阶段、下一步何时执行,排查「策略不生效」时先看它。
冷热分层需要配合节点角色与分配规则使用,只写阶段名不会自动把数据搬到低成本节点。