ELK Stack ile Kurumsal Log Yönetimi: Detaylı Mimari ve Uygulama

 · 

ELK Stack ile Kurumsal Log Yönetimi: Detaylı Mimari ve Uygulama

ELK Stack ile Merkezi Log Yönetimini Kurmak: Üretim Ortamları İçin Detaylı Yaklaşım

Modern dağıtık sistem mimarilerinde, mikroservisler, konteynerler ve sunucusuz fonksiyonlar tarafından üretilen log verilerinin etkin bir şekilde toplanması, işlenmesi ve analiz edilmesi, operasyonel devamlılık için temel bir gerekliliktir. Geleneksel yaklaşımlar, log verisi hacmi ve çeşitliliği arttıkça yetersiz kalmaktadır. Bu bağlamda, Elastic (ELK) Stack, kapsamlı ve ölçeklenebilir bir merkezi log yönetim çözümü sunar.

ELK Stack Bileşenlerinin Fonksiyonel Detayları

ELK Stack, Elasticsearch, Logstash ve Kibana olmak üzere üç ana bileşenden oluşur. Bu entegre yapı, log verisi yaşam döngüsünün her aşamasını yönetmek için tasarlanmıştır.

Elasticsearch: Veri Depolama ve Analiz Motoru

Elasticsearch, Apache Lucene üzerine inşa edilmiş, dağıtılmış, RESTful bir arama ve analiz motorudur. Log verileri için yüksek performanslı depolama ve sorgulama yetenekleri sağlar. Temel özellikleri şunlardır:

  • Indexleme: Log verileri, JSON belgeleri olarak indekslenir. Her belge, anahtar-değer çiftlerinden oluşur ve Elasticsearch'ün optimize edilmiş veri yapısında depolanır. Indexler, log türüne veya zamana göre organize edilebilir (örneğin, logs-nginx-2023.10.27), bu da zaman bazlı veri yönetimi ve sorgulama performansını artırır.
  • Sharding: Büyük indeksler, performans ve yatay ölçeklenebilirlik için parçalara (shard) ayrılır. Her shard, bir Lucene indeksi olup, küme içinde farklı düğümlerde barındırılabilir. Bu yapı, paralel işlemeyi ve terabaytlarca verinin dağıtık olarak yönetilmesini mümkün kılar.
  • Replika: Veri kaybını önlemek ve okuma performansını artırmak için shard'ların kopyaları (replikalar) oluşturulur. Birincil shard'ın arızalanması durumunda, bir replika otomatik olarak birincil rolünü üstlenir, böylece yüksek erişilebilirlik sağlanır.

Örnek Senaryo: Yüksek hacimli Nginx erişim loglarını saniyede binlerce istek alacak şekilde depolamak. Elasticsearch, bu logları birden fazla düğümde dağıtılmış olarak depolayarak ve indeksleyerek, terabaytlarca veriyi milisaniyeler içinde sorgulama yeteneği sunar, bu da anlık sorun giderme ve güvenlik analizi için kritiktir.

Logstash: Veri Toplama ve İşleme Hattı

Logstash, çeşitli kaynaklardan gelen log verilerini toplayan, işleyen ve hedef bir depolama birimine (çoğunlukla Elasticsearch) gönderen dinamik bir veri işleme hattıdır. Üç ana aşamadan oluşur:

  • Girişler (Inputs): Farklı kaynaklardan veri okumayı sağlar (beats, syslog, kafka, http, file).
  • Filtreler (Filters): Veri üzerinde yapısal dönüşümler ve zenginleştirmeler yapar (grok, mutate, date, geoip). Grok filtresi, yapılandırılmamış log satırlarını yapılandırılmış alanlara ayrıştırmak için güçlü bir araçtır.
  • Çıkışlar (Outputs): İşlenmiş veriyi belirli bir hedefe gönderir (elasticsearch, s3, kafka, stdout).

Logstash Yapılandırma Örneği:

input {  beats {    port => 5044  }}filter {  grok {    match => { "message" => "%{IPORHOST:clientip} %{IDENT:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) \"%{URI:referrer}\" \"%{GREEDYDATA:agent}\"" }    overwrite => [ "message" ]  }  date {    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]    target => "@timestamp"  }  mutate {    convert => { "response" => "integer" }    convert => { "bytes" => "integer" }  }}output {  elasticsearch {    hosts => ["http://elasticsearch:9200"]    index => "nginx-logs-%{+YYYY.MM.dd}"  }  stdout { codec => rubydebug }}

Bu örnek, Filebeat'ten gelen logları dinler, bir Nginx erişim logunu Grok ile ayrıştırır, zaman damgasını standartlaştırır ve Elasticsearch'e günlük indeksler halinde gönderir. Başarısız Grok ayrıştırmaları için _grokparsefailure etiketi otomatik olarak eklenir, bu da hata ayıklama için önemlidir.

Kibana: Veri Görselleştirme ve Yönetim Paneli

Kibana, Elasticsearch'te depolanan verileri keşfetmek, analiz etmek ve görselleştirmek için kullanılan bir kullanıcı arayüzüdür. Log verilerini interaktif panolar aracılığıyla anlamlandırmayı sağlar.

  • Discover: Ham log verilerini güçlü sorgulama (KQL veya Lucene) ve filtreleme yetenekleriyle keşfetme.
  • Visualize: Çeşitli grafik ve tablolarla verileri görselleştirme (histogramlar, pasta grafikleri, metrikler, haritalar), log desenlerini ve anormallikleri hızlıca tespit etme.
  • Dashboards: Birden çok görselleştirmeyi tek bir sayfada toplayarak operasyonel görünürlük sağlama, farklı ekipler (DevOps, Güvenlik, Geliştirme) için özelleştirilmiş panolar oluşturma.
  • Alerting: Belirli log desenleri veya metrik eşik değerleri aşıldığında bildirimler yapılandırma (e-posta, Slack, webhook), proaktif sorun yönetimi.

Kibana Sorgu Örneği (KQL):

response:500 AND clientip:"192.168.1.10" AND NOT agent:"bot"

Bu sorgu, belirli bir IP adresinden gelen, HTTP 500 hata kodu içeren ve bir bot tarafından yapılmamış tüm Nginx loglarını getirir. Karmaşık filtreleme senaryolarında KQL'in gücünü gösterir.

Veri Toplama Katmanı: Beats Ailesi

Logstash'ın aksine, Beats ailesi (Filebeat, Metricbeat, Heartbeat vb.) hafif, tek amaçlı veri göndericileridir. Genellikle log kaynaklarına (sunucular, konteynerler) doğrudan kurulur. Filebeat, dosya tabanlı logları toplamak için en yaygın kullanılan Beat'tir. Düşük kaynak tüketimi, resilience (yeniden deneme mekanizmaları) ve küçük ayak izi sayesinde üretim ortamlarında tercih edilir.

Filebeat Yapılandırma Örneği (filebeat.yml):

filebeat.inputs:- type: log  enabled: true  paths:    - /var/log/nginx/access.log    - /var/log/nginx/error.log  fields:    log_type: nginxoutput.logstash:  hosts: ["logstash:5044"]  loadbalance: true  # Yüksek erişilebilirlik için birden fazla Logstash host'u  worker: 1 # Tek bir Logstash host'una kaç concurrent bağlantı yapılacağı

Bu yapılandırma, Nginx erişim ve hata loglarını toplar ve Logstash'a gönderir, her loga log_type: nginx alanı ekler. loadbalance ve worker ayarları ile Logstash kümesi ile daha verimli ve dayanıklı iletişim sağlanır.

Üretim Ortamı İçin ELK Mimarisinin Derinlemesine İncelenmesi

Gerçek bir üretim senaryosunda ELK Stack, yüksek hacimli ve çeşitli log verilerini yönetmek zorundadır. Tipik bir AWS Kubernetes (EKS) ortamında merkezi log yönetimini ele alalım:

  1. Log Kaynakları: EKS üzerinde çalışan mikroservisler (Java Spring Boot, Node.js, Python Flask), Nginx Ingress Controller, sistem logları (kubelet, containerd) ve AWS servis logları (CloudTrail, VPC Flow Logs).
  2. Veri Toplama (Filebeat DaemonSet):
    • Her EKS worker düğümüne, Kubernetes DaemonSet olarak Filebeat deploy edilir. Bu, her düğümde tek bir Filebeat instance'ının çalışmasını garanti eder.
    • Filebeat, /var/log/containers/*.log yolundaki konteyner loglarını ve /var/log/syslog gibi sistem loglarını toplar.
    • Konteyner logları için Filebeat'in Kubernetes modülü, pod, namespace, container name, image gibi zengin metadata'yı loglara otomatik olarak ekler, bu da filtreleme ve analiz yeteneklerini büyük ölçüde artırır.
  3. Veri İşleme (Logstash Kümesi):
    • Logstash, EKS dışında veya ayrı bir EC2 kümesinde (Auto Scaling Group içinde), yüksek erişilebilirlik ve ölçeklenebilirlik için deploy edilir. Genellikle Docker konteynerleri içinde çalıştırılır ve bir AWS Network Load Balancer (NLB) arkasına konumlandırılır.
    • Birden çok Logstash instance'ı, Filebeat'ten gelen logları paralel olarak işler.
    • Logstash pipeline'ları, farklı mikroservislerin (JSON, düz metin) ve Nginx'in log formatlarına uygun Grok desenleri ve diğer filtrelerle logları ayrıştırır, zenginleştirir (örneğin, geoip ile IP adreslerinden konum bilgisi ekleme, useragent ile tarayıcı bilgisi ayrıştırma) ve hassas verileri maskeler (mutate filtresi ile).
    • Logstash, başarısız ayrıştırmaları (_grokparsefailure tag'i ile) özel bir
← Blog Listesine Dön