Elasticsearch Nedir?

Elasticsearch Nedir?

Elasticsearch, büyük ölçekli veri setlerini gerçek zamanlı olarak indekslemek ve aramak için tasarlanmış, açık kaynaklı bir arama ve analiz motorudur. Bu güçlü platform, Java programlama dili kullanılarak geliştirilmiştir ve yüksek ölçeklenebilirlik, hız ve verimlilik sunar. Elasticsearch, Apache Lucene tabanlıdır ve dağıtık mimarisi sayesinde birden fazla sunucuda çalışabilir, bu da büyük veri hacimlerini etkin bir şekilde yönetmesine olanak tanır.

Temel kavramlar

Belgeler

Belgeler, Elasticsearch'te dizine eklenebilen temel bilgi birimleridir ve küresel internet veri değişim formatı olan JSON ile ifade edilirler. Bir belgeyi, aradığınız varlığı temsil eden bir satır olarak düşünebilirsiniz. Elasticsearch'te bir belge yalnızca metin değil, aynı zamanda JSON'da kodlanmış herhangi bir yapılandırılmış veri de olabilir. Bu veriler sayılar, dizeler ve tarihler gibi şeyler olabilir. Her belgenin benzersiz bir kimliği ve belgenin ne tür bir varlık olduğunu tanımlayan belirli bir veri türü vardır. Örneğin, bir belge bir ansiklopedi makalesini veya bir web sunucusundan alınan günlük girdilerini temsil edebilir.

Dizinler

Dizin, benzer özelliklere sahip belgelerden oluşan bir koleksiyondur. Elasticsearch'te sorgulayabileceğiniz en üst düzey varlık bir dizindir. Bir dizin genellikle mantıksal olarak ilişkili belgeler içerir. Örneğin, bir e-ticaret web sitesi bağlamında, Müşteriler için bir dizin, Ürünler için bir dizin, Siparişler için bir dizin vb. olabilir. Bir dizin, içindeki belgelerle ilgilenirken kullanılan bir adla tanımlanır.

Ters Dizin

Elasticsearch'teki bir dizin aslında "ters dizin" adı verilen bir mekanizmadır ve tüm arama motorları bu şekilde çalışır. Ters dizin, içerik gibi şeylerin bir belge veya belge kümesindeki konumlarına dönüştürülmesine olanak tanıyan bir veri yapısıdır. Temel olarak, bir kelimeyi bir belgedeki konumuna yönlendiren hashmap benzeri bir veri yapısıdır. Bir ters dizin, dizeleri doğrudan saklamaz ve bunun yerine her belgeyi ayrı arama terimlerine (yani her kelimeye) ayırır, ardından her arama terimini bu arama terimlerinin geçtiği belgelerle eşleştirir. Örneğin, aşağıdaki resimde "kelebek" terimi belge 1'de geçmektedir, bu nedenle bu belgeyle eşleştirilir. Bu, belirli bir belgedeki arama terimlerini bulmak için hızlı bir yol sağlar. Elasticsearch, dağıtılmış ters dizinleri kullanarak, çok büyük veri kümelerinden bile tam metin aramaları için en iyi eşleşmeleri hızlı bir şekilde bulabilir.

Arka Uç Bileşenleri

Küme

Elasticsearch kümesi, birbirine bağlı bir veya daha fazla düğüm örneğinden oluşan bir gruptur. Bir Elasticsearch kümesinin gücü, görevlerin, aramanın ve dizin oluşturmanın tüm düğümlere dağıtılmasında yatar.

Düğüm

Düğüm, bir kümenin parçası olan tek bir sunucudur. Bir düğüm verileri depolar ve kümenin indeksleme ve arama özelliklerine katılır. Bir Elasticsearch düğümü farklı şekillerde yapılandırılabilir:

Ana Düğüm

Elasticsearch kümesini kontrol eder ve bir dizin oluşturma/silme ve düğüm ekleme/çıkarma gibi tüm küme genel işlemlerinden sorumludur.

Veri Düğümü

Verileri depolar ve arama ve birleştirme gibi veriyle ilgili işlemleri gerçekleştirir.

İstemci Düğümü

Küme isteklerini ana düğüme ve verilerle ilgili istekleri veri düğümlerine ileten düğümdür.

Parçalar

Elasticsearch, dizini birden fazla parçaya veya "parçalara" bölmeye izin verir. Her bir parça, başında tamamen işlevsel ve bağımsız bir "dizin" bulunan bir parçadır ve bir kümenin herhangi bir düğmesinde barındırılabilir. Elasticsearch, bir dizindeki belgeleri birden fazla parçaya dağıtarak ve bu parçaları birden fazla düğmeye dağıtarak donanım arızalarına karşı koruma sağlar ve bir kümeye düğmeler eklendikçe sorgu kapasitesini artırır.

Replikalar

Elasticsearch, dizininizin parçacıklarının "replika parçacıkları" veya kısaca "replikalar" olarak adlandırılan bir veya daha fazla kopyasını oluşturmanıza olanak tanır. Temel olarak, bir replika shard birincil shard'ın bir kopyasıdır. Bir dizindeki her belge bir birincil parçaya aittir. Replikalar, donanım arızalarına karşı verilerinizin yedek kopyalarını sağlar ve arama veya belge alma gibi okuma isteklerinin kapasitesini artırır.

Elastik Yığın (ELK)

Elasticsearch, veri alımı, zenginleştirme, depolama, analiz ve görselleştirme için bir dizi açık kaynaklı araç olan Elastic Stack'in merkezi bileşenidir. Elasticsearch, Logstash ve Kibana bileşenlerinden sonra "ELK" yığını olarak adlandırılıyor ve şimdi Beats'i de içeriyor. Temelde bir arama motoru olmasına rağmen, kullanıcılar Elasticsearch'ü günlük verileri için kullanmaya başladılar ve bu verileri kolayca almanın ve görselleştirmenin bir yolunu istediler.

Kibana

Kibana, Elasticsearch için gerçek zamanlı histogramlar, çizgi grafikler, pasta grafikler ve haritalar sağlayan bir veri görselleştirme ve yönetim aracıdır. Elasticsearch verilerinizi görselleştirmenize ve Elastic Stack'te gezinmenize olanak tanır. İnteraktif görselleştirme, nereye gittiğinizi bulmak için bir soru ile başlayarak verilerinize şekil verme seçeneğinizi seçmenize olanak tanır. Örneğin, Kibana genellikle günlük analizi için kullanıldığından, web hitlerinizin nereden geldiğini, dağıtım URL'lerinizi vb. bulmak için soruları yanıtlamanıza olanak tanır.

Elasticsearch üzerinde kendi uygulamanızı oluşturmuyorsanız, Kibana güçlü ve esnek bir kullanıcı arayüzü ile dizininizi aramak ve görselleştirmek için harika bir yoldur. Ancak, her görselleştirmenin yalnızca tek bir dizine/indeks modeline karşı çalışabilmesi gibi önemli bir dezavantajı vardır. Dolayısıyla, farklı verilere sahip dizinleriniz varsa, her biri için ayrı görselleştirmeler oluşturmanız gerekir. Daha gelişmiş kullanım durumları için Knowi iyi bir seçenektir. Elasticsearch, verilerinizi birden fazla dizinde birleştirebilir ve diğer SQL/NoSQL/REST-API veri kaynaklarıyla karıştırabilir ve ardından iş kullanıcı dostu bir kullanıcı arayüzünde bunlardan görselleştirmeler oluşturabilir.

Logstash

Logstash, verileri toplamak, işlemek ve Elasticsearch'e göndermek için kullanılır. Eşzamanlı olarak farklı kaynaklardan veri toplayan, dönüştüren ve ardından toplamlar gönderen açık kaynaklı, sunucu tarafı bir veri işleme işlem hattıdır. Ayrıca, tanımlanmış alanları belirleyerek yapılar oluşturmak için farklı biçimlerdeki verileri dönüştürür ve hazırlar. Örneğin, veriler genellikle farklı sistemler arasında çeşitli biçimlerde dağılmış olduğundan, Logstash farklı sistemleri birleştirmenize olanak tanır - web sunucuları, veritabanları, Amazon hizmetleri vb. - ve verileri gitmesi gereken yere sürekli bir akış halinde göndermenizi sağlar.

Beats

Beats, yüzlerce veya binlerce makine ve sistemden veri göndermek ve bu verileri Logstash veya Elasticsearch'e göndermek için kullanılan hafif, tek amaçlı veri gönderme aracıları koleksiyonudur. Beats veri toplamak için harikadır çünkü sunucularınızda, kapsayıcılarınızda oturabilir veya işlev olarak dağıtılabilir ve verileri Elasticsearch'te merkezileştirebilirler. Örneğin, Filebeat sunucunuzda oturabilir, günlük dosyalarını geldikçe izleyebilir, ayrıştırabilir ve neredeyse gerçek zamanlı olarak Elasticsearch'e alabilir.

Elasticsearch Nasıl Çalışır?

Elasticsearch, verileri JSON formatında dökümanlar halinde saklar ve bu dökümanlar, "indeks" adı verilen yapılar içinde organize edilir. İndeksler, verilerin saklanması ve sorgulanması için optimize edilmiştir. Bir indeks, bir veya daha fazla "shard" (parça) olarak bölünebilir. Her shard, bir Apache Lucene indeksi olarak işlev görür ve bu yapı, verinin depolanması ve arama sorgularının hızlıca işlenmesi için optimize edilmiştir. Ayrıca, her shard'ın bir veya daha fazla kopyası (replica) olabilir, bu da veri kaybını önlemek ve okuma işlemlerinin hızını artırmak için kullanılır.

DB-Engines sıralamasına göre, Elasticsearch en popüler kurumsal arama motorudur.

Elasticsearch Ne İçin Kullanılır?

Artık Elasticsearch'ün ne olduğunu, mantıksal kavramlarını ve mimarisini anladığımıza göre, çeşitli kullanım durumları için neden ve nasıl kullanılabileceği hakkında daha iyi bir fikrimiz var. Aşağıda, Elasticsearch'ün başlıca kullanım alanlarından bazılarını inceleyecek ve şirketlerin günümüzde Elasticsearch'ü nasıl kullandıklarına dair örnekler sunacağız.

Başlıca Kullanım Alanları

Uygulama araması

Veri erişimi, alma ve raporlama için bir arama platformuna büyük ölçüde güvenen uygulamalar için.

Web sitesi araması

Çok sayıda içerik depolayan web siteleri, Elasticsearch'ü verimli ve doğru aramalar için çok kullanışlı bir araç olarak görmektedir. Elasticsearch'ün site arama alanında giderek daha popüler hale gelmesi şaşırtıcı değildir.

Kurumsal arama

Elasticsearch, belge arama, e-ticaret ürün arama, blog arama, kişi arama ve aklınıza gelebilecek hemen her şey dahil olmak üzere kurumsal çapta aramalara olanak tanır. Aslında, popüler web sitelerinin çoğu genellikle kurumsal düzeyde arama çözümleri kullanır. Biraz daha kuruma özgü bir bakış açısıyla, Elasticsearch dahili ağlarda büyük bir başarıyla kullanılmaktadır.

Günlük ve günlük analizi

Gördüğümüz gibi Elasticsearch, günlük verilerini neredeyse gerçek zamanlı ve ölçeklenebilir bir şekilde almak ve analiz etmek için yaygın olarak kullanılmaktadır. Ayrıca günlük metriklerle operasyonel içgörüler sağlayarak eylemleri tetikler.

Altyapı metrikleri ve konteyner izleme

Birçok şirket çeşitli metrikleri analiz etmek için ELK yığınını kullanır. Bu, kullanım durumuna göre değişen çeşitli performans parametrelerinden veri toplamayı içerebilir.

Güvenlik analitiği

Elasticsearch'ün bir diğer önemli analitik uygulaması da güvenlik analitiğidir. Sistem güvenliğiyle ilgili erişim günlükleri ve benzeri günlükler, sistemlerinizde gerçek zamanlı olarak neler olup bittiğine dair daha eksiksiz bir resim sağlamak için ELK yığını ile analiz edilebilir.

İş analitiği

ELK Stack'te bulunan birçok yerleşik özellik, onu bir iş analitiği aracı olarak iyi bir seçenek haline getirir. Bununla birlikte, kuruluşlarda bu ürünü uygulamak için biraz öğrenme eğrisi vardır. Bu özellikle Elasticsearch dışında birden fazla veri kaynağına sahip şirketler için geçerlidir, çünkü Kibana yalnızca Elasticsearch verileriyle çalışır. İşte bu noktada Knowi iyi bir seçenektir. Elasticsearch verilerinizin birden fazla dizin üzerinde birleştirilmesine ve diğer SQL/NoSQL/REST-API veri kaynaklarıyla karıştırılmasına olanak tanır ve daha sonra iş kullanıcı dostu bir arayüzde görselleştirmeler oluşturabilir.

Elasticsearch’in sağladığı avantajlar

RESTful API:

Elasticsearch'e basit ve anlaşılır REST tabanlı API'ler aracılığıyla erişilebilir. Bu API'ler veri eklemeyi, güncellemeyi, aramayı ve silmeyi kolaylaştırır. RESTful API kullanmak, Elasticsearch'ü kullanmaya başlamak için önceden teknik bilgi gerektirmeyen ve hızlı sonuçlar sağlayan bir yoldur.

Kolay Uygulama Geliştirme:

Elasticsearch kullanım kolaylığı sunar. Yeni başlayanlar bile ayrıntılı dokümantasyon ve geniş topluluk desteği sayesinde uygulamalarını hızla geliştirebilir ve test edebilir. Platform, çeşitli dillerdeki SDK'lar (Yazılım Geliştirme Kiti) ile entegre olarak farklı teknolojilere sahip geliştiriciler için erişilebilir hale gelir.

Çeşitlendirilmiş Arama Seçenekleri:

Elasticsearch, arama yaparken çok çeşitli seçenekler sunar: tam metin arama, otomatik tamamlama ve anında arama, kullanıcıların aradıklarını daha hızlı bulmalarını sağlar. Bu özellikler yazarken öneriler sunar ve hatta yazım hatalarını düzelterek kullanıcı deneyimini geliştirir.

Yüksek Performans:

Elasticsearch, Apache Lucene altyapısını kullanarak verileri hızlı bir şekilde işler. Bu, büyük veri setlerinde bile yüksek hızlı ve verimli aramalara olanak tanır.

Neredeyse Gerçek Zamanlı İşlemler:

Elasticsearch genellikle veri yazma ve okuma işlemlerini bir saniyeden daha kısa sürede gerçekleştirir. Bu, özellikle gerçek zamanlı veri analizi gerektiren uygulamalar için büyük bir avantajdır.

Dağıtılmış Mimari:

Elasticsearch verileri otomatik olarak birden fazla sunucuya dağıtarak işler. Bu hem veri güvenliği hem de yüksek kullanılabilirlik sağlar. Ayrıca sistemde bir arıza olması durumunda bile hizmet kesintisine neden olmaz.

Cluster ve Yedekleme Desteği:

Elasticsearch, herhangi bir veri kaybı durumunda bile kolayca kurtarılabilmesi için verilerin sürekli olarak yedeklenmesini sağlar. Çok düğümlü yapı, verilerin güvenliğini ve sistemin sürekli çalışma süresini garanti eder.

Eklentiler ve Entegrasyonlar:

Geniş bir eklenti yelpazesi sunan Elasticsearch, çeşitli ihtiyaçlara göre özelleştirilerek işlevselliği artırılabilir. Bu eklentiler güvenlikten veri analizine kadar geniş bir kullanım alanı sunuyor.

Güvenlik:

Elasticsearch kullanırken güvenlik önlemleri son derece önemlidir. Kullanıcı kimlik doğrulaması, erişim kontrol listeleri ve veri şifreleme gibi özellikler hassas verilerin korunmasını sağlar.

Elasticsearch Kurulumu

Depo Anahtarını Ekleyin

Elasticsearch paket deposunun güvenlik anahtarını ekleyerek başlayalım.

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add 

Elasticsearch Deposu Ekle

Elasticsearch paketlerini almak için depo kaynaklarını ekleyin.

sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list'

Depoları Güncelleme ve Elasticsearch'ün Kurulumu

Sistem paketlerini güncelleyerek ve Elasticsearch paketini kurarak işlemi tamamlayın

sudo apt update
sudo apt install elasticsearch

Elasticsearch Yapılandırması

Kurulum tamamlandıktan sonra, Elasticsearch'ü yapılandırmak için bazı temel ayarları yapmanız gerekecek.

Konfigürasyon Dosyasını Düzenleyin

Elasticsearch yapılandırma dosyasını düzenleyerek cluster adı ve node adını belirleyin. Bu dosya genellikle /etc/elasticsearch/elasticsearch.yml yolunda bulunur.

sudo nano /etc/elasticsearch/elasticsearch.yml

Aşağıdaki örnek ayarlar, temel bir Elasticsearch yapılandırmasını gösterir:

Cluster Adı:

cluster.name: my-application

Node Adı:

node.name: node-1

Bellek Ayarlarını Düzenleyin

JVM bellek ayarlarını optimize edin. Bu ayarlar, Elasticsearch'ün performansını doğrudan etkiler. JVM ayarları /etc/elasticsearch/jvm.options dosyasında düzenlenebilir.

sudo nano /etc/elasticsearch/jvm.options

Aşağıdaki ayarlar, JVM'ye 1 GB bellek tahsis eder:

-Xms1g
-Xmx1g

Elasticsearch'ü Başlatın ve Başlangıçta Çalışmasını Sağlayın

Elasticsearch hizmetini başlatın ve sistem yeniden başlatıldığında otomatik olarak başlamasını sağlayın.

sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch

Elasticsearch'ün Çalıştığını Test Edin

Elasticsearch'ün doğru bir şekilde çalıştığını doğrulamak için aşağıdaki komutu kullanın. Bu komut, Elasticsearch'ün çalıştığını ve istekleri kabul ettiğini kontrol eder.

curl -X GET "localhost:9200/"

Başarılı bir yanıt aşağıdakine benzer olacaktır:

{
  "name" : "node-1",
  "cluster_name" : "my-application",
  "cluster_uuid" : "XXXXXXXXX",
  "version" : {
    "number" : "7.15.2",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "XXXXXXXXX",
    "build_date" : "2021-10-07T21:23:26.826837Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

İleri Seviye Yapılandırma

Kurulumun ardından, Elasticsearch'ü daha verimli kullanabilmek için ileri seviye yapılandırmalar yapabilirsiniz.

Tersine Proxy Kurulumu (Opsiyonel)

Elasticsearch'ü bir tersine proxy (reverse proxy) arkasında çalıştırmak isteyebilirsiniz. Bu, özellikle güvenlik ve yük dengeleme amaçlarıyla yaygın bir uygulamadır. Örneğin, Nginx kullanarak bir tersine proxy ayarlayabilirsiniz.

Güvenlik Yapılandırmaları

Elasticsearch, veri güvenliği için çeşitli özellikler sunar. Aşağıdaki ayarları yaparak Elasticsearch'ü daha güvenli hale getirebilirsiniz:

Kullanıcı Kimlik Doğrulaması ve Yetkilendirme: X-Pack güvenlik özelliklerini etkinleştirin.

xpack.security.enabled: true

TLS/SSL Konfigürasyonu: Veri trafiğini şifreleyin.

xpack.security.transport.ssl.enabled: true

Erişim Kontrol Listeleri (ACL): Belirli kullanıcılar için erişim izinleri belirleyin.

Performans Optimizasyonu

Büyük veri kümeleri ve yüksek sorgu trafiği için performans optimizasyonları yapabilirsiniz:

Indeks Ayarları: İndeks oluştururken optimize edin.

PUT /my_index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

Shard Yönetimi: Shard ve replika sayılarını optimize edin.

Heap Belleği Ayarları: JVM heap boyutlarını doğru ayarlayın.

Elasticsearch'ü kurarken ve yapılandırırken bu adımları izlemek, sisteminizin düzgün çalışmasını ve en yüksek performansı sağlamasına olanak tanır.

Last updated