La herramienta Curator nos permite trabajar de forma sencilla con nuestros índices de Elasticsearch. Una de sus funcionalidades es la de eliminar índices con cierta antigüedad, ideal para realizar limpiezas periódicas y evitar que aumente la ocupación en disco de forma indefinida.
En estos momentos Curator tiene su propio repositorio independiente del principal de elastic. En mi caso en Debian 9 creo el fichero /etc/apt/sources.list.d/curator.list
deb [arch=amd64] https://packages.elastic.co/curator/5/debian9 stable main
Después con apt instalamos:
apt update && apt-get install elasticsearch-curator
También se puede instalar con pip independientemente del sistema:
pip install elasticsearch-curator
El paquete elasticsearch-curator nos proporciona dos comandos: curator_cli y curator. El primero permite realizar filtros sobre índices pasando un JSON como argumento, por lo que a priori es más directo y de fácil uso.
Una vez instalado podemos hacer un pequeño test mostrando los índices de nuestro Elastic con curator_cli:
curator_cli --host 192.168.1.2 show_indices --verbose --header
Obteniendo:
Comando curator_cli y filtros JSON
Echando mano de curator_cli
, por ejemplo para eliminar todos los índices con prefijo filebeat con antigüedad superior a 3 días lanzaríamos lo siguiente:
curator_cli --host 192.168.1.2 \ --dry-run delete_indices \ --filter_list '[{"filtertype":"age","source":"creation_date","direction":"older","unit":"days","unit_count":10},{"filtertype":"pattern","kind":"prefix","value":"filebeat"}]' En el ejemplo incluyo la opción <code>dry-run</code> para realizar un test y ver qué índices borraría:
En mi caso utilizo curator_cli
en un script como el siguiente que lanzo desde una crontab, recorriendo con un bucle el array de prefijos de índices que quiero borrar:
#!/bin/bash # # Description :Clean elasticsearch indices based on date # Author :Julio Sanz # retention_days="10" elastic_host="192.168.1.2" indices_patterns=(filebeat metricbeat auditbeat packetbeat) for pattern in ;do curator_cli --host 192.168.1.2 delete_indices \ --filter_list '[{"filtertype":"age","source":"creation_date","direction":"older","unit":"days","unit_count":"'"$retention_days"'"},{"filtertype":"pattern","kind":"prefix","value":"'"$pattern"'"}]' done
Curator con ficheros YAML
Por su parte el comando curator utiliza ficheros YAML en los que se parametrizan configuraciones y operaciones a realizar. Si conoces Ansible, la sintaxis te resultará familiar. Para el caso de ejemplo podríamos crear un fichero curator.yml
con el siguiente contenido:
--- client: hosts: - 192.168.1.2 port: 9200 timeout: 30
Y otro llamado delete_indices.yml
con esto:
actions: 1: action: delete_indices description: >- Delete indices older than 10 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 disable_action: False filters: - filtertype: pattern kind: prefix value: filebeat- - filtertype: age source: name direction: older timestring: '%Y.%m.%d' unit: days unit_count: 10
Después lanzaríamos curator con:
curator ./delete_indices.yml --config ./curator.yml --dry-run
Obteniendo:
En el fichero delete_indices.yml
sólo he incluído el prefijo de filebeat, podemos crear otro bloque de acciones que incluya por ejemplo el prefijo de metricbeat:
actions: 1: action: delete_indices description: >- Delete indices older than 10 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 disable_action: False filters: - filtertype: pattern kind: prefix value: filebeat- - filtertype: age source: name direction: older timestring: '%Y.%m.%d' unit: days unit_count: 10 2: action: delete_indices description: >- Delete indices older than 10 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 disable_action: False filters: - filtertype: pattern kind: prefix value: metricbeat- - filtertype: age source: name direction: older timestring: '%Y.%m.%d' unit: days unit_count: 10
Para el comando curator tenéis varias plantillas para todo tipo de acciones en la web oficial de Elastic.
Recordad también que tenéis el proyecto en GitHub.