#!/usr/bin bash
ELASTICSEARCH="http://127.0.0.1:9200"
ONEMONTHAGO=$(date --date="30 days ago" +%Y-%m-%d)
ONEMONTHAGO2=$(date --date="30 days ago" +%Y.%m.%d)
curl -X DELETE "$ELASTICSEARCH/*$ONEMONTHAGO"
curl -X DELETE "$ELASTICSEARCH/*$ONEMONTHAGO2"
위 코드는 30일이 지나면 엘라스틱서치 인덱스를 삭제하는 쉘 스크립트다.
30일이 지난 인덱스를 모두 삭제하는 방법은
#!/usr/bin bash
# Defaults
ELASTICSEARCH="http://127.0.0.1:9200"
DATE=$(date --date="30 days ago" +%Y%m%d)
INDEX_NAME="logstash"
STANDARD=`date -d $DATE +"%Y%m%d"`
# # Validate numeric values
# RE_DATE1="^[0-9]{4}-((0[0-9])|(1[0-2]))-(([0-2][0-9])|(3[0-1]))+$"
# RE_DATE2="^[0-9]{4}.((0[0-9])|(1[0-2])).(([0-2][0-9])|(3[0-1]))+$"
# Get the indices from elasticsearch
INDICES_TEXT=`curl -s "$ELASTICSEARCH/_cat/indices?v" | awk '/'$INDEX_NAME'/{match($0, /[:blank]*('$INDEX_NAME'.[^ ]+)[:blank]*/, m); print m[1];}' | sort -r`
if [ -z "$INDICES_TEXT" ]; then
echo "No indices returned containing '$GREP' from $ELASTICSEARCH."
exit 1
fi
# Delete indices
declare -a INDEX=($INDICES_TEXT)
for index in ${INDEX[@]};do
# We don't want to accidentally delete everything
if [ -n "$index" ]; then
# .*\([0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\).* 을 \1 이랑 교체 - \1은 정규식의 그룹 중 첫 번째 그룹 = .([0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\)
# sed 's/\./-/g' : 을 -로 교체
# logstash-2017-01-03XXXX -> 2017-01-03 -> sed 's/\./-/g' 을 거치면 20170103
# 그리고 첫번째 인풋을 print
INDEX_DATE1=$(echo $index | sed -n 's/.*\([0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\).*/\1/p'| sed 's/\.//g')
INDEX_DATE2=$(echo $index | sed -n 's/.*\([0-9]\{4\}\-[0-9]\{2\}\-[0-9]\{2\}\).*/\1/p'| sed 's/\-//g')
if [ $STANDARD -ge $INDEX_DATE1 ]; then
curl -s -XDELETE "$ELASTICSEARCH/$index/"
fi
if [ $STANDARD -ge $INDEX_DATE2 ]; then
curl -s -XDELETE "$ELASTICSEARCH/$index/"
fi
fi
done
exit 0
'개발 > Bash, Shell Script' 카테고리의 다른 글
pid가 동작하는 중인지 확인하는 방법 (0) | 2021.11.18 |
---|---|
쉘 스크립트에서 와일드카드(*) 써서 파일 찾기 (0) | 2021.11.12 |