信创环境ES索引管理脚本:close, delete

时间:2024-04-04 18:30:24
[root@myprojtest001 ]# cat es-close-del.sh #/bin/bash #elastic地址 ELASTIC_URL=127.0.0.1:9200 #默认的删除时间 DELETE_MONTH=6 #默认的关闭时间 CLOSE_MONTH=1 #默认index #INDEX_NAME=s_awqed_ INDEX_NAME= ES_USER_PWD=elastic:123456 #索引列表:例如 cs_myproj_2024 , qqq_myproj_2024_01, test_myproj_2024_01_03 INDEX_MSG=`curl -s -u "$ES_USER_PWD" -XGET ${ELASTIC_URL}/_cat/indices | grep _myproj_ ` if [[ -z $INDEX_NAME ]] ; then INDEX_OPEN=`echo "$INDEX_MSG" |grep open | awk '{print $3}' | sort` else INDEX_OPEN=`echo "$INDEX_MSG" |grep $INDEX_NAME | grep open | awk '{print $3}' | sort` fi #关闭索引的截止日期 CLOSE_DATE=`date -d "${CLOSE_MONTH} months ago" +%Y-%m-%d` t_end_close=`date -d "${CLOSE_DATE}" +%s` #删除索引的截止日期 DELETE_DATE=`date -d "${DELETE_MONTH} months ago" +%Y-%m-%d` t_end_del=`date -d "${DELETE_DATE}" +%s` #当前日期 t_end=`date +%s` #遍历open的索引,判断是否应该关闭 for index in $INDEX_OPEN do #获取索引日期 #echo "-------$index--------" INDEX_DATE=$(echo $index|sed -E 's@([a-zA-Z0-9_-]+)_myproj_@@g' |sed 's@_@-@g') len1=${#INDEX_DATE} #es按年存,设置为该年份的最后一个月截止 xx_2024 --> xx_2024_12_31 if [ $len1 -lt 5 ]; then INDEX_DATE=$INDEX_DATE"-12-31" #es按月存,设置为该月份的最后一天截止 xx_2024_01 --> xx_2024_01_28 elif [ $len1 -lt 10 ]; then INDEX_DATE=$INDEX_DATE"-28" fi t_start=`date -d "${INDEX_DATE}" +%s` x=$((t_end - t_start)) ##比截止日期早的数据 #时间差几个月(不足1月就为0: 例如 24/30=0): 保证有1个月数据 x2=$((x / 3600 /24 /30 -1 )) if [ ${t_start} -lt ${t_end_close} ] && [ $x2 -ge $CLOSE_MONTH ]; then echo "close ${index} index" curl -u "$ES_USER_PWD" -XPOST ${ELASTIC_URL}/$index/_close fi done #删除 #遍历open的索引,判断是否应该删除 INDEX_ALL=`echo "$INDEX_MSG" |grep close | awk '{print $3}' | sort` for index in $INDEX_ALL do #获取索引日期 #echo "-----$index--------" #INDEX_DATE=$(echo $index|sed -E 's@([a-zA-Z]_?)@@g'|sed 's@_@-@g') INDEX_DATE=$(echo $index|sed -E 's@([a-zA-Z0-9_-]+)_myproj_@@g' |sed 's@_@-@g') len1=${#INDEX_DATE} #es按年存,设置为该年份的最后一个月 if [ $len1 -lt 5 ]; then INDEX_DATE=$INDEX_DATE"-12-31" #es按月存,设置为该月份的最后一天 elif [ $len1 -lt 10 ]; then INDEX_DATE=$INDEX_DATE"-28" fi t_start=`date -d "${INDEX_DATE}" +%s` x=$((t_end - t_start)) ##比截止日期早的数据 #时间差几个月(不足1月就为0: 例如 24/30=0): 保证有1个月数据 x2=$((x / 3600 /24 /30 -1)) if [ ${t_start} -lt ${t_end_del} ] && [ $x2 -ge $DELETE_MONTH ]; then echo "delete ${index} index" curl -u "$ES_USER_PWD" -XDELETE ${ELASTIC_URL}/$index fi done