您的位置:首页 > 其它

定期删除elasticsearch集群45天以上的索引

2020-03-05 16:36 134 查看

原文链接:https://www.geek-share.com/detail/2718723090.html

背景

本文环境为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

将脚本配置到定时任务定期执行即可。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
种花家的康小华 发布了5 篇原创文章 · 获赞 0 · 访问量 572 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: