ELK Stack ile Merkezi Log Yönetimi

ELK Stack ile Merkezi Log Yönetimi

Birden fazla sunucu ve uygulamadan gelen logları tek tek SSH ile kontrol etmek verimsiz ve hata yapmaya açıktır. ELK Stack (Elasticsearch, Logstash, Kibana) ile tüm loglarınızı merkezi bir noktada toplayabilir, arayabilir ve görselleştirebilirsiniz. Bu rehberde ELK mimarisinden Docker Compose kurulu

E

Elif Demir

Cloud Solutions Architect

21 Mart 202614 dk okuma0

Birden fazla sunucu ve uygulamadan gelen logları tek tek SSH ile kontrol etmek verimsiz ve hata yapmaya açıktır. ELK Stack (Elasticsearch, Logstash, Kibana) ile tüm loglarınızı merkezi bir noktada toplayabilir, arayabilir ve görselleştirebilirsiniz. Bu rehberde ELK mimarisinden Docker Compose kurulumuna, Logstash pipeline yapılandırmasından Kibana dashboard oluşturmaya kadar tüm süreci inceliyoruz.

ELK Stack Mimarisi

ELK Stack üç temel bileşenden oluşur. Filebeat ise log dosyalarını okuyarak Logstash'e veya doğrudan Elasticsearch'e gönderen hafif bir shipper olarak eklenir.

Bileşen Görev Port
Elasticsearch Log depolama, indeksleme ve arama motoru 9200 / 9300
Logstash Log toplama, dönüştürme ve yönlendirme 5044 / 5000
Kibana Log görselleştirme ve dashboard 5601
Filebeat Hafif log shipper (sunuculara kurulur) -

Docker Compose ile ELK Kurulumu

Docker Compose ile ELK Stack'i hızlıca ayağa kaldırabilirsiniz. Aşağıdaki yapılandırma Elasticsearch, Logstash ve Kibana'yı tek bir komutla başlatır.

docker-compose.yml
version: "3.8"
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ports:
      - "9200:9200"
    volumes:
      - es_data:/usr/share/elasticsearch/data
    networks:
      - elk

  logstash:
    image: docker.elastic.co/logstash/logstash:8.12.0
    ports:
      - "5044:5044"
      - "5000:5000"
    volumes:
      - ./logstash/pipeline:/usr/share/logstash/pipeline
    depends_on:
      - elasticsearch
    networks:
      - elk

  kibana:
    image: docker.elastic.co/kibana/kibana:8.12.0
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    depends_on:
      - elasticsearch
    networks:
      - elk

volumes:
  es_data:

networks:
  elk:
    driver: bridge

⚠️ Dikkat: Elasticsearch yüksek bellek tüketir. Production ortamında en az 4 GB RAM ayırın. ES_JAVA_OPTS ile JVM heap boyutunu toplam RAM'in yarısı olarak ayarlayın, ancak 32 GB'ı geçmeyin.

Logstash Pipeline Yapılandırması

Logstash pipeline'ı üç aşamadan oluşur: input (veri kaynağı), filter (dönüştürme) ve output (hedef). Aşağıdaki yapılandırma Filebeat'ten gelen logları parse eder ve Elasticsearch'e yazar.

logstash/pipeline/logstash.conf
input {
  beats {
    port => 5044
  }
  tcp {
    port => 5000
    codec => json
  }
}

filter {
  # Nginx access log parse
  if [fields][log_type] == "nginx-access" {
    grok {
      match => {
        "message" => "%{IPORHOST:client_ip} - %{DATA:user} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{DATA:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:response_code} %{NUMBER:bytes}"
      }
    }
    date {
      match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
    }
    geoip {
      source => "client_ip"
    }
  }

  # Gereksiz alanları kaldır
  mutate {
    remove_field => ["host", "@version"]
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "logs-%{[fields][log_type]}-%{+YYYY.MM.dd}"
  }
}

Filebeat ile Log Gönderimi

Filebeat, sunuculardaki log dosyalarını okuyarak Logstash'e veya doğrudan Elasticsearch'e gönderen hafif bir agent'tır. Her uygulama sunucusuna kurulmalıdır.

filebeat.yml
filebeat.inputs:
  - type: filestream
    id: nginx-access
    paths:
      - /var/log/nginx/access.log
    fields:
      log_type: nginx-access

  - type: filestream
    id: app-logs
    paths:
      - /var/log/app/*.log
    fields:
      log_type: application
    parsers:
      - ndjson:
          target: ""

output.logstash:
  hosts: ["logstash-server:5044"]

processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

Index Lifecycle Management (ILM)

Loglar sürekli büyür ve disk alanını tüketir. Elasticsearch'ün ILM özelliği ile index'lerin yaşam döngüsünü otomatik yönetebilirsiniz: sıcak (hot), ılık (warm), soğuk (cold) ve silme (delete) aşamaları.

ILM Policy (Kibana Dev Tools)
PUT _ilm/policy/logs-policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "50gb",
            "max_age": "1d"
          }
        }
      },
      "warm": {
        "min_age": "7d",
        "actions": {
          "shrink": { "number_of_shards": 1 },
          "forcemerge": { "max_num_segments": 1 }
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

💡 İpucu: ILM ile 7 günden eski logları warm node'lara taşıyarak SSD maliyetini düşürün. 30 günden eski logları otomatik silin veya cold storage'a arşivleyin. Uyumluluk gereksinimleri varsa retention süresini buna göre ayarlayın.

Sunucu izleme için Prometheus + Grafana rehberimizi, sunucu güvenliği için Sunucu Hardening Checklist rehberimizi, container ortamları için Docker Multi-Stage Build rehberimizi inceleyin. Elasticsearch Resmi Dokümantasyonu ve Logstash Dokümantasyonu ek kaynak olarak faydalıdır.

Sıkça Sorulan Sorular

ELK Stack için minimum sunucu gereksinimleri nelerdir?

Geliştirme ortamı için 4 GB RAM ve 2 vCPU yeterlidir. Production ortamında Elasticsearch için en az 8 GB RAM, 4 vCPU ve SSD disk önerilir. Yüksek log hacimlerinde Elasticsearch cluster (3+ node) kurulmalıdır.

Logstash yerine doğrudan Filebeat kullanabilir miyim?

Evet, Filebeat logları doğrudan Elasticsearch'e gönderebilir. Ancak karmaşık log dönüştürme (grok, geoip, mutate) gerekiyorsa Logstash kullanmanız gerekir. Basit JSON loglar için Filebeat + Elasticsearch yeterlidir.

ELK Stack'e alternatifler nelerdir?

Loki + Grafana (daha hafif, label-based), Graylog (kolay kurulum), Fluentd/Fluent Bit (CNCF projesi) ve OpenSearch (Elasticsearch fork'u) popüler alternatiflerdir. Loki, Kubernetes ortamlarında özellikle tercih edilir.

Elasticsearch güvenliği nasıl sağlanır?

Elasticsearch'ü dış ağa açmayın, yalnızca internal network'ten erişim sağlayın. X-Pack Security ile kimlik doğrulama ve TLS şifreleme aktif edin. Kibana'ya erişimi reverse proxy arkasında HTTPS ile koruyun.

Sonuç

ELK Stack ile merkezi log yönetimi kurarak tüm sunucu ve uygulama loglarınızı tek bir noktadan izleyin. Filebeat ile log toplama, Logstash ile dönüştürme, Elasticsearch ile depolama ve Kibana ile görselleştirme katmanlarını yapılandırın. ILM politikaları ile disk kullanımını optimize edin.

ELK Stack İçin Yüksek Performanslı Sunucular

Hosted Cloud sunucuları ile merkezi log altyapınızı güvenle çalıştırın.

Bulut Sunucu Planlarını İncele →
E

Elif Demir

Cloud Solutions Architect

Kurumsal bulut geçiş projeleri ve hibrit altyapı tasarımı konusunda uzman. AWS, Azure ve özel bulut ortamlarında 8 yıllık deneyime sahiptir.

Yorumlar yakında