Verilerinizi elasticsearch'de index'lemeye başladıktan belli bir süre sonra disk alanınızın hızla dolduğunu fark edeceksiniz ve akabinde kibana'da yavaşlıklar başlayacak veya grafana elk-disc alert'iniz slack üzerinden size alarmlar gönderme başlayacaktır. Eğer elasticsearch'de index'lediğimiz veriler silmekten yana bir sıkıntı olmayacak türde ise; sonrasında muhtemelen büyük bir çoğunluğumuz ilk yöntem olarak elasticsearch-api kullanarak eski indexleri silmek aklımıza gelecektir. Oldukça ilkel işleyen bir süreç gibi; disk doldu gir makinaya yada postman üzerinden api-call ile log sil. Herhalde hiçbirimizin yapmak istemeyeceği bir yöntem.
Curator bu gibi işlemleri belli rule'lara göre otomatik olarak yapmaya yarayan bir tool'dur. Curator ile, hangi indeksin temizleneceğini ve kaç günlük verinin saklanacağını bir config-file ile tanımlayabilirsiniz ve belli periyotlar ile background-job run ederek rule'lara göre silme işlemini gerçekleştirir.
Örneğin payment-logs-* index'i hariç elasticsearch'de bulunan ve 90 günden daha eski bütün index'leri silmesini Curator'a tanımlayabilir ve Curator'ı haftada bir cron-job olarak çalışacak şekilde programlayarak index'leri sildirebiliriz.
Kurulum
Curator için makinanızda python-pip kurulu olması gerekmekte.
1) Install Python pip
$ sudo apt-get install python-pip
2) Install Curator
$ sudo pip install elasticsearch-curator
3.) Create new directory for config-files
mkdir curator
cd curator
touch config.yml
vim komutu ile config.yml dosyasının içine girip içerisinde bulunacak komutları aşağıdaki gibi yazalım. Bu dosyada elasticsearch adresi ve connection kurarken gerekli olan tanımlar yer almakta.
client:
hosts:
- 127.0.0.1
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:
logformat: default
blacklist: ['elasticsearch', 'watches', '.watches','.kibana']
Şimdi ise rule ve aciton'ların yer aldığı actions.yml dosyasını oluşturup içerisini ihtiyacımıza uygun olacak işekilde aşağıdaki komutlarda olduğu gibi yazalım.
actions:
1:
action: delete_indices
description: >-
Delete indices older than 90 days except payment-logs indices !
options:
ignore_empty_list: True
disable_action: False
filters:
- filtertype: pattern
kind: prefix
value: payment-logs-
exclude: True
- filtertype: age
source: name
direction: older
timestring: '%Y.%m.%d'
unit: days
unit_count: 90
Özetle; filtertype: age'i yani creationdate'i 90 günden fazla olan index'leri filtertype: pattern payment-logs index'i hariç silmesini belirttik.
Curator dry-run komutu ile bir nevi test yaparmışcasına komutumuzu çalıştırıp hangi indexleri delete edeceğini silmeden görebiliriz. Bunun için kullanacağımız komut ;
curator --config /root/curator/config.yml --dry-run /root/curator/actions.yml
Artık service olarak çalıştırmak istediğimiz curator'u run etmek için kullanacağımız komut ise aşağıdaki gibi olacaktır.
Curator job'ının her gece saat 02:00 da çalışmasını istiyoruz komutumuz;
0 2 * * * curator --config /root/curator/config.yml /root/curator/actions.yml
Özetleyecek olursak; curator kullanarak silmek istediğimiz elasticsearch index'lerini belli rule'lar tanımlayarak otomatik bir şekilde silmemizi sağlayan bir tool'dur. Bu tool'u kullanarak kolay bir şekilde manuel bir müdahale gerektirmeden eski index'lerden kurtulup elasticsearch makinanızda free disc-space yaratabilirsiniz. Daha fazla bilgi için elasticsearch-curator sayfasına göz atabilirsiniz.
Source