Elasticsearch ILM( Index Lifecycle Management) Nedir? Nasıl Kullanılır?

Birol EMEKLİ
Devops Türkiye☁️ 🐧 🐳 ☸️
3 min readDec 7, 2019

--

Merhabalar,

Bu yazımda size oldukça popüler olan NoSQL veri tabanlarından birisi Elasticsearch’de policy nasıl oluşturulur ve nasıl kullanılır bundan bahsediyor olacağım.

ILM bize elasticsearch üzerinde bulunan indexlerimizi otomatik yönetmemizi sağlayan bir yapıdır. Daha önceden oluşmuş veya yeni oluşturulacak bir index’in gelecekte nasıl bir yaşam döngüsü içerisinde olacağını kendi kurallarınız çerçevesinde oluşturarak, indexleri bu kurala dahil ederek yönetimini sağlayabilirsiniz.

ILM zaman döngüsü aşamaları:

  • HOT: Alınan verilerin aktif olarak index’e yazıldığı ve sorgulamaların hızlı yapıldığı zamandır. Aktif olan index belirli bir boyuta, belirli bir documents sayısına ya da belirli bir gün sonra yeni index oluşturulabilir. Yeni index oluşturulduktan sonra eksi dizinler sorgulanabilir fakat yazma işlemi yeni dizine yapılır.
  • WARM: Bu aşamada index’e artık yeni veri yazılmamaktadır fakat sorgulamalar yapılabilmektedir. İsteğe bağlı olarak replica’lar azaltılabilir, shards’lar küçültülebilir veya yazma işlemi gerçekleşmediğinden daha az performanslı bir donanıma taşınabilir.
  • COLD: İndex’in artık tamamen güncellemeye kapalı ve çok nadir sorgulanır hale geldiği zaman. Sorgulamalar diğer üst aşamalara göre daha yavaş olmaktadır. Burada istenirse farklı bir donanıma taşınabilmektedir. Donanım gereksinimlerini azaltmak için index’e frozen işlemi uygulanabilir. Frozen işleminden sonra sorgulamalar yavaşlar, çünkü sorgulama sonucu diskten ram’e tekrar yüklenir.
  • DELETE: Son aşamada ise artık belirli bir süre sonra index’i silmek için ayarlamalar yapabiliriz.

Evet yukarıda bahsettiğim gibi ILM bu aşamalardan geçmektedir. Şimdi bir örnekle bu olayı daha anlaşılır hale getirelim.

curl -X PUT 'http://localhost:9200/ilm/policy/delete60day' -H 'Content-Type: application/json' -d'
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size":"100gb",
"max_age":"30d"
}
}
},
"warm": {
"min_age": "7d",
"actions": {
"forcemerge": {
"max_num_segments": 1
},
"shrink": {
"number_of_shards": 1
},
"allocate": {
"require": {
"data": "warm"
}
}
}
},
"cold": {
"min_age": "30d",
"actions": {
"set_priority": {
"priority": 0
},
"freeze": {},
"allocate": {
"require": {
"data": "cold"
}
}
}
},
"delete": {
"min_age": "60d",
"actions": {
"delete": {}
}
}
}
}
}'

Yukarıdaki örnekle bir policy oluşturuyoruz. Burada HOT aşamasında index 100GB altında veya oluştuğu tarihten 30 gün olmamışsa güncel olarak yazılmaya müsait olacak. İndex bu aşamada iken sorgulamalar daha hızlı olduğunu yukarıda bahsetmiştik.

Bu kuralı sağlayan index WARM aşamasına geçecek ve burada 7 gün kalacak. Bu aşamada index forcemerge(birleşmeye) ve shrink(küçülmeye) zorlanır. Burada index hala sorgulamalara HOT aşaması kadar hızlı cevap vermesede sorgulamalar yapılabilmektedir.

7 gün sonra COLD aşamasına geçen index 30 gün boyunca dondurulacak ve tutulacak.

En son aşama olan DELETE gelen index 60 gün sonra silinmiş olacak.

Evet bu policy ile indexlerimizi yönetebiliriz. Kibana arayüzünden Management arayüzünden ILM oluşturulup index’e atanabilir. Ben console’dan bu işlemin nasıl yapıldığını kısaca bir örnekle açıklayacağım.

İlk olarak yeni bir policy oluşturalım.

Şimdi oluşturulan policy bir görüntülüyelim.

Yukarıdaki resimde gözüktüğü üzere policy ayarlarını değişik yaptım. Şimdi gelin var olan index’e bu policy atayalım ve bitirelim.

Console ekranından oluşturduğumuz policy kibana üzerinden mevcut index’e Manage->Add lifecycle policy diyoruz ve oluşturduğumuz adı seçerek ekliyoruz. Bu aşamadan sonra kurallara göre index kendisini ayarlayacaktır.

Evet Elasticsearch ILM hakkında söyleyeceklerim bu kadar. Hoşçakalın :)

--

--