文件格式:es-index-2021-04-09
需求:定时删除30天以上的索引文件
#!/bin/bash
######################################################
# $Name: clean_es_index.sh
# $Version: v1.0
# $Function: clean amazon es log index
# $Author: brealeyxx
# $Create Date: 2021-04-09
# $Description: shell
######################################################
#脚本的日志文件路径
CLEAN_LOG="/var/log/clean_es_index.log"
#索引前缀
INDEX_PRFIX="es-index-"
#elasticsearch 的主机ip及端口
SERVER_PORT="http://127.0.0.1:9200"
#取出已有的索引信息
INDEXS=$(curl -s "${SERVER_PORT}/_cat/indices?v" |grep "${INDEX_PRFIX}"|awk '{print $3}')
#awk '{print $3}'输出第三个字段(第三列 index)
#删除多少天以前的日志,假设输入10,意味着10天前的日志都将会被删除
DELTIME=30
#SECONDS=date -d "$(date +%F) 当前时间 - ${DELTIME} days" +%s 30
SECONDS=$(date -d "$(date +%F) -${DELTIME} days" +%s)
#判断日志文件是否存在,不存在需要创建。
if [ ! -f "${CLEAN_LOG}" ]
then
touch "${CLEAN_LOG}"
fi
#删除指定日期索引 clean time is 当前时间到秒
echo "----------------------------clean time is $(date +%Y-%m-%d_%H:%M:%S) ------------------------------" >>${CLEAN_LOG}
#遍历上面获取INDEXS
for del_index in ${INDEXS}
do
#根据索引的名称的长度进行切割,不同长度的索引在这里需要进行对应的修改 例:es-index-2021-04-09按照-分割获取第三、四、五个2021-04-05
indexDate=$( echo ${del_index} |cut -d "-" -f 3,4,5 )
indexSecond=$( date -d ${indexDate} +%s )
#判断SECONDS-indexSecond -gt0 是否等于0
if [ $(( $SECONDS- $indexSecond )) -gt 0 ]
then
echo "${del_index}" >>${CLEAN_LOG}
#取出删除索引的返回结果
delResult=`curl -s -XDELETE "${SERVER_PORT}/"${del_index}"?pretty" |sed -n '2p'`
#写入日志
echo "clean time is $(date)" >>${CLEAN_LOG}
echo "delResult is ${delResult}" >>${CLEAN_LOG}
fi
done
把以上文件保存到/usr/local/shell/clean__es_index.sh
然后需要每天执行一次此脚本
用命令行crontab -e打开crontab配置文件,添加如下内容:
0 23 * * * /usr/local/shell/clean_es_index.sh
0 23 * * * 代表每天晚上十一点开始执行
https://tool.lu/crontab --cron表达式测试工具地址