介绍
使用shell脚本怎么批量删除es索引?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
发现elasticsearch集群的状态是红色,unassign的分片数很多,看了下都是些旧的日期的索引(应该是定时任务删除失败导致的)。
curl -XGET ip:港口/_cat/shards |, grep 未赋值的
数量有几百个,写个脚本处理下,先恢复成green.red状态好像会影响索引创建和数据迁移
先把需要删除的索引导出到文件
curl -XGET ip:港口/_cat/shards |, grep UNASSIGNED 在祝辞needDelIndex。txt
确认下要删除的索引列表。没问题就执行下面删除壳(es的ip和端口需要修改下)
# !/bin/bash echo “$ 1”; esUrl=$ {esip}: ${国务委员} indexfile=needDelIndex.txt # cp -f /dev/null $ {indexfile} # curl -XGET ip:港口/_cat/shards |, grep UNASSIGNED 在祝辞needDelIndex.txt if [!大敌;-f 。/$ {indexfile},];然后 echo 才能;indexfile 美元;not 存在 ,exit 0 fi 日志文件=esindex_del. ' date +“% m - % d" ' . log cp -f /dev/null ${日志文件} lastIndexName=皌est" for item 拷贝的cat $ {indexfile}, |, awk & # 39; {print 1美元}& # 39;” 做 if 才能;[,“item"美元,=,“error",) 然后才能 ,才能继续 fi才能 if 才能;[,“item"美元,!=,“lastIndexName"美元;,) 然后才能 ,,,curl -XDELETE $ {esUrl}/${项},在祝辞,${日志文件} ,,,echo - - - - - - - - - - - - ${项},“日期”,在祝辞,${日志文件} ,,sleep 5 fi才能 lastIndexName才能=${项} 完成了
因为我们的索引是按天创建的,索引名前缀是yyyy-MM-dd,保留一段时间后需要批量删除.shell的第一个参数为yyyy-MM-dd,将删除该天及以前的旧索引
# !/bin/bash esUrl=$ {esip}: ${国务委员} echo “$ 1”; if [$ #大敌;-ge 1,) 然后 deleteDate才能=1美元 其他的 echo 才能“please  inpust detete esindex& # 39; s 日期(yyyy-MM-dd)“; ,exit 0 fi indexfile=esindex.info cp -f /dev/null $ {indexfile} curl & # 39; $ {esUrl}/_cat指数# 39;,在祝辞,$ {indexfile} 日志文件=esindex_del. ' date +“% m - % d"“.out cp -f /dev/null ${日志文件} for item 拷贝的cat $ {indexfile}, |, awk & # 39; {print 3美元}& # 39;” 做 if 才能;[,“item"美元,=,“error",) 然后才能 ,才能继续 fi才能 参数才能=$ {esUrl}/${项} indexdate才能=${项目:0:10} if 才能;[,“indexdate"美元,=,“deleteDate"美元;,) 然后才能 ,,,curl -XDELETE ${参数},在祝辞,${日志文件} ,,,echo - - - - - - - - - - - - ${项},在祝辞,${日志文件} ,,sleep 5 elif 才能;[[,“indexdate"美元,& lt;,“deleteDate"美元;,]] 然后才能 ,,,curl -XDELETE ${参数},在祝辞,${日志文件} ,,,echo - - - - - - - - - - - - ${项},在祝辞,${日志文件} ,,sleep 5 fi才能 做