原文链接:https://blog.csdn.net/felix_yujing/article/details/78207667
背景
本文环境为7.2版本,已经启用x-pack,所以调用接口需要输入密码,每次删除之前都会快照到AWS-S3,做保存,方便查阅。
索引需要定期快照,索引的后缀日期格式为YYYY.MM.DD,如:test-2017.10.01
思路
通过_cat/indices接口可以获取当前ES全部索引信息,取第三列为索引名。过滤出索引名中带有的日期字符串,然后进行日期比较,早于45天前的日期便可通过日期模糊匹配索引来删除。
完整的脚本如下:
#!/bin/bash
###################################
#snapshot$DAY天前的ES集群的索引
###################################
DAY=45
function date2days {
echo "$*" | awk '{
z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
print j
}'
}
function snapshot_indices(){
comp_date=`date -d "$DAY day ago" +"%Y-%m-%d"`
date1="$1 00:00:00"
date2="$comp_date 00:00:00"
t1=`date -d "$date1" +%s`
t2=`date -d "$date2" +%s`
if [ $t1 -le $t2 ]; then
echo -e "\n$1时间早于$comp_date,进行索引备份"
#转换一下格式,将类似2017-10-01格式转化为2017.10.01
format_date=`echo $1| sed 's/-/\./g'`
input=`echo $1| sed 's/-//g'`
InpuDays=$(date2days ${input:0:4} ${input:4:2} ${input:6:2})
SysDays=$(date2days `date +"%Y %m %d"`)
let result=$SysDays-$InpuDays
curl -XPUT http://localhost:9203/_snapshot/s3-test/%3Csnapshot-test-%7Bnow%2Fd-${result}d%7D%3E?wait_for_completion=true -uelastic:QDULVrlPoe0yS0ro91qF -H 'Content-Type: application/json' -d'{ "indices": "*'$format_date'", "ignore_unavailable": true, "include_global_state": false}'
fi
}
function delete_indices(){
comp_date=`date -d "$DAY day ago" +"%Y-%m-%d"`
date1="$1 00:00:00"
date2="$comp_date 00:00:00"
t1=`date -d "$date1" +%s`
t2=`date -d "$date2" +%s`
if [ $t1 -le $t2 ]; then
echo -e "\n$1时间早于$comp_date,进行索引删除"
#转换一下格式,将类似2017-10-01格式转化为2017.10.01
format_date=`echo $1| sed 's/-/\./g'`
curl -XDELETE http://localhost:9203/*$format_date -uelastic:QDULVrlPoe0yS0ro91qF
fi
}
curl -XGET http://localhost:9203/_cat/indices -uelastic:QDULVrlPoe0yS0ro91qF | awk -F" " '{print $3}' | awk -F"-" '{print $NF}' | egrep "[0-9]*\.[0-9]*\.[0-9]*" | sort | uniq | sed 's/\./-/g' | while read LINE
do
#调用索引snapshot函数
snapshot_indices $LINE
#调用索引删除函数
delete_indices $LINE
done
将脚本配置到定时任务定期执行即可。