Uno de los principales problemas que podemos tener con nuestro entorno ELK ( ElasticSearch, Logstash y Kibana) es la gran cantidad de información que puede llegar a almacenar y el espacio en disco que se requiere para ello. Para solucionar este problema Elastic ha creado Curator, el cual puede realizar tareas de mantenimiento sobre ElasticSearch siguiendo una sencillas reglas que podemos definir nosotros.
Entre las múltiples acciones que tiene Curator, la que nos interesa para este caso es Delete indices, que utilizaremos para eliminar los índices de más de 45 días.
Curator está desarrollado en Python, por lo que tendremos que instalar Python pip antes de nada:
1 2 |
> wget https://bootstrap.pypa.io/get-pip.py > python get-pip.py |
Ahora ya podemos instalar Curator:
1 |
> pip install elasticsearch-curator |
Por defecto Curator utiliza el archivo de configuración ~/.curator/curator.yml , el cual habría que crear, pero en nuestro caso vamos a crearlo en /opt/curator/curator.yml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# Remember, leave a key empty if there is no value. None will be a string, # not a Python "NoneType" client: hosts: - 127.0.0.1 port: 9200 url_prefix: use_ssl: False certificate: client_cert: client_key: aws_key: aws_secret_key: aws_region: ssl_no_validate: False http_auth: es_admin:mipassword timeout: 30 master_only: False logging: loglevel: INFO logfile: logformat: default blacklist: ['elasticsearch', 'urllib3'] |
También debemos crear un Action file para definir las acciones a realizar por Curator, lo haremos en /opt/curator/borro_antiguos.yml :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
actions: 1: action: delete_indices description: Elimina los indices de mas de 45 dias y con el prefijo logstash. 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: '{269a43e619103fec20a2ff1fa4c6fa62e033dc304f85b3cc053bbec70bac83ad}Y.{269a43e619103fec20a2ff1fa4c6fa62e033dc304f85b3cc053bbec70bac83ad}m.{269a43e619103fec20a2ff1fa4c6fa62e033dc304f85b3cc053bbec70bac83ad}d' unit: days unit_count: 45 exclude: |
Ahora si queremos ejecutarlo para comprobar que funciona bien:
1 2 3 4 5 6 7 8 9 |
> curator --config /opt/curator/curator.yml /opt/curator/borro_antiguos.yml 2016-09-19 15:45:43,617 INFO Preparing Action ID: 1, "delete_indices" 2016-09-19 15:45:43,624 INFO Trying Action ID: 1, "delete_indices": Elimina los indices de mas de 45 dias y con el prefijo logstash. 2016-09-19 15:45:43,754 INFO Deleting selected indices: [u'logstash-2016.08.30', u'logstash-2016.08.26', u'logstash-2016.08.29'] 2016-09-19 15:45:43,754 INFO ---deleting index logstash-2016.08.30 2016-09-19 15:45:43,754 INFO ---deleting index logstash-2016.08.26 2016-09-19 15:45:43,755 INFO ---deleting index logstash-2016.08.29 2016-09-19 15:45:43,969 INFO Action ID: 1, "delete_indices" completed. 2016-09-19 15:45:43,969 INFO Job completed. |
Como vemos que funciona perfectamente, creamos una tarea programada en crontab, para ello ejecutamos:
1 |
> crontab -e |
Y para que se ejecute diariamente a las 00:00h, añadimos las siguientes líneas:
1 |
0 0 * * * curator --config /opt/curator/curator.yml /opt/curator/borro_antiguos.yml > /opt/curator/curator.log |
Esta tarea genera diariamente un archivo /opt/curator/curator.log con el resultado de cada la última ejecución.
Enlaces de interés: