J'ai mes nombreux journaux indexés au format logstash-Year-Week. Si je veux supprimer des index de plus de quelques semaines, comment puis-je obtenir cela dans elasticsearch Existe-t-il un moyen simple et transparent de le faire?
Curator serait un match idéal ici . Vous pouvez trouver le lien ici - https://github.com/elastic/curator
Une commande comme ci-dessous devrait bien fonctionner -
curator --Host <IP> delete indices --older-than 30 --prefix "Twitter-" --time-unit days --timestring '%Y-%m-%d'
Vous pouvez garder cela dans le CRON pour supprimer les index de temps en temps.
Vous pouvez trouver quelques exemples et documents ici - https://www.elastic.co/guide/fr/elasticsearch/client/curator/current/examples.html
Si vous utilisez elasticsearch version 5.x, vous devez installer la version 4.x ..__ du conservateur. Vous pouvez voir les étapes de compatibilité et d'installation de la version à partir de documentation
Une fois installé. Ensuite, lancez la commande
curator --config path/config_file.yml [--dry-run] path/action_file.yml
Curator fournit un indicateur de piste sèche pour indiquer simplement ce que Curator aurait exécuté. La sortie sera dans votre fichier journal que vous avez défini dans le fichier config.yml. Si la clé de journalisation n'est pas définie dans config_file.yml, currator sera envoyé à la console. Pour supprimer les index, exécutez la commande ci-dessus sans l'option --dry-run.
Le fichier de configuration config_file.yml est
---
client:
hosts:
- 127.0.0.1
port: 9200
logging:
loglevel: INFO
logfile: "/root/curator/logs/actions.log"
logformat: default
blacklist: ['elasticsearch', 'urllib3']
Le fichier d'action action_file.yml est
---
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:
Si vous souhaitez supprimer les index chaque semaine, chaque mois, etc. automatiquement. Ensuite, écrivez simplement le script bash comme
#!/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
Placez un script Shell dans l'un des dossiers suivants: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly or /etc/cron.weekly
et votre travail est terminé.
NOTE: Assurez-vous d'utiliser le bon retrait dans vos fichiers de configuration et d'action. Sinon, ça ne marchera pas.
J'utilise un script bash, il suffit de changer le 30 avec le nombre de jours que vous souhaitez conserver
#!/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
Jetez un coup d’œil à Curator , un outil développé spécialement pour ce type d’utilisation.
Un exemple de commande, pour la documentation:
curator --Host 10.0.0.2 delete indices --older-than 30 --time-unit days \
--timestring '%Y.%m.%d'
yanb (encore une autre bash)
#!/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
curator_cli delete_indices --filter_list '{"filtertype":"none"}'
va supprimer tout ou filtrer:
--filter_list '[{"filtertype":"age","source":"creation_date","direction":"older","unit":"days","unit_count":13},{"filtertype":"pattern","kind":"prefix","value":"logstash"}]'