Elastic Stack ile Spring Boot Uygulamalarında Log Yönetimi
Günümüzde uygulamalarımızı kodlarken, yazdığımız bir kodun ya da kullanmış olduğumuz bir aracın olması gerektiğinden farklı davranmasını durumunu genelde göz ardı ederiz. Bunun sebebi, her ne olursa olsun, uygulamanın istisnai bir durumda bir hata ya da uyarı vereceği ve sorunu muhakkak log dosyalarında bulunabileceğimizi bilmemizdir. Dolayısıyla geliştiriciler olarak, uygulama geliştirken log dosyalarına oldukça güveniriz. Debug etme, uygulama davranışını gözlemleme; uygulamanın herhangi bir yayın aşamasının önemli parçalarıdır.
Log yönetim uygulamaları, logların incelenmesi süresinde geçirilen büyük zamanı azaltır. Loglara, yönetim uygulamaları sayesinde filtreler ekleme, log dosyalarının içerisinde arama yapabilme gibi özellikler, bizleri loglarla boğuşmaktan kurtarır ve sorunu çözmemiz için zaman kazandırır.
Log Yönetimi Neden Gereklidir ?
- Log yönetimi uygulamamızın davranışını gözlemlememizi sağlar.
- Log yönetim araçları sayesinde, log kayıtlarının yazılım konusunda pek fazla bilgisi olmayan kişiler tarafından da gözlemlenebilmesi sağlanır.
- Logların gerektiği kadar saklanabilmesi ve analiz edilebilmesi için Log yönetim uygulamaları gerekmektedir.
- Log yönetim uygulamaları sistem yöneticileri için, başarısız giriş denemeleri ya da şüpheli işlemlere özel uyarılar tanımlamalarını sağlar.
Hadi başlayalım
Öncelikle GitHub üzerinden projeyi klonlayalım. Yazının geri kalanında bu projeden alıntılar yapacağım.
Veritabanı Yapılandırması
Veritabanını ayağa kaldıran kısım docker-compose.yml içerisindeki db adı servistir. Burada çeşitli ortam değişkenleri kullanılmıştır. Bunları projenin kök dizininde bulunan .env dosyası içerisinden istediğiniz gibi düzenleyebilirsiniz. Ayrıca bu ortam değişkenleri, projenin application.yml dosyası içerisinde de bulunmaktadır, bunlar eğer dışarıdan herhangi bir değişken verilmezse varsayılan değerleri ile çalışmaktadırlar.
Elasticsearch Yapılandırması
Elasticksearch, docker-compose.yml içerisindeki elasticsearch servisi ile ayağa kalkmaktadır. Ayrıca proje kök dizini içeriside bulunan containers/elasticsearch klasöründe, single-node ve elastic-search-cluster adları ile ayağa kalkacağını görmekteyiz.
LogStash Yapılandırması
LogStash, docker-compose.yml içerisindeki logstash servisi ile ayağa kalkmaktadır. Ayrıca proje kök dizini içeriside bulunan containers/logstash klasöründe yapılandırma dosyası bulunmaktadır.
Burada dikkat edilmesi gereken husus, input kısmında bulunan log dosyasının yeridir. Bu dosya yolu daha sonra docker-compose.yml içerisinde uygulamanın application.yml dosyasında bulunan logging.file bilgisi ile volume yapılmıştır.
Output kısmında ise index bilgisi bulunmaktadır. Bu index bilgisi ile bir sonraki adımda kibana üzerinde yapılandırma yapacağız.
Kibana Yapılandırması
Kibana, docker-compose.yml içerisindeki kibana servisi ile ayağa kalkmaktadır. Ayrıca proje kök dizini içeriside bulunan containers/kibana klasöründe yapılandırma dosyası bulunmaktadır. Tüm işlemler bittikten sonra http://localhost:5601 adresine giderek, LogStash ‘in output yapılandırmasında belirttiğimiz index adı ile yeni bir index oluşturarak loglarımızı gözlemleyebiliriz.