Categories: Search Engine

ElasticSearch’e Başlarken (Kurulum, Kibana, Marvel ve Sense)

Merhaba arkadaşlar, bir başka makale konusu ile karşınızdayım.

Search Engine konusuna daha önceki makalelerimden birisi olan Lucene.Net Search Engine Kütüphanesi Kullanımı konusu ile bir giriş yapmıştım. Lucene’in özellikle distributed indexleme ve search işlemlerinde pure hali ile yetersiz kaldığını ve daha kompleks işlemler için ise “Scoring işlemleri, Facets’ler, Auto Suggestorler gibi vb.” ElasticSearch gibi güçlü engine’leri tercih edebileceğinizden de bahsetmiştik.

Yaklaşık bir yılı aşkın süredir ElasticSearch üzerinde çalışmaktayım. Search Engine üzerine olan makale serilerimde ise artık zaman zaman sizlere ElasticSearch üzerinde bulunan deneyimleri aktarmaya çalışacağım.

Dilerseniz öncelikle ElasticSearch nedir? sorusundan başlayarak, mimari özelliklerine doğru inelim.

ElasticSearch daha önce de bahsettiğim gibi Lucene alt yapısı üzerine kurulmuş, Java programlama dili ile ve open-source olarak geliştirilmiş, ölçeklenebilir(scalable), full text search tabanlı bir search engine’dir.

Sağladığı en büyük avantajlardan biri ise distributed(dağıtık) oluşudur. Bunun yanı sıra scalable olması ve highly available’a sahip olması da en büyük yetenekleri arasındadır. Büyük verilerle çalışıyor olduğumuzda RDBMS’lerin bizlere sağlamakta zorlandığı full text search işlemlerini, daha hızlı ve performanslı bir şekilde sağlayabilmektedir. Günümüz devlerine baktığımızda “LinkedIn, Stack Overflow, FourSquare ve Amazon” gibi firmalar arkaplanlarında ElasticSearch’ü kullanmaktadırlar.

Bu makale kapsamında ise ElasticSearch’ü tanıyıp kurulum işlemini gerçekleştireceğiz. Kurulum işleminin ardından Kibana, Sense ve Marvel gibi plugin’leri ekleyip, inceliyor olacağız. İlk olarak kurulum işlemlerine başlamadan önce adım adım bazı kavramlardan bahsedelim ve arından kurulum aşamalarına geçelim.

1) Sık Kullanılan Kavramlar

Index

ElasticSearch “document oriented” bir yapıya sahip olduğu için üzerindeki her bir data, indexlenerek bir JSON belgesi niteliğinde tutulmaktadır. RDBMS’leri baz alarak baktığımızda ise her bir index’i bir catalog’a benzetebiliriz. Index’lerin isimleri ise “unique” ve “lowercase” olmak zorundadır. Toparlamak gerekirse: ElasticSearch index’leri, JSON doküman yığınıdır da diyebiliriz.

Type

Type’lar oldukça basittir. Aynı RDBMS’lerde olduğu gibi catalog’lar içerisindeki tablolar’a benzetebiliriz. Type isimleri ilgili index içerisinde oluşturulurken “unique” olmalıdır ve yine “lowercase” olarak tanımlanmalıdır.

Mapping

Bir data’nın ElasticSearch’e nasıl aktarılması gerektiğinin yapılandırıldığı yerdir. Type’lar oluşturulurken daha önceden yapılandırılmış olan bu Mapping bilgileri ile oluşturulmaktadır. Burada ilgili Type’ların nasıl field‘lara sahip olacağı, bu field’ların indexleme ve search işlemleri sırasında nasıl “Analyze” ve “Tokenize” edileceği, henüz bahsetmemiş olsak bile ilgili index’in kaç adet replica‘ya ve shard‘a sahip olacağı gibi spesifik bilgiler yapılandırılmaktadır.

API Structure

ElasticSearch’ün en önemli özelliklerinden birtanesi de esnek ve güçlü bir yapıya sahip olan REST mimarisi üzerine kurulu olmasıdır. Esnek ve lightweight pipeline’ı sayesinde kolaylıkla HTTP protokolü üzerinden JSON gönderilip, alınabilmektedir.

2) Kurulum

Structural olarak önemli kavramlardan bahsettiğimize göre kurulum işlemlerine başlayabiliriz. Ben örnek gereği kurulum işlemlerini Windows üzerinde gerçekleştireceğim. Kurulum dosyasına buraya tıklayarak erişebilirsiniz. Ben ilgili link üzerinden “2.3.4” versiyonuna ait ZIP dosyasını indiriyorum.

İndirmiş olduğumuz dosyayı ZIP içerisinden çıkartalım ve klasör isminden versiyon numarasını silerek “C” root dizini altına koyalım.

Gelen dosyalara hızlıca bir göz attığımızda ise:

  • bin: farklı işletim sistemlerine yönelik olarak startup dosyaları bulunmaktadır.
  • config: elasticsearch’ü ve loglamayı configure edebileceğiniz dosyalar bulunmaktadır.
  • lib: elasticsearch tarafından kullanılan JAR formatında kendi dosyaları bulunmaktadır.
  • modules: burada ise elasticsearch’ün fonksiyonalitesini sağlamakla görevli olan modüller, ekstra fonksiyonalite ekleyebilmek için gerekli plugin’ler gibi dosyalar bulunmaktadır.

3) Konfigurasyon

Konfigurasyon işlemlerini daha önce download işlemini gerçekleştirip “C” root dizini altında “elasticsearch” path’i içerisinde bulunan, “config” dosyası altındaki “elasticsearch.yml” dosyasını düzenleyerek gerçekleştireceğiz. Konfigurasyon sırasında gerçekleştirecek olduğumuz işlemler ise sırasıyla, cluster ve node ismini belirlemek olacaktır.

“elasticsearch.yml” dosyasını herhangi bir metin editörü ile açarak aşağıdaki iki değişikliği gerçekleştirelim.

# Use a descriptive name for your cluster:
#
cluster.name: elastic_gokalp_test
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
node.name: gokalp_test_01
#

Konfigurasyon işlemleri şimdilik bu kadar.

4) Başlatmak

Gerekli konfigurasyon işlemlerini gerçekleştirdikten sonra ElasticSearch kurulumuna komut satırı (Command Prompt) üzerinden devam edeceğiz. Kurulumu oldukça basit. Kurulum için komut satırı ekranında aşağıdaki komutu çalıştırmamız yeterlidir.

Not: Kurulumu gerçekleştirmeden önce Windows üzerinde Java’nın kurulu olması gerekmektedir.

C:\elasticsearch\bin\>service install

Yukarıdaki komut satırının çalıştırılmasının ardından “The service ‘elasticsearch-service-x64’ has been installed.” mesajı ile kurulumun gerçekleştiğini anlayabilmekteyiz.

Şimdi sıra geldi servisimizi çalıştırmaya. Bu işlem de aynı kurulumda olduğu kadar basit. Tek yapmamız gereken:

C:\elasticsearch\bin>service start

komutunu çalıştırmaktır.

İşte bu kadar. ElasticSearch servisimiz Windows üzerinde hazır durumdadır. Default olarak konfigurasyon içerisinde “9200” portunu kullanmaktadır.

Oluşturmuş olduğumuz test elastic cluster adresine erişebilmek için “http://localhost:9200″ URL’ini kullanabiliriz.

{
  "name" : "gokalp_test_01",
  "cluster_name" : "elastic_gokalp_test",
  "version" : {
    "number" : "2.3.4",
    "build_hash" : "e455fd0c13dceca8dbbdbb1665d068ae55dabe3f",
    "build_timestamp" : "2016-06-30T11:24:31Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
  },
  "tagline" : "You Know, for Search"
}

Yukarıda gördüğümüz gibi ilgili URI üzerinden response olarak JSON çıktısı dönmektedir ve ilgili cluster üzerindeki elastic bilgilerini vermektedir.

Kurulum işlemlerini tamamen bitirdiğimize göre C# provider’ı ile kullanımlara geçmeden önce dilerseniz, sorgulama aşamalarında işimize çok yarayacak olan Sense plugin’ini kuralım ve inceleyelim.

5) Kibana & Sense & Marvel

ElasticSearch’ün sunmuş olduğu Marvel arayüzü ile tüm node’ların durumlarını görebilir, doküman sayılarını takip edebilir ve hatta tüm request’lerin rate bilgilerine ulaşabiliriz. Birbaşka değişle ElasticSearch’ü monitör edebilmemizi sağlamaktadır. Sense plugin’i ise herhangi bir ElasticSearch query’sini browser üzerinden direkt olarak execute edebilmemizi sağlayan bir araçtır. Bu sayede herhangi bir tool’a ihtiyaç duymadan Sense üzerinden bu tarz sorgulama işlemlerini gerçekleştirebilmekteyiz. Sorgulama işlemlerinin gerçekleştirilebilmesinin yanı sıra Index, Mapping ve Document ekleme/silme gibi işlemleri de yapabilmekteyiz.

Sense kullanabilmek için öncelikle Kibana ‘yı kurmamız gerekmektedir. Kibana data visualization platform’udur. Kurulum işlemi oldukça basittir. Kurulumu gerçekleştirebilmek için buraya tıklayarak, işletim sisteminize uygun Kibana dosyasını indirin. Kurulum adımlarına “Installation Steps” başlığı altından da göz atabilirsiniz. İndirmiş olduğumuz Kibana ZIP arşivini bir dosyaya çıkartalım. Ben bu işlem için ElasticSearch’ü kurarken oluşturmuş olduğumuz “C:\elasticsearch” path’i gibi, “C:\kibana” path’ini oluşturuyorum ve ilgili Kibana dosyalarını buraya koyuyorum.

Not: Eğer ElasticSearch kurulumu sırasında farklı bir port adresi set etti isek, Kibana’nın içerisindeki “config” klasörüne girerek, “config/kibana.yml” i herhangi bir editör ile açıp “elasticsearch.url” değerini ilgili elastic port’una sahip URL ile değiştirelim. Zaten herhangi bir değişim yapmadı isek, default olan port geçerli olacaktır.

Bu işlemlerin ardından artık geriye Kibana’yı çalıştırmak kalıyor. Bunun için ise, “bin” dosyası içerisindeki “kibana.bat” dosyasını çalıştırmamız yeterli olacaktır.

Yukarıda gördüğümüz gibi Kibana şuan hazır durumdadır. Eğer Kibana arayüzünü incelemek isterseniz “http://localhost:5601/app/kibana” URL’ini kullanabilirsiniz. Kibana’nın arayüzünün detaylarına daha sonraki yazılarımda değinmeyi planlıyorum. Şuan Kibana’yı sadece Sense ve Marvel plugin’lerini kullanabilmek için kurulum işlemini gerçekleştirdik. Çünkü Sense bir Kibana plugin’idir.

Artık Kibana üzerine Sense kurulumuna geçebiliriz. Bunun için komut satırından yine yapmamız gereken tek şey, aşağıdaki komutları execute etmektir.

C:\kibana\bin>kibana plugin --install elastic/sense
C:\kibana\bin>kibana

 

Sense kurulumu da başarıyla gerçekleştirdik. Dilerseniz hemen Sense arayüzüne bir göz atalım. Sense arayüzüne erişebilmek için “http://localhost:5601/app/sense” adresini browse etmemiz yeterli olacaktır. Browse ettiğimizde karşımıza çıkacak olan ilk ekran görüntüsü açağıdaki gibi olacaktır.

Bu ekranın sol tarafındaki bölümden JSON syntax’ını ElasticSearch komutlarına uygun kullanarak, dilediğimiz sorgulama işlemlerini yapabilmekteyiz. Geriye gelecek olan response’lar ise yine JSON syntax’ında gelerek, sol kısımda yer alacaktır. ElasticSearch komutlarına buraya tıklayarak erişebilirsiniz. Bu komut referans bölümleri arasından öncelikle Document APIs, Query DSL ve Mapping başlıklarına bir göz atmamız yararlı olacaktır.

Sense plugin’ini tanıdık ve komutlarına nasıl erişebileceğimizi gördük. Dilerseniz şimdi Marvel kurulumu ile devam edelim. Marvel kurulumu da oldukça basittir. Komut satır ekranından kurmuş olduğumuz Kibana path’inin “bin” klasörüne gelerek sırasıyla aşağıdaki komutları çalıştıralım.

C:\kibana\bin>kibana plugin --install elasticsearch/marvel
C:\kibana\bin>kibana

Yukarıdaki komutları çalıştırdığınızda aşağıdaki gibi bir komut ekranı ile işlem sonuçlanacaktır.

Marvel kurulum işlemi de bu kadardır. Marvel arayüzüne erilebilmek için ise “http://localhost:5601/app/marvel” URL’ini kullanabiliriz. Browse ettiğimizde karşımıza aşağıdaki gibi ilk olarak Cluster’larımızı listeleyen bir ekran çıkacaktır.

Makalenin başlangıç kısımlarında hatırlarsak, cluster ismi olarak “elastic_gokalp_test” vermiştim. Bu cluster’a tıklayarak Overview ekranına hızlıca bir geçiş yapabiliriz.

Bu ekrandan genel olarak cluster ile ilgili statüs durumunu, kaç adet node’a sahip olduğunu ve ne kadarı kullanıldığını, ne kadar index olduğunu ve doküman sayılarına kadar olan bilgilere erişebiliriz. Bunların yanısıra, Search ve Latency Rate‘lerine de erişebiliriz. Kısacası büyük verilerle ve yüksek bir yük altında çalışıyorsak, Scale etmeye yönelik her türlü bilgiyi Real-Time olarak monitör edebilmemizi sağlamaktadır. Marvel hakkındaki detaylı bilgilere de buradan erişebilirsiniz.

Makalemiz içerisinde genel olarak ElasticSearch’ü tanıdık, kurulumunu gerçekleştirdik ve ardından Kibana, Sense ve Marvel plugin’lerine bir göz attık. Bir sonraki makale serisinde ise, ElasticSearch’ün C# Provider’ını kullanarak bir mapping ve index oluşturacağız. Bu işlemler ardından da oluşturacak olduğumuz index’e dokümanlarımızı ekleyip basic olarak bir Search işlemini gerçekleştireceğiz.

Şimdilik takipte ve esenle kalın.

Gökhan Gökalp

View Comments

  • marvel kurlumu yaptım ama şole bir hata aldım nedendir ki marvelde data gözükmüyor

    No Marvel Data Found

    No Marvel data is available for the selected time period. This could be because no data is being sent to the cluster or data was not received during that time.

    Try adjusting the time filter controls to a time range where the Marvel data is expected.

    • Merhaba, kurulum işlemlerini yaptıktan sonra marvel'ın, elastic client'ı restart yaptınız mı ve kibana çalışıyor mu?

    • Lisans hatası mı alıyorsunuz? Kurulumları daha önceden denediniz mi? Çünkü Elastic'in loglamasının başlamasından, 30 gün sonra başlar expiration date uyarıları. Development amaçlı ücretsiz zaten, diğer türlü alırsınız lisans hatalarını.

  • ilk defa kurdum, 2 problemim var aslında 1.si marvelde yüklediğimde hata almamın sebebide belki o dur.elasticsearch.yml dosyasındaki Cluster Name değiştirmeme rağmen sizin makaledeki gibi değişmiyor.
    http://localhost:9200/ ilgili urllerden çağırdığımda bu aşağıdaki gibi görünmekte

    {
    "name" : "Glob",
    "cluster_name" : "elasticsearch",
    "version" : {
    "number" : "2.3.5",
    "build_hash" : "90f439ff60a3c0f497f91663701e64ccd01edbb4",
    "build_timestamp" : "2016-07-27T10:36:52Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
    },
    "tagline" : "You Know, for Search"
    }

    2.si de marvel eklentisini kurduğumda lisans a benzer bir hata üretiyor elastic search te ,araştırıyorum yardımcı olursanız sevinirim teşekkürler.

    • Merhaba, şuan bilgisayarımın başında değilim tatil hazırlığındayım fakat: 2.3.5 versiyonu yeni çıktı ben 2.3.4 üzerinde işlemlerimi gerçekleştirmiştim. Öncelikle 2.3.4 versiyonu üzerinden denemelerinizi yapabilir misiniz? Birde elasticsearch config içerisindeki "marvel.agent.enabled" alanı true değerine sahip mi? Vakit buldukça cevaplamaya çalışacağım.

  • versiyonu değiştirmedim kaldırdım tekrar kurdum,elasticsearch.yml dosyasına manuel "#marvel.agent.enabled" yazdığımda sorun çözüldü sanırım server açıkken .yml dosyasında değişiklik yapmıyor neden yazmadı kurulum yaparken anlamadım ama şuan sorun çözüldü teşekkürler,iyi tatille
    Saygılar.

    Uninstall
    elastic dizin --------- bin/plugin remove marvel-agent
    kibana dizininde ---- bin/kibana plugin --remove marvel

    Install
    https://www.elastic.co/downloads/marvel

  • Merhabalar,

    Öncelikle bu güzel paylaşım için çok teşekkürler.
    "Index Patterns

    Warning No default index pattern. You must select or create one to continue."
    Bu hatayı alıyorum. Nasıl giderebilirim?

    İyi Çalışmalar.

    • Merhaba, problem hala devam ediyor mu? Kibana'yı çalıştırma sırasında alıyorsunuz galiba. Elasticsearch tarafında herhangi bir index'e sahip misiniz?

  • Merhaba, ben bir web sitesi yapıyorum ve bir sunucunun durumu hakkındaki bilgileri bu sitede grafikel olarak göstermesini istiyorum.Bunu kibana ile yapabilir miyim?

    • Merhaba.
      Eğer ilgili verilerinizi elasticsearch üzerine feed ederseniz, Kibana ile visualize edebilirsiniz.

  • Merhaba ,

    'service' is not recognized as an internal or external command, operable program or batch file. hatası almaktayım

    • Merhaba ilgili işlemi, elasticsearch'ün bin folder'ı altında yapmalısınız. Bu sebeple ilgili hatayı alıyorsunuz.

  • Üstadım eline emeğine sağlık. 2016 da yazmışsın ve hala işimize yarıyor.
    Yeni kurulum yapacak olan arkadaşlar için hatırlatma yapmak istedim.
    Elastic 6.4.2 kurulumunda config ayarlarını dediğin gibi yaptıklarında bin içinde bulunan .bat dosyasını çalıştırmaları yeterli oluyor.
    Kibana için bin içinde bulunan config dosyasında elasticsearch ile alakalı comment satırını açmaları gerekmekte.
    Kibana yeni kurulumunda sense ve marvel içinde geliyor.

    Teşekkürler,
    Emeğine sağlık

  • Gökhan hocam selam, elastic komutları değişmiş sanırım makalenizi güncellerseniz iyi olur.

    service start yerine ====>>>> elasticsearch-service.bat start

    7.15.2 sürümüyle birlikte hata alan arkadaşlar "service" komutu yerine "elasticsearch-service.bat" kullanması gerekiyor

    • Merhaba teşekkürler yorum için evet, 2016'dan kalma bir makale olduğu için ister istemez güncelliğini yitiriyor...

Recent Posts

Securing the Supply Chain of Containerized Applications to Reduce Security Risks (Policy Enforcement-Automated Governance with OPA Gatekeeper and Ratify) – Part 2

{:tr} Makalenin ilk bölümünde, Software Supply Chain güvenliğinin öneminden ve containerized uygulamaların güvenlik risklerini azaltabilmek…

6 months ago

Securing the Supply Chain of Containerized Applications to Reduce Security Risks (Security Scanning, SBOMs, Signing&Verifying Artifacts) – Part 1

{:tr}Bildiğimiz gibi modern yazılım geliştirme ortamında containerization'ın benimsenmesi, uygulamaların oluşturulma ve dağıtılma şekillerini oldukça değiştirdi.…

8 months ago

Delegating Identity & Access Management to Azure AD B2C and Integrating with .NET

{:tr}Bildiğimiz gibi bir ürün geliştirirken olabildiğince farklı cloud çözümlerinden faydalanmak, harcanacak zaman ve karmaşıklığın yanı…

1 year ago

How to Order Events in Microservices by Using Azure Service Bus (FIFO Consumers)

{:tr}Bazen bazı senaryolar vardır karmaşıklığını veya eksi yanlarını bildiğimiz halde implemente etmekten kaçamadığımız veya implemente…

2 years ago

Providing Atomicity for Eventual Consistency with Outbox Pattern in .NET Microservices

{:tr}Bildiğimiz gibi microservice architecture'ına adapte olmanın bir çok artı noktası olduğu gibi, maalesef getirdiği bazı…

2 years ago

Building Microservices by Using Dapr and .NET with Minimum Effort – 02 (Azure Container Apps)

{:tr}Bir önceki makale serisinde Dapr projesinden ve faydalarından bahsedip, local ortamda self-hosted mode olarak .NET…

2 years ago