ELK STACK NEDIR?
ELK Stack basit olarak Elasticsearch + Logstash ve Kibana araçlarının baş harfleri alınarak ortaya çıkarılmış bir isimdir.
Genel olarak herkes Kibana'yı bir loglama aracı olarak görsede Elastic tarafında işler tamamıyla farklıdır. Bu üç tool bir birbirine bağımlıdır ve serverlarınızda üçü de koşmalıdır.
Elasticsearch, inputları ve logları saklamamızda bize yardımcı olacak, Lucene arama motorunu temel alan bir NoSQL veritabanıdır.
![logstash-xelcode logstash-xelcode](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1nXv3hVhX-eUd6sIp_Zqv2ET_9H69SqcAQwzwpSV9NAsz5GvvHhtlbzSvD4b9gYH9kNuxRuzC-RurAoxVm6rfD8cVvLuv0vuZfw2xQ_2aUKV1ij3GAdoXr23D0UlsSfNIBxVf5OJnONs6/w400-h158-rw/image.png)
Logstash, gelen input ve logları kabul edip, çeşitli kaynaklara dağıtan bir işlem hattı aracıdır. Loglarımızı uygulamamızdan alıp uygun formata çevirdikten sonra elasticsearch tarafına aktarımından sorumlu olacak.
Kibana ise, kullanıcı tarafına en yakın yerde durup, log verilerini elasticsearch'ten alıp görselleştirmekten sorumlu olacak. Aynı zamanda KQL denilen bir arama yapısı ile loglarımıza hızlıca erişmemizi sağlayacak.
Çalışma mimarisini bir görselle kolayca anlayabiliriz:
Spring Boot ve ELK Stack Mimarisi
Mimarimiz görseldeki gibi olacaktır.
- Spring Boot frameworkünde kodladığımız microservicelerimiz .log dosyaları üretecekler.
- Bu .log dosyalarını logstash üzerine alıp elasticsearch'e aktaracak.
- Elasticsearch aldığı inputları kaydettikten sonra Kibana'ya gönderecek.
- Kibana elastichsearch üzerinden okuduğu datalar için bize görsel bir arayüz sunacak.
Öncelikle ben demoyu Windows için anlatacağım. Aşağıdaki butonlardan üç .zip dosyasını da indirelim.
İndirdikten sonra hepsini .zipten çıkarıp tek klasörde toplamakta fayda var. Şimdi yukarıdaki resimde gördüğümüz mimariyi yavaş yavaş oluşturalım.
Öncelikle mimarimizin sağ tarafını yani Elasticsearch ile Kibana arasındaki bağlantıyı kuralım. Elasticsearch'ün bütün yapının merkezinde yer aldığını belirtmiştik. İlk önce Elasticsearch'ü ayağa kaldıralım. Terminal ekranı açıp:
\elasticsearch\bin{codeBox}konumuna ilerleyip elasticsearch.bat dosyasını çalıştıralım.
Teyit etmek için:
https://localhost:9200{codeBox}adresine ilerlediğimizde JSON formatlı bir output görüyor olmamız gerekli.
Elasticsearch ayağa kalktığına göre şimdi sıra Kibana'da. Kibana'nın ayağa kalkması ve Elasticsearch ile konuşması için küçük bir konfigürasyon gerekli.
Kibana klasörünün içinde /config/kibana.yml dosyasını bir tane text editör ile açalım. 28. satırdaki:
Kibana klasörünün içinde /config/kibana.yml dosyasını bir tane text editör ile açalım. 28. satırdaki:
elasticsearch.hosts{codeBox}açıklama satırının başındaki # işaretini silerek aktif ediyoruz. Böylelikle Kibana hostu 9200 portu üzerinden dinleyecek.
Şimdi Kibana'yı da ayağa kaldırmak için terminali:
/kibana/bin{codeBox}konumuna yönlendirip kibana.bat dosyasını aynı elasticsearch'te olduğu gibi çalıştırıyoruz. Kibana ayağa kalktığında da:
localhost:5601{codeBox}portundan ayağa kalktığına dair bilgiyi terminal ekranından okuyabiliyor olmamız gerekli.
localhost:5601 adresine ilerlediğimizde bizleri Kibana'nın arayüzü karşılayacak.
Mimarimizde sağ tarafın inşasını bitirdiğimize göre sol tarafa yönelebiliriz. Şimdilik Kibana ve elasticsearch'ü kendi hâlinde bırakacağız.
Elimizde kalan işlere bakacak olursak;
- Microservisimizin bir .log dosyası üretmesi gerekli.
- Bu .log dosyasını logstash içeri alıp işlemeli.
- İşlenen bu loglar elasticsearch'e kaydedilmeli
İlk işimiz olan bir microservis mimarisinde bir uygulama yazalım. Microservice denildiği zaman akıllara bir çok servisçik geliyor olsa da ben işleri özetlemesi bakımından küçük bir servis yazdım.
Servis kısaca bir kullanıcının id ve ismini geriye yönen, kişiyi id ile aradığımızda varsa bulunan kişiyi geriye dönen ve bir info logu yazan, yok ise null dönüp bir error logu yazan bir servis olacak. Servisi Github repository'mde paylaştım. Dileyenler için link vereceğim. Projemizin bir log oluşturması için application.properties dosyasının uzantısını application.yml olarak değiştirmemiz gerekli.
Sadece logging: file: name:{codeBox} alanını doldurmak yeterli olacaktır. Daha sonra LOGGER ile oluşturduğumuz loglar name: alanında belirttiğimiz .log dosyasına loglanacaklar. Benim örneğimde solvia.log dosyası oluşacak ve logları orada görebileceğim.
Uygulamama
/getUser/id{codeBox}üzerinde bir çağrıda bulunduğumda geriye bir User dönecek.
User'ı bulursa user'i geriye dönüp aynı zamanda bir log düşecek, aynı şekilde bulamadığında da null dönüp bir log düşecek. Haydi bir kaç test yapıp uygulamanın .log üretip üretmediğine bakalım.
Öncelikle uygulamayı indirmek veya localinize klonlamak için aşağıdaki Github simgesine tıklayabilirisiniz.
Uygulamam application.yml dosyasında da belirttiğim üzere 9898 portu üzerinden tetiklenecektir. Çok uzatmamak adına uygulamayı ayağa kaldırdıktan sonra bir var olan bir de olmayan bir User'a çağrı yapacağım, var olan User:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjodJh5nsboRLFA9E3_VmqIfXqemr5XY_fB0VN4U2nt-ayzLs9hyN7IMzE69rx8Cynk3XwQ6DEpMdrbgDIqqf4wwMTZWP4xKaAA18Nw6kMsQwr2oicTdI0Bx_pn803WC1bQdWQMd6sY5xre/w400-h70-rw/image.png)
Dosyanın belirttiğimiz yolda oluştuğunu ve içerisinin de başarıyla dolduğunu teyit ettikten sonra geriye kalan iki şey dosyayı Logstash'in içeriye alıp işlemesini sağlamak ve bu işlenen dosyanın elasticsearch'ten Kibana arayüzüne akmasını sağlamak. Bunu yapmadan önce şimdilik .log dosyamızın içerisini boşaltabiliriz. Haydi hep birlikte mimarimizin kalan tarafını tamamlamaya.
Eğer logstash'i indirdiğimiz sayfaya bakarsak alt taraflarda bir yükleme talimatı göreceğiz. Bu talimatta da belirttiği üzere bir .conf uzantılı konfigürasyon dosyası oluşturmamız gerekli.
Logstash .log dosyasını nereden okuyacak (path - adres bilgisi) ve elasticsearch şu anda nerede koşuyor? (URL)
Belli bir formatı olan logstash.conf dosyasını ben aşağıdaki gibi oluşturdum ve bu dosyayı Logstash'in olduğu dizin de /bin klasörüne yapıştırdım.
input {
file {
path => "C:/ELK-Stack/logging/solvia.log"
start_position => "beginning"
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["localhost:9200"]
}
}
Dosyamızı kaydedip /bin yoluna yapıştırdıktan sonra bin klasörünün olduğu yolu kopyalayıp bilgisayarımızdaki Ortam Değişkenleri'nden PATH içine yapıştırmamız gerekli. Bunun için Bu Bilgisayara sağ tıklayıp Özellikler -> Gelişmis Sistem Ayarları -> Ortam Değişkenleri yoluna ilerleyelim. Altta sistem değişkenleri kısmında Path'e iki kez tıklayıp kopyaladığımız logstash'in yolunu yapıştıralım.
Logların Logstash ekranına başarıyla aktığını da teyit ettikten sonra son adımımız olan Kibana ayarlarını yapalım.
Kibana'ya localhost:5601 adresinden erişebildiğimizi söylemiştik. Şimdi oraya tekrardan uğruyoruz ve sol üst köşedeki üç çizgiden hamburger menüyü açıyoruz. En alttaki Management sekmesinden Stack Management seçeneğine tıklıyoruz.
Daha sonra açılan pencerede alt kısımda logstash ile başlayan bir dosya ismi göreceksiniz arama kısmına sadece log yazıp Next seçeneğine tıklayınız.
Sonraki pencerede açılan timefilter seçeneğini şimdilik dont want diye onaylayabilirsiniz. Ayarları doğru bir hiyerarşi ile yaptıysanız çıktının şu şekilde olması gerekli:
Şimdi loglarımızı okuma sırası. Yine Kibana açılır penceresinden Discover'a ilerleyelim. Tebrikler loglarınızı başarıyla görüp yöneteceğiniz arayüz karşınızda.
Bu süreçte bir hata ile karşılaşırsanız şayet lütfen yorum atıp, paylaşmaktan çekinmeyiniz. Seve seve yardımcı olacağımdan hiç şüpheniz olmasın.
0 Comments
Konuyla ilgili yorum giriniz.