记录下如何进行定期清除或关闭ES索引~~
我们都知道,ES索引处于open状态,就会占用内存+磁盘;
如果将索引close,只会占用磁盘,当索引比较多的时候影响查询速度
遇到的项目需求为按天建立索引,存储6个月的数据,保留两个月的热点数据
方便删除6个月前的索引并且关闭两个月前的索引,脚本如下:
默认参数为
集群地址:http://127.0.0.1:9200
删除几个月前:6
关闭几个月前:2
index名称前缀:index,后面为日期格式,如index-2020.09.16
需要时这种格式的索引哦,其他的修改下获取日期的方式
可以根据实际情况修改脚本或者添加对应的参数
注意5.x版本和6.x版本获取索引时回显不一样,5.x版本已经关闭的索引不显示健康状况,6.x版本显示,所以
5.x版本获取列表为
awk '{print $2}'
#删除索引列表
INDEX_LIST_CLOSE=`curl -XGET ${DEFUALT_ELASTIC_URL}/_cat/indices | grep ${DEFUALT_INDEX_NAME} | grep close | awk '{print $2}' | sort`
而6.x版本为
awk '{print $3}'
#删除索引列表
INDEX_LIST_CLOSE=`curl -XGET ${DEFUALT_ELASTIC_URL}/_cat/indices | grep ${DEFUALT_INDEX_NAME} | grep close | awk '{print $3}' | sort`
#/bin/bash
#elastic地址
DEFUALT_ELASTIC_URL=$1
#默认的删除时间
DEFUALT_DELETE_MONTH=$2
#默认的关闭时间
DEFUALT_CLOSE_MONTH=$3
#默认index
DEFUALT_INDEX_NAME=$4
if [[ "${DEFUALT_ELASTIC_URL}" == "" ]];then
echo "Please input elastic url, if not, default http://127.0.0.1:9200"
DEFUALT_ELASTIC_URL=http://127.0.0.1:9200
fi
if [[ "${DEFUALT_DELETE_MONTH}" == "" ]];then
echo "Please input delete month, if not, default 6"
DEFUALT_DELETE_MONTH=6
fi
if [[ "${DEFUALT_CLOSE_MONTH}" == "" ]];then
echo "Please input close month, if not, default 2"
DEFUALT_CLOSE_MONTH=2
fi
if [[ "${DEFUALT_INDEX_NAME}" == "" ]];then
echo "Please input index name, if not, default index"
DEFUALT_INDEX_NAME=index
fi
echo ${DEFUALT_ELASTIC_URL}
#索引列表
INDEX_LIST=`curl -XGET ${DEFUALT_ELASTIC_URL}/_cat/indices | grep ${DEFUALT_INDEX_NAME}| grep open | awk '{print $3}' | sort`
for index in $INDEX_LIST
do
#关闭
#获取索引日期
INDEX_DATE=${index#*-}
CLOSE_DATE=`date -d "${DEFUALT_CLOSE_MONTH} months ago" +%Y-%m-%d`
tmp=`echo "${INDEX_DATE}" | sed -e "s/\./-/g"`
t1=`date -d "${tmp}" +%s`
t2=`date -d "${CLOSE_DATE}" +%s`
if [ ${t1} -lt ${t2} ]; then
echo "close ${DEFUALT_INDEX_NAME}-${INDEX_DATE} index"
curl -XPOST ${DEFUALT_ELASTIC_URL}/${DEFUALT_INDEX_NAME}-${INDEX_DATE}/_close
fi
done
#删除索引列表
INDEX_LIST_CLOSE=`curl -XGET ${DEFUALT_ELASTIC_URL}/_cat/indices | grep ${DEFUALT_INDEX_NAME} | grep close | awk '{print $2}' | sort`
for index in $INDEX_LIST_CLOSE
do
#删除
#获取索引日期
INDEX_DATE=${index#*-}
#获取需要删除的日期
DELETE_DATE=`date -d "${DEFUALT_DELETE_MONTH} months ago" +%Y-%m-%d`
tmp=`echo "${INDEX_DATE}" | sed -e "s/\./-/g"`
t1=`date -d "${tmp}" +%s`
t2=`date -d "${DELETE_DATE}" +%s`
if [ ${t1} -lt ${t2} ]; then
echo "del ${DEFUALT_INDEX_NAME}-${INDEX_DATE} index"
curl -XDELETE ${DEFUALT_ELASTIC_URL}/${DEFUALT_INDEX_NAME}-${INDEX_DATE}
fi
done