2015-10-30 13 views
16

में पुराने सूचकांक को हटा रहा है मेरे पास लॉगस्टैश-वर्ष-सप्ताह प्रारूप में अनुक्रमित मेरे कई लॉग हैं। यही है अगर मैं कुछ हफ्तों से पुराने सूचकांक को हटाना चाहता हूं, तो मैं इसे लोचदार खोज में कैसे प्राप्त कर सकता हूं। क्या ऐसा करने का कोई आसान, निर्बाध तरीका है?elasticsearch

उत्तर

19

क्यूरेटर यहाँ एक आदर्श मैच होगा। आप लिंक यहां पा सकते हैं - https://github.com/elastic/curator

नीचे की तरह एक आदेश ठीक से काम करना चाहिए -

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

आप कभी-कभी सूचकांक दूर करने के लिए क्रॉन में इस में रख सकते हैं।

आप यहाँ कुछ उदाहरण और डॉक्स पा सकते हैं - https://www.elastic.co/guide/en/elasticsearch/client/curator/current/examples.html

+0

यह मैं के लिए क्या देख रहा था। क्या आपके पास क्यूरेटर के अनुप्रयोगों पर दस्तावेज है? –

+4

यह क्यूरेटर v4 या नए के साथ काम नहीं करता है। इसके लिए एक कॉन्फ़िगरेशन फ़ाइल और एक एक्शन फ़ाइल की आवश्यकता होती है, जहां क्यूरेटर की क्रिया का वर्णन किया गया है। –

+0

एक काम कर रहे क्यूरेटर 4.2 उदाहरण – chrisan

6

Curator पर एक नज़र डालें, जो इस तरह के उपयोग के मामले के लिए विशेष रूप से विकसित एक उपकरण है।

एक नमूना आदेश, प्रलेखन के लिए:

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

मैं एक bash स्क्रिप्ट का उपयोग, कुछ ही दिन रखने के लिए

#!/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 (अभी तक एक और बैश) चाहते हैं # के साथ 30 को बदलने

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

यदि आप लोचदार खोज संस्करण 5.x का उपयोग कर रहे हैं तो आपको क्यूरेटर संस्करण 4.x इंस्टॉल करना होगा। आप documentation

से संस्करण स्थापित करने और स्थापना चरणों को देख सकते हैं। तो बस आदेश

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

क्यूरेटर एक सूखी रन ध्वज को सिर्फ उत्पादन क्या क्यूरेटर मार डाला है | प्रदान करता है चलाते हैं। आउटपुट आपकी लॉग फ़ाइल में होगा जिसे आपने config.yml फ़ाइल में परिभाषित किया है। अगर config_file.yml में परिभाषित कुंजी लॉगिंग नहीं है तो क्यूरेटर कंसोल करने के लिए आउटपुट करेगा। सूचकांक --dry रन झंडा बिना उपरोक्त आदेश चलाने को हटाने के लिए

विन्यास फाइल config_file.yml

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

है कार्रवाई फ़ाइल action_file.yml

--- 
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: 

है आप चाहते हैं सूचकांक साप्ताहिक, मासिक, आदि स्वचालित रूप से हटाने के लिए। तो बस की तरह

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

बैश स्क्रिप्ट लिखने इन फ़ोल्डरों में से एक में एक खोल स्क्रिप्ट रखो: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly or /etc/cron.weekly और अपने काम किया जाता है।

नोट: अपने कॉन्फ़िगरेशन और एक्शन फ़ाइलों में सही इंडेंटेशन का उपयोग करना सुनिश्चित करें। अन्यथा यह काम नहीं करेगा।

+1

के लिए @ sachchit-bansal द्वारा उत्तर देखें धन्यवाद, यह क्यूरेटर 4.2 के लिए इस उत्तर का वर्तमान (2017) कार्य संस्करण है :) – chrisan

+0

वैसे ही क्यूरेटर काम कर रहा है! [विनीथ मोहन] का जवाब (https://stackoverflow.com/users/976646/vineeth-mohan) क्यूरेटर 4.x से पुराना है - और इसे अभी अधिकांश लोचदार खोज प्रतिष्ठानों के लिए आवेदन करना चाहिए (जहां 5.x चालू है)। – jonashackt

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

सभी या फिल्टर हट जाएँगे:

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