ELK (Elasticsearch – Logstash – Kibana) kurulumu

6 14,315

Merhaba arkadaşlar,

Bu yazımda literatür’e ELKStack olarak geçen (Elasticsearch + Kibana + Logstash) ‘dan bahsedeceğim. Bu üçlüyü daha çok uygulamalarımızın loglarını daha hızlı okumak ve monitör edebilmek için kullanırız. Son zamanlarda elasticsearch  kısa süreli raporlarda(günlük , haftalık) kullanılıyor olsada çoğunluk ilk bahsettiğim gibi kullanır.

Elastic Search:  Lucene ve  document tabanlı  nosql bir veritabanıdır

Logstash:  Uygulamalarımızın çıktılarını elasticsearch ile konuşmasını sağlar.
Birçok farklı kanallardan  konuşabilme yeteneği vardır. (Rest service , tcp , udp vs) . Açık kaynak kodlu bir veri toplama motoru diyebiliriz.

Kibana: Elasticsearch’e kaydedilen verileri monitor edebileceğimiz açık kaynak kodlu bir web uygulamasıdır.

Şimdi gelelim bunları kurmaya aslında kurulumları basittir sadece bunlar arasındaki iletişim nasıl ve uygulama olarak logstash üzerinden elasticsearch’e bir data bastığımızda kibanada nasıl görebiliriz buna değineceğim.

İlk olarak indireceğimiz tooların linklerini paylaşayım sizlere (eklenecek), makaleyi yazdığım işletim sistemi windows buna göre anlatacağım. İndirdikten sonra dosyaları “C:/test-elk ” dizinine çıkarttım.

Sırasyıla çalıştıralım , ilk olarak komut satırında  “C:test-elkelasticsearch-5.2.2bin”  dizinine gelelim ve bin klasörünün içindeki elasticsearch.bat dosyayısını çalıştıralım.

Çalıştırdıktan sonra default olarak elasticsearch 9200 portunda http isteklere karşılık verir 9300 portu ise tcp ile haberleşmek isteyenler içindir.

Eğer yukardaki gibi bir çıktı aldıysanız http://localhost:9200 linkine gittiğinizde aşağıdaki gibi bir çıktı almanız lazım.

Buradaki default konfigurasyonları “C:test-elkelasticsearch-5.2.2config” dizininde elasticsearch.yml dosyasından düzeltebilirsiniz.

Şimdi ise kibana’yı çalıştıralım. Aynı şekilde “C:test-elkkibana-5.2.2-windows-x86bin” dizinindeki kibana.bat dosyasını komut satırında çalıştıralım.

Yukardaki çıktıyı aldıysanız uygulama ayağa kalkmıştır , web uyglamasının default portu 5601 olarak atanır , ve http://localhost:5601 linkine gittiğinizde aşağıdaki ekran gelecektir.

Kibana konfigurasyonlarını değiştirmek için “C:test-elkkibana-5.2.2-windows-x86config” dizininin altındaki kibana.yml dosyasından yapabilirsiniz .Şimdi yukardaki ekranda birşey create etmemizi istiyor . Create etmedeki kastı orada aslında belirlediğimiz bir field’ı indexlemektir. Biz testimizi tüm gönderdiğimiz alanları zaman bazında indexleyerek yapacağız. O yüzden @timestamp field’ını seçerek create ediyoruz.

 

Kibana ekranına logstash kurduktan sonra tekrar döneceğiz.

Logstash için “C:test-elklogstash-5.2.2bin” dizinine girip ilk önce logstash.conf dosyasında bazı ayarlamalarımızı yapalım.  Yazımın başındada bahsettiğim gibi logstash birden fazla kanaldan haberleşebilir. Biz rest servis ile belirlediğimiz model objemizi gönderip zaman bazlı indexlemesini sağlayacağız.

Bunun için logstash.conf dosyamız aşağıdaki gibi olacaktır.

Yukardaki ayarlarda  8092 portundan bana gelen istekteki objeyi  , elasticsearch hostu olan localhost:9200 ‘a json olarak gönder.

Logstash.conf dosyasını yukardaki gibi kayıt ettikden sonra aynı dizinde komut satırına gelip

logstash –f logstash.conf  komutunu çalıştırarak logstash’imizide ayağa kaldırıyoruz.

Bu şekilde bir çıktı aldıysanız doğru şekilde ayağa kalkmış demektir.

Şimdi kibana ekranına dönelim.en son zaman bazlı tüm alanlarımızı indexle demiştik.

Ekranda discovekmesine tıkladığımızda suan datanın olmadığını görüyoruz.

Artık model onjemizi rest servis ile logstash üzerinden elasticsearch’e gönderlim. Bunun için ben postman kullanıyorum.

Response olarak sadece “ok”  döner logstash.

Ve bakalım yukardaki gönderdiğimiz kibana ekranına düşmüşmü , birden çok data yolladım ve ekana bakalım.

Alanlarımızın indexlendiğini görüyoruz . en baştada dediğimiz gibi kibana uygulamalarımızı monitör  etmemiz için yapılan açık kaynak kodlu bir web uygulaması olduğu için bir tane de görsel olarak hoşumuza gidecek bir gönderdiğimiz dataları görsel bir şekilde bize sunacak chart örneği yapıp yazımı sonlandıracağım.

Ekrandaki Visualize  sekmesine tıklayıp oradan Pie chart butonuna tıklayalım. Sonrasında en başta zamanbazlı olusturduğumuz logstash* index’imizi tıklayalım.Sonrasında aşağıdaki gibi bir ekran gelecektir.

Bu ekranda Split Slice  seçilerek gelen  (Aggregation) combobox’tan  Temrs   seçiyoruz ve field seçmemiz bekleniyor. Oradan ilk author.keyword  seçiyoruz ,  Sonrasında Add sub-buckets   aynı işlemleri diğer fieldlarımız için yapıyoruz.  Yukarıdan Run tuşuna bastığımızda çıktımızı görebilirsiniz bu yaptıgımız chart’ı sağ üsteki save butonuna basarak kaydedelim.

Bilisim.io chart olarak kaydettim . Ekrandan Dashboard’a tıklayarak .  

Add  diyerek oluşturduğumuz Bilisim.io Chart ‘ı seçerek  yaptığımız charta ekran olarak kaydedip kalıcı yapabiliriz.

En son olarak çıktımız şu şekilde olacaktır.

Bundan sonraki yazımda java ile direk logstash ve direk elasticsearch nasıl konuşturulur ona değineceğim.

Umarım yararlı olmuştur

İyi Çalışmalar

6 Comments
  1. Emincan Şahin says

    Merhabalar,
    Güzel ve açıklayıcı bir makale olmuş teşekkürler.Logstash kısmında bir problem yaşıyorum .conf uzatılı dosyayı komut isteminde dediğiniz gibi çalıştırdığımda ” [ERROR] 2018-08-07 11:24:58.929 [main] Logstash – java.lang.IllegalStateException: Logstash stopped processing because of an error: (NameError) missing class name (`org.apache.http.─▒mpl.client.StandardHttpRequestRetryHandler’) ”
    bu şekilde bir hata almaktayım yardımcı olursanız sevinirim.
    Teşekkürler.

    1. Emincan Şahin says

      Kusura bakmayın bir sorum daha olacaktı.Benım günlük kayıtlarım bir klasörde xml dosyası olarak tutuluyor.Bu kayıtları elasticsearche indexleyip kibanada görüntülemek istiyorum bu konudada yardımcı olursanız sevinirim.
      Teşekkürler.

      1. Mehmet Kılıç says

        Merhaba ,

        Bunun bir kaç yöntemi var.
        – Bir uygulama yaparak xml datasını okuduktan sonra elasticsearch tarafına post edebilirsin.
        – Bir diğer yöntem ise logstash tarafında filter verirsin logstash aldığı mesajı parse eder ve elasticsearch tarafına atar.
        https://www.elastic.co/guide/en/logstash/current/plugins-filters-xml.html

        İyi Çalışmalar

    2. Mehmet Kılıç says

      Hatanızla ilgili ise bilgisayarınızın bölgesel dil ayarlarını ingilizce yaptıgınızda çözülecektir.

      İyi Çalışmalar

    3. Turan Kılıç says

      Eğer kullanmış olduğunuz dağıtım CentOS 8 ise aşağıdaki dosya yolundan:

      /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/manticore-0.8.0-java/lib/manticore/client.rb

      Şu satırı değiştirmelisiniz:

      “OrgApacheHttpImplClient” ==> “OrgApacheHttp.impl.client”

      Not: Konu 4 yıl önce açılmış fakat günümüzde bu hata ile karşı karşıya kaldığımdan paylaşayım dedim.

      1. Kubilay Kulaoğlu says

        Bilgiyi paylaştığın için teşekkür ederiz.

Email adresiniz yayınlanmayacaktır.