Esta reseña fue analizado por especialistas para que tengas la garantía de la veracidad de nuestro tutorial.
Solución:
Curator sería una pareja ideal aquí. Puede encontrar el enlace aquí: https://github.com/elastic/curator
Un comando como el siguiente debería funcionar bien:
curator --host delete indices --older-than 30 --prefix "twitter-" --time-unit days --timestring '%Y-%m-%d'
Puede mantener esto en el CRON para eliminar los índices de vez en cuando.
Puede encontrar algunos ejemplos y documentos aquí: https://www.elastic.co/guide/en/elasticsearch/client/curator/current/examples.html
Si está utilizando la versión 5.x de elasticsearch, debe instalar la versión 4.x de curator. Puede ver la compatibilidad de versiones y los pasos de instalación en la documentación.
Una vez instalada. Entonces solo ejecuta el comando
curator --config path/config_file.yml [--dry-run] path/action_file.yml
Curator proporciona un indicador de ejecución en seco para generar solo lo que Curator habría ejecutado. La salida estará en su archivo de registro que ha definido en el archivo config.yml. Si no inicia sesión key definido en config_file.yml, luego Curator generará una salida a la consola. Para eliminar los índices, ejecute el comando anterior sin el indicador –dry-run
El archivo de configuración config_file.yml es
---
client:
hosts:
- 127.0.0.1
port: 9200
logging:
loglevel: INFO
logfile: "/root/curator/logs/actions.log"
logformat: default
blacklist: ['elasticsearch', 'urllib3']
El archivo de acción action_file.yml es
---
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 desea eliminar los índices semanales, mensuales, etc. automáticamente. Luego solo escribe el script bash como
#!/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
Coloque un script de shell en una de estas carpetas: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly or /etc/cron.weekly
y tu trabajo está hecho.
NOTA: Asegúrese de usar la sangría correcta en sus archivos de configuración y acción. De lo contrario, no funcionará.
Uso un script bash, solo cambia el 30 con el número de días que deseas conservar
#!/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
Aquí tienes las comentarios y calificaciones
Nos puedes añadir valor a nuestra información participando con tu experiencia en las notas.