ELK (Elasticsearch – Logstash – Kibana) kurulumu
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
input { http { host => "127.0.0.1" port => 8092 # default: 8080 } } output { elasticsearch { hosts =>["localhost:9200"] } stdout { codec => json } } |
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.
1 2 3 4 5 6 7 8 9 10 11 12 |
http//:localhost:8092 adresine aşağıdaki gibi bir json obje belirledim ve logstash’e post ettim. { "site-url" :"www.bilisim.io", "author" : "Mehmet KILIÇ", "sucject" : "Eleasticsearch + Kibana + Logstash", "date" :"03.10.2017" } |
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
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.
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.
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
Hatanızla ilgili ise bilgisayarınızın bölgesel dil ayarlarını ingilizce yaptıgınızda çözülecektir.
İyi Çalışmalar
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.
Bilgiyi paylaştığın için teşekkür ederiz.