Removing old indices in elasticsearch

后端 未结 9 2110
生来不讨喜
生来不讨喜 2020-12-07 21:12

I have the many of my logs indexed in logstash-Year-Week format. That is if i want to delete indices older than a few weeks, how can I achieve that in elasticsearch. Is ther

9条回答
  •  执念已碎
    2020-12-07 21:34

    I use a bash script, just change the 30 with the # of days you want to keep

    #!/bin/bash
    
    # Zero padded days using %d instead of %e
    DAYSAGO=`date --date="30 days ago" +%Y%m%d`
    ALLLINES=`/usr/bin/curl -s -XGET http://127.0.0.1:9200/_cat/indices?v | egrep logstash`
    
    echo
    echo "THIS IS WHAT SHOULD BE DELETED FOR ELK:"
    echo
    
    echo "$ALLLINES" | while read LINE
    do
      FORMATEDLINE=`echo $LINE | awk '{ print $3 }' | awk -F'-' '{ print $2 }' | sed 's/\.//g' ` 
      if [ "$FORMATEDLINE" -lt "$DAYSAGO" ]
      then
        TODELETE=`echo $LINE | awk '{ print $3 }'`
        echo "http://127.0.0.1:9200/$TODELETE"
      fi
    done
    
    echo
    echo -n "if this make sence, Y to continue N to exit [Y/N]:"
    read INPUT
    if [ "$INPUT" == "Y" ] || [ "$INPUT" == "y" ] || [ "$INPUT" == "yes" ] || [ "$INPUT" == "YES" ]
    then
      echo "$ALLLINES" | while read LINE
      do
        FORMATEDLINE=`echo $LINE | awk '{ print $3 }' | awk -F'-' '{ print $2 }' | sed 's/\.//g' `
        if [ "$FORMATEDLINE" -lt "$DAYSAGO" ]
        then
          TODELETE=`echo $LINE | awk '{ print $3 }'`
          /usr/bin/curl -XDELETE http://127.0.0.1:9200/$TODELETE
          sleep 1
          fi
      done
    else 
      echo SCRIPT CLOSED BY USER, BYE ...
      echo
      exit
    fi
    

提交回复
热议问题