Showing posts with label ElasticSearch. Show all posts
Showing posts with label ElasticSearch. Show all posts

ElasticSearch Jest Client kullanımı ve LogSearch Web Projesi

ElasticSearch'de JSF uygulamalarımızda nasıl sorgu yapıp sonuçları bir DataTable'da göstereceğimiz bir uygulama yaptım.

ES'den sorgu yapabilmek için RestApi'i kullanan JEST kütüphanesini kullandım. Kodun en önemli kısmının görüntüsünüde paylaştım. Ekran görüntüsünde görüleceği üzere ES query'isini direk bu string'e verdiğimizde bize sonucu dönecektir. Gerisi Model Class'ınız için datayı toparlamakta.

Hatırlatamakta fayda var JEST getHits() metodu geri direk ModelClass'ınızın dönüşünü de yapabilmekte. Yani Map alıp get'lere girmek zorunda değilsiniz. Fakat ben her yaptığımda Null data geldi o sebeple henüz beceremedim o kısmını.

Depo: https://github.com/egcodes/logSearchOnElasticSeach




ElasticSearch - Kibana ile Data Visualization

Bir önceki blog yazısında bir Oracle tablonusu ES makinanıza nasıl indexleyeceğinizi açıklamıştım. Bu yazıda da Kibana kullanarak bu datayı nasıl görselleştirip raporlama ve analiz yapacağınızı anlatacağım.


Kurulum

  • https://www.elastic.co/downloads/kibana
  • Kurulumu aslında yine bir kurulumun olmaması sadece paketi indirip çalıştırdığınızda eğer ES'nin default port'unu değiştirmediyseniz aşağıdaki adresden çalışmaya başlayacaktır. Komut satırında da yazdığı gibi localinizde şu adrese bağlandığınızda karşınıza kibana'nın arayüzü gelecektir.
  • http://localhost:5601

Kibana ES Index Table Ayarı

Arayüzde sağ taraftaki resimde görüldüğü gibi Management'a girdiğinizde index'lediğiniz tablolar gelmektedir. Şu ana kadar bir şey indexlemediğinizden burası boş olacaktır. Öncelikle Add New'e basarak index'lediğiniz indexName'i buraya girin. Böylece Kibana DataSet'ini kullanabilecektir. (IndexName ES'de tablo index'lerken kullandığınız ismin aynısı)
















Discover sekmesine bastığınızda yukarıdaki görüntüdeki gibi datanın görünmesi gerekiyor. Sağ üst köşeden tarih aralığını genişleterek datasının bir kısmını yada tamamını görebilirsiniz. Burası önemli bir nokta çünkü Date column'una göre datayı göstermektedir. Eğer datanızda bir ay öncesinin date'leri mevcutsa sadece burayı da Last 30 day seçmelisiniz ki datasını gözüksün.

Kibana ile Görselleştirme

Visualize sekmesine bastığınızda size yapabileceğiniz tüm grafikleri göstermektedir. Ben örnek olması açısından verilen tarih aralığı için günlük kaç adet row'umuz var onu gösteren bir grafik oluşturacağım. Bunun için örnek olarak AreaChart'ı seçtim.

Sol tafafta Y-Axis ve hemen altında X-Axis bölümleri bulunmakta.
  • Y-Axis için default Count geldiği için buraya karışmıyorum. Bunun dışında Average, Sum, Min, Max.. gibi 10'a yakın daha aggregate fonksiyonları da bulunamakta.
  • X-Axis için date aralığı oluşturmamız gerekiyor. Benim index tablolm için günlük olarak Date column'u olan InsertDate'i seçtim.
Ve üst tarafta ok işaretine bastığınızda ekrandaki gibi grafiğim oluştu. Bu oluşturduğunuz grafikleri sonradan Dashboard oluşturuken kulllanacaksınız o yüzden yukarı sağ köşeden Save ile bir isim vererek kaydedin.
























Kibana Dashboard

Dashboard oluşturduğunuz tüm grafikleri yerleştirip kullanacabileceğiniz bir arayüz. Sol taraftaki sekmelerden Dashboard'u seçtikten sonra sağ üst köşeden Add butonuna tıkladığnızda daha önce Save ettiğiniz chart'ların isimlerini göreceksiniz bunlara tıkladığınızda otomatikman Dashboard'a 
eklenecektir. Daha sonra büyüklük küçüklük ve yerleştirme işlemleri için ayarlamalar kalmaktadır. Sonradan bu Dashboard'u da yine yukarıdan Save ile kaydedip başka bir Dashboard'da yapabilrsiniz.

Netice olarak benim CleanDuplicateLogs index tablom için Dashboard'um şu şekilde gözüküyor.



ElasticSearch 101

Linux sistemleri ve ElasticSearch-5.0.1 version'una göre anlatılmıştır. Bu kılavuz dökümanda hızlıca ElasticSearch kurulumu, WebGui ayarlama ve LogStash ile bir Oracle tablosunu indexleyip sürekli senkronize tutulması anlatılmıştır.


ElasticSearch indirme, config ayarlama ve çalıştırma

Aşağıdaki adresden .tar.gz uzantılı olan indirilir.
  • https://www.elastic.co/downloads/elasticsearch

Tar.gz açıldıktan sonra elasticsearch/config/elasticsearch.yml içinde
  • cluster.name ve node.name kısımlarının yorumları kaldırılıp cluster ve node'nuza bir isim verilir. Ek olarak ElasticSearch için yazılmış web uygulamalarının da çalışmasını istiyorsanız aşağıdaki config'lerde eklenir
    • http.cors.allow-origin: "*"
    • http.cors.enabled: true 

$ /elasticsearch/bin/elasticsearch altındaki çalıştırılabilir program tetiklenir ve aşağıdaki gibi bir çıktı ile karşılaşmanız gerekir eğer tüm ayarlarınız doğruysa


ElasticSearch Web Gui

Şu adresden plugin indirilip bir yere açılır ve index.html açılır. Tıklandığında aşağıdaki sayfa gelecek ve connect'e bastığımızda yukarıda başlattığımız Elasticsearch'ün default port'una bağlanmış olacak.
  • https://mobz.github.io/elasticsearch-head/









LogStash ile OracleDB'den Data Aktarma

ElasticSearch'ün sitesinden logstash indirilip bir yere açılır. 
  • logstash/bin/logstash -f my.conf komutu ile aşağıdaki config verilir ve elastiscsearch'e index'leme başlar. Bu conf, OracleDB'den data indexlemek için kullanılır. Farklı yerlerden data toplamak için ilgili conf örneklerini internetten bulabilirsiniz.
  • Bu conf'un özelliği verilen date için en son timestamp /tmp/logstash-oradb.lastrun altında verilen file'da tutulur böylece tablo sürekli senkron olur ve yeni gelen date'ler sürekli index'lenir.
my.conf içeriği
input {
    jdbc {
        jdbc_validate_connection => true
        jdbc_connection_string => "jdbc:oracle:thin:@10.x.x.80:1522/DB"
        jdbc_user => "username"
        jdbc_password => "password"
        jdbc_driver_library => "/home/x/x/x/ojdbc7.jar"
        jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
        statement => "SELECT * FROM TABLE WHERE DATA_DATE >= :sql_last_value"
        last_run_metadata_path => "/tmp/logstash-oradb.lastrun"
        record_last_run => true
        schedule => "* * * * *"
       }
}
filter {
    
}
output {
    elasticsearch {
index => "myIndexName"
}
}