ElasticSearch 定期删除索引脚本

582 阅读2分钟

在大数据项目中我们每天需要存储大量的数据到 ElasticSearch( 以下简称 ES )中,但是存储空间毕竟是有限的,所以常常遇到 ES 存储不够的时候,怎么办呢?

有两种解决方案:

1、扩容 2、删除索引

第一种方案实现起来最简单,但是成本比较高,最后还是会要删除索引。

所以我们还是采用第二种方案吧,删除过期索引,但是每天去删除太麻烦了,所以这里用一个定时任务脚本来实现,具体实现如下:

创建 ES 定时删除脚本:

vim ES-index-clear.sh

脚本内容:

#/bin/bash

ES_IP=<替换为实际IP或域名> 
ES_PORT=<替换为实际端口> 
#如果配置的有账号密码 就需要修改如下配置 
ES_USER=<替换为实际用户> 
ES_PASSWORD=<替换为实际密码>

#指定日期(7天前)
DATA=`date -d "1 week ago" +%Y.%m.%d`

echo "$(date "+%Y%m%d-%H:%M:%S") 开始清理  $DATA 索引"

#删除7天前的日志
curl --user $ES_USER:$ES_USER -XGET "http://$ES_IP:$ES_PORT/_cat/indices/?v"|grep $DATA
if [ $? == 0 ];then
	curl --user $ES_USER:$ES_USER -XDELETE "http://$ES_IP:$ES_PORT/*-${DATA}"
	echo "$(date "+%Y%m%d-%H:%M:%S") 完成清理 $DATA 索引!"
else 
	echo "$(date "+%Y%m%d-%H:%M:%S")$DATA 索引!"
fi

脚本说明:

1、第一句是脚本的开头 2、首先确定你需要删除哪个时间以前的索引,我这里是删除的一周也就是7天前的,所以我这里DATA取的是当前时间一周以前的时间。 3、查询匹配一周前的这个索引是否存在,这里需要注意添上你es的账号,密码,和部署es的机器ip,如果你没有设置es的账号和密码可以不加。 4、如果这个索引存在,那么就执行删除这个索引的操作,并进行打印,最后输出删除结果

修改脚本权限:

chmod 777 ES-index-clear.sh

设置定时任务:

crontab -e

定时任务如下:

# 每天1点执行定时任务
0 1 * * * sh /sxapp/shscript/ES-index-clear.sh > /sxapp/shscript/log/es-index-clear.log 1

这里是每天早上1点执行这个删除脚本,然后将执行的输出结果输出到日志文件中,即可完成。