Elasticsearch 如何清理旧索引(删除过期数据)?
清理 ES 旧索引的三种方式:手动 DELETE 索引、Curator 定时任务、以及现代的 ILM(索引生命周期管理)自动按保留期删除。本文给出三种方案与 ILM 完整配置。
现代方案是 ILM(Index Lifecycle Management):给索引挂生命周期策略,到期自动删除,全自动无需运维;老集群用 Curator 定时任务;一次性清理由 DELETE API 手动执行。
方案一:手动删除
# 列出所有索引按时间排序
curl -s 'es:9200/_cat/indices?v&s=creation.date'
# 删除 30 天前的某个索引
curl -XDELETE 'es:9200/logs-2024.01.01'
方案二:ILM 自动生命周期(推荐)
PUT _ilm/policy/logs_policy
{
"policy": {
"phases": {
"hot": { "actions": { "rollover": { "max_age": "1d", "max_size": "30gb" } } },
"delete": { "min_age": "30d", "actions": { "delete": {} } }
}
}
}
挂到索引模板:"settings": {"index.lifecycle.name": "logs_policy"}——索引满 30 天自动删除,还可配置 warm/cold 降级到廉价存储。
方案三:Curator 定时任务
# curator action 文件
actions:
1:
action: delete_indices
filters:
- filtertype: pattern
value: '^logs-'
- filtertype: age
source: creation_date
direction: older
days: 30
cron 每天执行 curator action.yml。
观测云对照
观测云日志支持多索引与存储策略:按索引设置保留期(如 7/30/180 天),到期自动清理,控制台直接配置。
常见问题(FAQ)
Q:删除索引空间立刻释放吗? 是,段合并后磁盘逐步回收;force merge 可加速。
Q:误删能恢复吗? 只有快照(snapshot)能救——重要数据先开快照策略。