1. 程式人生 > 實用技巧 >ES定期刪除索引

ES定期刪除索引

1. 背景:由於ES的日誌索引每天都在增長,很快快取就吃不消了, 需要定期清理一下過期不用的索引, 在此使用定期刪除索引的方法

2. 指令碼delete_es_indices_over_15_day.sh

#!/bin/bash

#刪除早於15天的ES叢集的索引
function delete_indices() {
param=$(echo $1)
#擷取索引的日期部分(用於下面的日期比較是否小於15日),我的索引是com-字串後面的部分為日期, 比如: www.test.com-2020.08.08 dateValue
=$(echo ${param#*com-})
#擷取日期的前部分作為索引的名稱(後續需要替換-為., 然後和日期拼接起來成為一個真正的索引名稱,用於刪除) name
=$(echo ${param%-$dateValue*}) echo "name=$name date=$dateValue" comp_date=`date -d "15 day ago" +"%Y-%m-%d"` date1="$dateValue 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 "$1時間早於$comp_date,進行索引刪除" #轉換一下格式,將類似www-test-com格式轉化為www.test.com format_name
=`echo $name| sed 's/-/\./g'` #轉換一下格式,將類似2020-10-01格式轉化為2020.10.01 format_date=`echo $dateValue| sed 's/-/\./g'`
#拼接成索引名稱 indexName
="$format_name-$format_date"
#刪除索引 curl -XDELETE http://localhost:9200/$indexName echo "$indexName刪除成功" fi }
#注意, 由於我的日誌都是包含有"com-"的字串,故使用該字串模糊查詢索引列表 curl
-XGET http://localhost:9200/_cat/indices | awk -F" " '{print $3}'|grep com-
| uniq | sed 's/\./-/g' | while read LINE
do #呼叫索引刪除函式, 結果列印到日誌 delete_indices $LINE >> /home/logs/delete_indices.log done

3. crontab定時配置,每天1點定時刪除

0 1 * * * sh /home/delete_es_indices_over_15_day.sh