Installation
CentOS/RHEL
# Create Curator repository file
vi /etc/yum.repos.d/curator.repo
Add the following content to the repository file:
[curator-5]
name=CentOS/RHEL 6 repository for Elasticsearch Curator 5.x packages
baseurl=https://packages.elastic.co/curator/5/centos/6
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
Install Curator:
yum install elasticsearch-curator
Ubuntu/Debian
# Add GPG key
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# Add repository
echo "deb https://packages.elastic.co/curator/5/debian stable main" | sudo tee -a /etc/apt/sources.list.d/curator.list
# Update and install
sudo apt-get update
sudo apt-get install elasticsearch-curator
Creating Cron Job
Create a cron job to run every day at 03:00:
Add the following line:
0 3 * * * /usr/bin/curator --config /mnt/ElasticData/curator/curator.yml /mnt/ElasticData/curator/readonly_shrink.yml
Restart cron service:
To check logs:
sudo tail -900f /var/log/cron
For troubleshooting, you can check these resources:
Curator.yml Configuration
A curator.yml file is needed to run Curator. This file content specifies where and how curator should connect:
---
# Remember, leave a key empty if there is no value. None will be a string,
# not a Python "NoneType"
client:
hosts:
- 10.6.1.11
port: 9200
url_prefix:
use_ssl: False
certificate:
client_cert:
client_key:
ssl_no_validate: False
http_auth:
timeout: 30
master_only: False
logging:
loglevel: INFO
logfile: curator.log
logformat: default
# default: blacklist: ['elasticsearch', 'urllib3']
Snapshot Operations
A yml file containing snapshot settings is needed to take snapshots.
For this, a snapshot.yml file is created in addition to curator.yml:
actions:
1:
action: snapshot
options:
disable_action: False
repository: "es_apinizer_snapshot_20200914"
ignore_empty_list: True
wait_interval: 10
max_wait: -1
filters:
- filtertype: age
source: creation_date
direction: older
unit: days
unit_count: 90
Creating Snapshot Repository and Taking Snapshot
With the following commands, repository is first created in Elasticsearch, then curator is run with snapshot.yml:
# Create snapshot directory
mkdir -p /LOGARSIV/arsiv/apinizerLogBackup/es_apinizer_snapshot_20200914
# To add repository:
es_repo_mgr --config /mnt/ElasticData/curator/curator.yml \
create fs \
--repository es_apinizer_snapshot_20200914 \
--location /LOGARSIV/arsiv/apinizerLogBackup/es_apinizer_snapshot_20200914 \
--compression true
# To delete repository:
es_repo_mgr --config /mnt/ElasticData/curator/curator.yml \
delete --repository es_apinizer_snapshot_20200914
# Start snapshot operation
curator --config /mnt/ElasticData/curator/curator.yml \
/mnt/ElasticData/curator/snapshot.yml &
# Check snapshot status
curl -X GET "<ELASTICSEARCH_IP>:9200/_snapshot/_status?pretty" > status.json
# List all snapshots
curl -X GET "<ELASTICSEARCH_IP>:9200/_snapshot/_all?pretty"
# List snapshots in specific repository
curl -X GET "<ELASTICSEARCH_IP>:9200/_cat/snapshots/es_apinizer_snapshot_20200914?v&s=id&pretty"
Delete Operations
A yml file containing deletion settings is needed to delete indexes we want.
For this, a delete.yml file is created in addition to curator.yml:
Delete operation cannot be undone. It should be ensured that necessary backups are taken before deletion operation.
actions:
1:
action: delete_indices
description: >-
Delete indices older than 90 days
options:
ignore_empty_list: True
disable_action: False
filters:
- filtertype: age
source: creation_date
direction: older
unit: days
unit_count: 90
Curator is run with the following command to delete indexes:
curator --config /mnt/ElasticData/curator/curator.yml \
/mnt/ElasticData/curator/delete.yml &
Readonly & Shrink Operations
A yml file containing these settings is needed to set indexes we want to readonly mode and shrink them.
For this, a readonly_shrink.yml file is created in addition to curator.yml:
Shrink operation optimizes disk usage by reducing the number of shards in indexes. Indexes set to readonly mode are closed to write operations.
actions:
1:
action: index_settings
description: >-
Set log indices older than 2 days to be read only (block writes)
options:
disable_action: False
index_settings:
index:
blocks:
write: True
ignore_unavailable: False
preserve_existing: False
indices:
continue_if_exception: True
filters:
- filtertype: age
source: creation_date
direction: older
unit: days
unit_count: 2
2:
action: shrink
options:
disable_action: False
ignore_empty_list: True
shrink_node: DETERMINISTIC
node_filters:
permit_masters: True
number_of_shards: 1
number_of_replicas: 0
indices:
continue_if_exception: True
shrink_prefix:
shrink_suffix: '-shrink'
delete_after: True
post_allocation:
allocation_type: include
key: node_tag
value: cold
wait_for_active_shards: 1
wait_for_completion: True
wait_for_rebalance: True
wait_interval: 9
max_wait: -1
filters:
- filtertype: age
source: creation_date
direction: older
unit: days
unit_count: 2
Curator is run with the following command to set indexes to readonly and then shrink them:
curator --config /mnt/ElasticData/curator/curator.yml \
/mnt/ElasticData/curator/readonly_shrink.yml &