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-${ST_LAST_DATA}"
#curl -XGET "http://192.168.180.6:9200/st-${ST_LAST_DATA}"
curl -XDELETE "http://192.168.180.6:9200/uat-dev15-${UAT_LAST_DATA}"
#curl -XGET "http://192.168.180.6:9200/uat-dev15-${UAT_LAST_DATA}"
curl -XDELETE "http://192.168.180.6:9200/prod-admin-paas-${PROD_LAST_DATA}"
#curl -XGET "http://192.168.180.6:9200/prod-admin-paas-${PROD_LAST_DATA}"
#crontab -e添加定时任务:
#0 1 * * * /home/elk/clear/es-index-clear.sh
可以视个人情况调整保留的天数,这里的ip和port同样设置为不存储数据的那台机器。该脚本只需要在ES中一台机器定时运行即可。
crontab -e添加定时任务:
0 1 * * * /search/odin/elasticsearch/scripts/es-index-clear.sh
每天的凌晨一点清除索引。
注意:保证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
加入到定时任务
# crontab -e
#每天凌晨1点定时清理elk索引
00 01 * * * bash /server/scripts/elk.sh &>/dev/null
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)