ES数据定期删除
如果不删除ES数据,将会导致ES存储的数据越来越多,磁盘满了之后将无法写入新的数据。这时可以使用脚本定时删除过期数据。
方法一、
#/bin/bash
#es-index-clear
#只保留某几天内的日志索引-5 days || 12 days ago
ST_LAST_DATA=date -d "-7 days" "+%Y.%m.%d"
UAT_LAST_DATA=date -d "-15 days" "+%Y.%m.%d"
PROD_LAST_DATA=date -d "-30 days" "+%Y.%m.%d"
#删除上个月份所有的索引
curl -XDELETE “http://192.168.180.6:9200/st-KaTeX parse error: Expected 'EOF', got '#' at position 17: …ST_LAST_DATA}" #̲curl -XGET "htt…{ST_LAST_DATA}”
curl -XDELETE “http://192.168.180.6:9200/uat-dev15-KaTeX parse error: Expected 'EOF', got '#' at position 18: …AT_LAST_DATA}" #̲curl -XGET "htt…{UAT_LAST_DATA}”
curl -XDELETE “http://192.168.180.6:9200/prod-admin-paas-KaTeX parse error: Expected 'EOF', got '#' at position 19: …OD_LAST_DATA}" #̲curl -XGET "htt…{PROD_LAST_DATA}”
#crontab -e添加定时任务:
#0 1 * * * /home/elk/clear/es-index-clear.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
可以视个人情况调整保留的天数,这里的ip和port同样设置为不存储数据的那台机器。该脚本只需要在ES中一台机器定时运行即可。
crontab -e添加定时任务:
0 1 * * * /search/odin/elasticsearch/scripts/es-index-clear.sh
1
2
每天的凌晨一点清除索引。
注意:保证crond服务是启动的
[root@server scripts]# service crond status
方法二、
#!/bin/bash
#删除ELK30天前的日志
DATE=date -d "30 days ago" +%Y.%m.%d
curl -s -XGET http://127.0.0.1:9200/_cat/indices?v| grep $DATE | awk -F ‘[ ]+’ ‘{print $3}’ >/tmp/elk.log
for elk in cat /tmp/elk.log
do
curl -XDELETE "http://127.0.0.1:9200/$elk"
done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
加入到定时任务
crontab -e
#每天凌晨1点定时清理elk索引
00 01 * * * bash /server/scripts/elk.sh &>/dev/null
1
2
3
4
5
| | | | |
| | | | ±---- 星期中星期几 (0 - 7) (星期天 为0)
| | | ±--------- 月份 (1 - 12)
| | ±-------------- 一个月中的第几天 (1 - 31)
| ±------------------- 小时 (0 - 23)
±------------------------ 分钟 (0 - 59)
————————————————
版权声明:本文为CSDN博主「常名先生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jiangbenchu/java/article/details/101273774