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

原文链接: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

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

你可能感兴趣的:(linux运维)