2015-10-30 14 views
16

Günlük kayıtlarımın logstash-Year-Week biçiminde dizine eklendiğini biliyorum. Yani, birkaç haftadan eski indeksleri silmek istiyorsam, elasticsearch'te bunu nasıl başarabilirim. Bunu yapmanın kolay ve sorunsuz bir yolu var mı?Elasticsearch'teki eski endeksleri kaldırma

cevap

19

Küratör burada ideal bir maç olacak. Burada link bulabilirsiniz - https://github.com/elastic/curator

aşağıda gibi bir komut sadece iyi çalışması gerekir -

curator --host <IP> delete indices --older-than 30 --prefix "twitter-" --time-unit days --timestring '%Y-%m-%d' 

Sen bazen indeksleri kaldırılması için cron bu bulundurun.

Burada bazı örnekler ve belgeler bulabilirsiniz - https://www.elastic.co/guide/en/elasticsearch/client/curator/current/examples.html

+0

. Küratörün uygulamalarına dair belgeleriniz var mı? –

+4

Bu, küratör v4 veya daha yeni ile çalışmıyor. Küratörün eyleminin açıklandığı bir yapılandırma dosyası ve bir eylem dosyası gerektirir. –

+0

Çalışma küratörü için @ sachchit-bansal tarafından verilen yanıta bakın 4.2 örnek – chrisan

6

Bu kullanım durumu için özel olarak geliştirilmiş bir araç olan Curator'a bir göz atın. dokümantasyon için

Örnek komut

:

curator --host 10.0.0.2 delete indices --older-than 30 --time-unit days \ 
    --timestring '%Y.%m.%d' 
10

Sadece

#!/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 
0

yanb (henüz başka bash) tutmak istediğiniz gün # ile 30 değiştirebilir, bash komut dosyasını kullanabilirsiniz

#!/bin/bash 
searchIndex=logstash-monitor 
elastic_url=logging.core.k94.kvk.nl 
elastic_port=9200 

date2stamp() { 
    date --utc --date "$1" +%s 
} 

dateDiff(){ 
    case $1 in 
     -s) sec=1;  shift;; 
     -m) sec=60;  shift;; 
     -h) sec=3600; shift;; 
     -d) sec=86400; shift;; 
     *) sec=86400;; 
    esac 
    dte1=$(date2stamp $1) 
    dte2=$(date2stamp $2) 
    diffSec=$((dte2-dte1)) 
    if ((diffSec < 0)); then abs=-1; else abs=1; fi 
    echo $((diffSec/sec*abs)) 
} 

for index in $(curl -s "${elastic_url}:${elastic_port}/_cat/indices?v" |  grep -E " ${searchIndex}-20[0-9][0-9]\.[0-1][0-9]\.[0-3][0-9]" | awk '{  print $3 }'); do 
    date=$(echo ${index: -10} | sed 's/\./-/g') 
    cond=$(date +%Y-%m-%d) 
    diff=$(dateDiff -d $date $cond) 
    echo -n "${index} (${diff})" 
    if [ $diff -gt 1 ]; then 
    echo "/DELETE" 
    # curl -XDELETE "${elastic_url}:${elastic_port}/${index}?pretty" 
    else 
    echo "" 
    fi 
done  
13

Elasticsearch sürüm 5.x kullanıyorsanız, küratörün sürüm 4.x sürümünü yüklemeniz gerekir. Sürüm uyumluluğu ve yükleme adımlarını documentation

Yüklendikten sonra görebilirsiniz. Sonra sadece

curator --config path/config_file.yml [--dry-run] path/action_file.yml 

Küratör sadece çıkış idam olurdu ne Küratör kuru işletilen bayrağı sağlar komutunu çalıştırın. Çıkış config.yml dosyasında tanımladığınız günlük dosyanızda olacaktır. Eğer config_file.yml dosyasında tanımlı kayıt defteri yoksa currator konsola çıkacaktır. endeksleri --dry işletilen bayrağı olmadan yukarıdaki komutu çalıştırmak silmek için

yapılandırma dosyası config_file.yml eylem dosya action_file.yml İsterseniz

--- 
actions: 
    1: 
    action: delete_indices 
    description: >- 
     Delete indices older than 7 days (based on index name), for logstash- 
     prefixed indices. Ignore the error if the filter does not result in an 
     actionable list of indices (ignore_empty_list) and exit cleanly. 
    options: 
     ignore_empty_list: True 
     timeout_override: 
     continue_if_exception: False 
     disable_action: False 
    filters: 
    - filtertype: pattern 
     kind: prefix 
     value: logstash- 
     exclude: 
    - filtertype: age 
     source: name 
     direction: older 
     timestring: '%Y.%m.%d' 
     unit: days 
     unit_count: 7 
     exclude: 

olduğunu

--- 
client: 
    hosts: 
    - 127.0.0.1 
    port: 9200 
logging: 
    loglevel: INFO 
    logfile: "/root/curator/logs/actions.log" 
    logformat: default 
    blacklist: ['elasticsearch', 'urllib3'] 

olduğunu Endeksleri haftalık, aylık, vb. O zaman sadece bu klasörlerden birinde bir shell script koyun

#!/bin/bash 
# Script to delete the log event indices of the elasticsearch weekly 

#This will delete the indices of the last 7 days 
curator --config /path/config_file.yml /path/action_file.yml 

gibi bash senaryo yazmaya: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly or /etc/cron.weekly ve iş yapılır.

NOT: Yapılandırma ve eylem dosyalarınızda doğru girintiyi kullandığınızdan emin olun. Aksi takdirde işe yaramaz.

+1

Teşekkürler, bu (2017) küratör 4.2 için bu cevabın çalışma versiyonudur :) – chrisan

+0

Bu, küratörün çalışma şeklidir! [Vineeth Mohan] 'un cevabı (https://stackoverflow.com/users/976646/vineeth-mohan), küratör 4.x'ten güncel değildir ve şu anda çoğu elasticsearch kurulumu için geçerli olmalıdır (5.x şu an geçerli). – jonashackt

0
curator_cli delete_indices --filter_list '{"filtertype":"none"}' 

tamamını veya filtreyi siler: Bu aradığım buydu

--filter_list '[{"filtertype":"age","source":"creation_date","direction":"older","unit":"days","unit_count":13},{"filtertype":"pattern","kind":"prefix","value":"logstash"}]'