ELK Stack — Uygulama Loglarını Merkezilestirme ve Verileri Gorsellestirme Bolum-1: Filebeat

Ibrahim Halil Koyuncu
4 min readJun 5, 2021

--

Merhaba, bu yazı dizisinde uygulama loglarını nasıl teker teker toplanıp merkezileştirerek Elasticsearch üzerinde tutmayı ve Kibana üzerinden nasıl görselleştirileceğini(visualize), aslında bir ELK(Elasticsearch-Logstash-Kibana) pipeline’nın nasıl konfigure edilip kurulacağını anlatmaya çalışacağım.

İlk olarak logların nasıl toplanacağından(log collecting) bahsetmeye başlayalım. Bu iş için yine Elastic ürünlerinden birisi olan Filebeat kullanacağız. Filebeat ile herhangi bir dizinde bulunan log dosyalarını dinleyerek,bu log dosyalarına herhangi bir log akışı olduğunda, ilgili logları doğrudan Elasticsearch’e ya da Logstash’e göndermektedir(log shipping).Filebeat’den bahsetmişken Elastic’in buna benzer diğer ürünlerindende kısaca bahsetmek istiyorum.

  • Metricbeat : Sistem ve servislerin metric datalarını toplayıp göndermek için kullanılan üründür. Metricbeat ile CPU, bellek(memory) ve disk kullanım istatiklerini kolayca toplayabilirsiniz.
  • Packetbeat : Ağ trafiği ile ilgili dataları toplayarak Elasticsearch veya Logstasha gönderen bir ağ analizörüdür.
  • Heartbeat: Sistemlerin kullanılabilirliğini test etmek için verilen URL listesine göre servisleri yoklayıp yanıt süresi gibi (response time) bilgileri toplayıp analiz etmek için kullanılır.
  • Winlogbeat: Windows işletim sistemi üzerindeki olay(event) loglarını toplamak için kullanılır.
  • Auditbeat: Linux dağıtımları üzerindeki olayları(event) toplayıp analiz etmek için kullanılır.
  • Functionbeat: Serverless mimarilerde veri toplamak için kullanılır.

Yukarıda bahsettiğim gibi beat ürünleri her biri kendi alanında gerekli verileri toplayıp analiz etmek için, monitoring açısından bizler için önemli kolaylıklar sağlamaktadır. İlerleyen yazı serilerinde bunlarında kendi özelinde nasıl konfigüre edilip kullanılacağından bahsedeceğim. Şuan konumuz uygulama logları toplamak olduğundan Filebeat konfigürasyonu üzerinden devam edelim.

Filebeat’i buradan kendi işletim sisteminize göre seçerek ilgili paketi indirebilirsiniz. Yine Filebeat’i docker container veya Kubernetes üzerinde de çalıştırabilirsiniz. Docker ve Kubernetes üzerinde çalıştırma ile ilgili detayları ECK(Elastic Cloud on Kubernetes) başlıklı yazı dizisinde bahsedeceğim. İndirme işlemi tamamlandıktan sonra gerekli konfigürasyonu filebeat.yml dosyası üzerinde yapacağız.

Yukarıda bulunan örnek konfigürasyon dosyasındaki parametreleri teker teker incelemeye başlayalım.

  • “filebeat.inputs” : Burada Filebeat’in ne tür bir inputu dinleyeceğini belirtiyoruz. Bu kısım array olarak tanımlıdır yani birden fazla inputumuz olabilir. Her bir input “- type” parametresi ile başlar. Type değeri senaryomuza göre birçok çeşitte olabilir. Örneğin log, Kafka, HTTP JSON, AWS S3 gibi. Buradaki senaryomuz uygulama logları olduğundan “log” olarak setliyoruz. “type” parametresi altına Filebeat’in nereyi dinleyeceğini ve bazı kısıtlamaları(restrictions) ekleyebiliriz.
  • enabled” : Bu parametrenin değeri default olarak “false” setlidir. İlgili “type” çeşidini aktif etmek için değerini “true” olarak setlememiz gerekmektedir.
  • paths”: Bu parametrede Filebeat’in hangi dizini(directory) veya hangi dosyaları(files) takip edeceğini belirtiyoruz. Yukarıdaki örnekte “/var/log” dizini altındaki tüm “.log” uzantılı dosyaları takip etmesini sağlıyoruz. Buraya birden fazla path verebiliriz. Path’leri “-” ile alt alta ekleyebiliriz.
  • “exclude_lines” : Bu parametrede ilgili log dosyalarındaki verilen regular expression’a göre hangi log satırlarının ignore etmesi gerektiğini Filebeat’e belirtiyoruz. Yukarıdaki örnekte içerisinde “DBG” geçen log satırlarını(lines) ignore et ve bir sonraki satırdan devam et diyoruz. Birden fazla(multiple) regular expression tanımlayabiliriz ve herbirini “,” ile ayırmalıyız.
  • “include_lines” : Bu parametrede ise ilgili log dosyalarındaki log satırlarından verilen regular expressiona göre eşleşen log satırları toplanacaktır. Yukarıdaki örnekte ise içerisinde “ERR” veya “WARN” bulunan log satırları toplanacaktır. Birden fazla(multiple) regular expression tanımlayabiliriz ve herbirini “,” ile ayırmalıyız.
  • “exclude_files” : Bu parametrede ise yine verilen regular expressiona göre hangi log dosyalarının ignore edilmesi gerektiğini belirtiyoruz. Yukarıdaki örnekte “gz” uzantılı dosyaları takip etmemesini(trace) Filebeat’e bildiriyoruz. Birden fazla(multiple) regular expression tanımlayabiliriz ve herbirini “,” ile ayırmalıyız
  • “multiline” : Filebeat normal senaryoda okuma işlemini satır satır yapmaktadır. Ama bazen farklı şekilde gereksinimlerimiz olabilir. Örneğin uygulama hata durumunda loglara java-stack trace’i bastığında bu birden fazla satırda yer alacaktır ve biz bunu tek bir işlemmiş gibi Filebeat’in görmesini isteyebiliriz. Bu yüzden bu tür senaryolarda multiline parametresini kullanmaya ihtiyacımız olacaktır. Yine verilen bir regular expression’a göre çalışmaktadır. Yukarıdaki örnekte Filebeat “[“ ifadesi ile başlayan tüm log satırlarını alıp birleştirerek tek bir ifade olarak toplayacaktır. Eğer “multiline.negate” parametresinin değeri “true” olsaydı “[“ ifadesi ile başlamayan bütün log satırlarını birleştirerek tek bir ifade olarak toplayacaktır. Örneğin aşağıda bulunan log örneğinde bütün log satırlarını birleştirerek bütün bir şekilde Elasticsearch’e ya da Logstash’e gönderecektir.
  • “output.elasticsearch” : Bu parametrede Filebeat’in topladığı log inputları Elasticsearch’e göndermesini istiyorsak bu parametre uncommented olmalıdır. Bu parametre altında ise Elasticsearch ile alakalı bilgileri setliyoruz. Örneğin Elasticsearch host bilgileri (elasticsearch ip port) ve security bilgileri var ise (username, password veya sertifika gibi) bunlarıda yine bu parametre altına setliyoruz.
  • “output.logstash” : Bu parametrede log inputlarımızı işlemek için Logstash’e göndermek istiyorsak bu parametrenin uncommented olması gerekiyor. Yine bu parametre altına Logstash credential’larını setlememiz gerekiyor.
  • “processors” : Bu parametrede ise log inputlarımızı Elasticsearch veya Logstash’e gönderirken, ilgili log satırı hangi dosyadan(file) alındığı, ilgili host(machine name , ip adres) ve dizin bilgileri(file directory) gibi bilgileri göndermemizi sağlıyor. Böylelikle Elasticsearch üzerinde sorgu yapmak çok daha kolay hale geliyor. (hangi log hangi uygulamaya ait, log hangi sunucuda çalışan uygulamaya ait gibi bilgiler) Yukarıda bahsettiğim bilgiler için add_host_metadata processor eklenmesi yeterlidir. Yine farklı bir senaryodan bahsetmek istiyorsak örneğin kubernetes üzerinde çalışan bir uygulama log’u için, add_kubernetes_metadata processor’ını kullanarak ilgili namespace, pod ve container bilgilerini göndererek yine log analizini sağlıklı bir şekilde yapabiliyoruz.

Filebeat’i windows işletim sisteminde doğrudan filebeat.bat üzerinden, linux dağıtımlarda ise “FILEBEAT_HOME” dizini altında “./filebeat -e” komutu ile gerekli konfigürasyonu yaptıktan sonra çalıştırabiliriz.

Bir sonraki yazıda ise Filebeat üzerinden gönderilen log satırlarının Logstash üzerinde nasıl işlendiğini, Logstash konfigürasyonunun nasıl yapıldığını, grok pattern vs. gibi konulardan bahsedeceğim. akipte kalınız :)

--

--

Ibrahim Halil Koyuncu
Ibrahim Halil Koyuncu

No responses yet