ELK Stack日志清理自动化方案
一、推荐方案 ILM 索引生命周期管理
PUT _ilm/policy/30day_delete_policy
{
"policy": {
"phases": {
"hot": {
"min_age": "0ms",
"actions": {
"rollover": { "max_age": "30d", "max_size": "50gb", "max_docs": 1000000 }
}
},
"delete": {
"min_age": "30d",
"actions": { "delete": {} }
}
}
}
}
PUT _index_template/logs_template
{
"index_patterns": ["logs-*"],
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "30day_delete_policy",
"index.lifecycle.rollover_alias": "logs_alias"
}
}
}
PUT logs-000001
{ "aliases": { "logs_alias": { "is_write_index": true } } }
GET _ilm/status
GET _cat/indices/logs-*?v&h=index,status,store.size,ilm.phase
GET _ilm/explain/logs_alias
二、脚本化清理 定时删除索引或按时间删除文档
#!/usr/bin/env bash
ES="http://127.0.0.1:9200"
KEEP_DAYS=15
DATE=$(date -d "-${KEEP_DAYS} days" "+%Y.%m.%d")
curl -XDELETE "${ES}/*-${DATE}*"
0 0 * * * /opt/es-index-clear.sh
curl -u user:pass -H 'Content-Type: application/json' -d'
{
"query": {
"range": { "@timestamp": { "lt": "now-7d", "format": "epoch_millis" } }
}
}' -XPOST "http://127.0.0.1:9200/*-*/_delete_by_query?pretty"
?dry_run=true 验证,再正式执行;大数据量时删除较慢,注意集群负载与 GC。三、从源头控制 减少写入无效或过期日志
filebeat.inputs:
- type: log
paths: ["/var/log/*.log"]
ignore_older: 240h # 忽略 10 天前修改的文件
include_lines: ["INFO","WARN","ERROR"]
ignore_older 针对文件“最后修改时间”,适合按天轮转的日志目录;配合采集过滤能显著降低无效写入与存储压力。四、别忘了系统组件自身日志的轮转
/data/kibana/logs/kibana.log {
daily
minsize 10M
missingok
notifempty
dateext
rotate 7
compress
delaycompress
sharedscripts
create 644 kibana kibana
postrotate
[ -e /var/run/kibana.pid ] && kill -USR1 $(cat /var/run/kibana.pid)
endscript
}
五、落地与运维要点
min_age 或脚本的保留天数设为较短值(如 1 天)验证策略与写入链路,再放大到目标保留周期。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。