使用shell腳本定時刪除elasticsearch索引

我的日誌格式文件按照日期命名:system-logs-2020-03-18,需要定期刪除60天以前日誌文件。

 

#!/bin/bash
######################################################
# $Name:        clean_amazon_es_index.sh
# $Version:     v1.0
# $Function:    clean amazon es log index
# $Author:      [email protected]
# $Create Date: 2020-03-18
# $Description: shell
######################################################
#腳本的日誌文件路徑
CLEAN_LOG="/var/log/clean_amazon_es_index.log"
#索引前綴
INDEX_PRFIX="system-logs-"
#elasticsearch 的主機ip及端口
SERVER_PORT="https://192.165.33:443"
#取出已有的索引信息
INDEXS=$(curl -s "${SERVER_PORT}/_cat/indices?v" |grep "${INDEX_PRFIX}"|awk '{print $3}')
#刪除多少天以前的日誌,假設輸入10,意味着10天前的日誌都將會被刪除
DELTIME=60
# seconds since 1970-01-01 00:00:00 seconds
SECONDS=$(date -d  "$(date  +%F) -${DELTIME} days" +%s)
#判斷日誌文件是否存在,不存在需要創建。
if [ ! -f  "${CLEAN_LOG}" ]
then
touch "${CLEAN_LOG}"
fi
#刪除指定日期索引
echo "----------------------------clean time is $(date +%Y-%m-%d_%H:%M:%S) ------------------------------" >>${CLEAN_LOG}
for del_index in ${INDEXS}
do
        indexDate=$( echo ${del_index} |cut -d "-" -f 3,4,5 )
    #根據索引的名稱的長度進行切割,不同長度的索引在這裏需要進行對應的修改
        indexSecond=$( date -d ${indexDate} +%s )
        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_amazon_es_index.sh

然後需要每天執行一次此腳本。

用命令行crontab -e打開cron配置文件,添加如下內容:

0 02 * * * /usr/local/shell/clean_amazon_es_index.sh

表示每天2點的時候執行一次。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章