elasticsearch logstash elasticsearch-plugin

Eliminando antiguos índices en elasticsearch.



logstash filter (6)

Tengo muchos de mis registros indexados en formato logstash-Year-Week. Es decir, si quiero eliminar índices más antiguos que unas pocas semanas, ¿cómo puedo lograr eso en elasticsearch? ¿Hay una manera fácil y perfecta de hacer eso?




Si está utilizando la versión 5.x de elasticsearch, debe instalar la versión 4.x del curador. Puede ver los pasos de compatibilidad e instalación de la versión en la documentation

Una vez instalada. Luego simplemente ejecuta el comando

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

Curator proporciona una bandera de ejecución en seco para mostrar 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 se registra la clave definida en config_file.yml, entonces currator se enviará a la consola. Para eliminar los índices, ejecute el comando anterior sin --dry-run flag

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 semanalmente, mensualmente, etc. automáticamente. Entonces solo escribe el guión de 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

Ponga un script de shell en una de estas carpetas: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly or /etc/cron.weekly y su trabajo está listo.

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 de bash, solo cambio los 30 con el número de días que desea 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


yanb (otro golpe)

#!/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"}''

borrará todo o filtrará:

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