ELASTICSEARCH’TE INDEXLERIN YAŞAM DÖNGÜSÜ

Bahar Şahin
Turk Telekom Bulut Teknolojileri
4 min readDec 12, 2022

Merhaba bu makalede sizlere, elasticsearch’te indexlerin yaşam döngüsünün nasıl olduğunu anlatacağım.

Pipeline karmaşasının önüne geçmek, gelen veriyi indexlemeyi otomotize edebilmek adına biz Data Stream kullanıyoruz. Verilerimizi datastream ile indexlemek için her proje özelinde index patternler ile template oluşturmalıyız. Template oluşturma adımına geçmeden Index lifecycle policy belirlemeliyiz.

Index Lifecycle Management oluşturma

Elasticsearch veri saklama süresine göre indeksleri otomatik olarak Index Lifecycle Management (ILM) policleri ile yönetebilmemizi sağlar. ILM, time-series ya da metrik verilere hot-warm-cold adımlarını uygulayarak indeksleri yönetir. ILM policy sayesinde indekslere rollover (yeni indeks ), merge (indeksin segment sayısını düşürme), shrink (indeksin shard sayısını azaltma), delete (indeksi silme) işlemleri uygulanır. Policy, indexe dahil edildiği template ile eklenir. Template eklenen index pattern üzerinden her yeni indexe policy otomatik olarak atanmış olur.

-> Loglarımızın tutulduğu indexlerimizin 4 aşamalı bir yaşam döngüsünde işletiyoruz;

1.Hot Faz: Bu fazda indexlere aktif olarak create/update/search işlemleri uygulanır.

2.Warm Faz: Bu fazdaki eylemler artık güncellemenin yapılmadığı, sadece sorgu çalıştırılabilen indexlere uygulanır.

3.Cold Faz: İndex üzerinde update işlemleri yapılamaz. Sorgulamanın çok nadir yapıldığı aşamadır. Dolayısıyla sorgular daha yavaş çalışır.

4.Delete Faz: İhtiyaç olmayan index kalıcı olarak silinir.

-> Şimdi kibana arayüzünden öncelikle policymizi oluşturalım.

Stack Management -> Index lifecycle Management -> Create policy

Öncelikle policy ismimizi belirleyelim. Sonrasında Hot phase aşamasındaki değerlerimizi belirleyelim. Hot phase içerisinde sağ tarafta datanın silinip silinmemesine göre ikili buton arasında seçim yapılır. Advanced setting açıldığında rollover default olarak işaretlenmiştir.

Rollover: Burada belirlediğimiz max primary shard size, max_age değerleri yeni indexin oluşması gereken sınırları belirler. Max primary shard size bizim bir indeximizin max ulaşacağı boyut ve yeni indexe yazma başlaması için atanan max değerdir. Max age için tanımlanan değer boyunca index eğer max size a ulaşmazsa max age gün sayısı dolduğunda yeni index oluşturulur.

Force merge: Bizim her index için 1 shardımız olduğundan dolayı bu değişkeni kullanmıyoruz. Eğer birden çok shardımız olsaydı indexler sharda shardlar segmentlere bölündüğü için segment sayısını düşürmek için kullanıcaktık.

Shring: İndexin birden fazla shardı olması durumunda shard sayısını azaltmak için kullanılır.

Delete phase adımında oluşturduğumuz policy kullanıcak olan indexlerin kaç gün süreyle silinmemesi gerektiği değeri belirttiğimiz adımdır. Rollover olduktan 30 gün sonra indeksi siler. max_age değeri indeksin oluşturulduğu zamanı değil, rollover zamanı baz alır.

Bir diğer yöntem DevTools ekranından policy oluşturma;

Yukarıdaki örneğe göre, index hot fazda tutulacaktır. Indexin primary shardı 50gb(1 primary ve 1 replica var ise toplam 100GB) olduğunda ya da 7 gün sonra boyutuna bakılmaksızın rollover olacaktır (test-000001 >> test-000002) ve yeni indexe yazmaya başlayacaktır. Rollover işlemi sonrasında delete fazına geçerek 365gün sonrasında eski index silinecektir. Komut çalıştırıldıktan sonra sağ tarafta { “acknowledged” : true } Şeklinde bir onay gelmesi gerekmektedir. Aksi takdirde komutta bir hata meydana gelmiştir.

Shard ve Replica sayısını aşağıdaki gibi yapılandırabiliriz;

TEMPLATE OLUŞTURMA

Policymizi oluşturduktan sonra artık template oluşturma adımına geçebiliriz. Kibana arayüzümüze login olduktan sonra;

Stack management > Index management > Templates > Create template

Create template için gelen sayfada templatimizin adını belirtmeliyiz. Sonrasında hangi indexler bu templatede bulunmasını istiyorsak index pattern bölümünde isimlerini eklemeliyiz. Burada belirttiğimiz indexler aynı sürede saklanması gereken projeye ait olmalı çünkü templatimizde bir tane policy tanımlayabiliyoruz.

Index Setting sayfasında İndex patternlerimizi kaç gün süreyle saklamak istediğimizi belirttiğimiz policyi bu adımda aşağıda örnekteki gibi ekliyoruz.

{

“index”: {

“lifecycle”: {

“name”: “Policyname”

}

}

}

Son olarak review template adımına geçerek create template yapabiliriz.

Buradaki mappings adımından daha sonra ki yazımda uygunlanması ve performans getirilerinden bahsedeceğim.

--

--