Üretim sunucularında log''lar her yere dağılır: uygulama, nginx, systemd, database, kernel. Çöktüğünüz anda 20 sunucuda SSH''layıp grep çalıştırmak sürdürülemez. ELK Stack — Elasticsearch (arama), Logstash (dönüştürme), Kibana (UI) — tüm log''ları merkezi olarak toplar, indexler ve saniyede arar.

Bileşenler

İlgili rehberler: DNS nedir, ayarları değiştirme · Domain adı ve WHOIS sorgulama · Hosting türleri rehberi · Nginx yapılandırma · Plesk panel yönetimi

  • Filebeat: Her sunucuda çalışan hafif log shipper
  • Logstash: Parse, filter, enrich (opsiyonel — Filebeat direkt Elastic''e de gönderebilir)
  • Elasticsearch: Index, search, storage
  • Kibana: UI — arama, dashboard, alert

Docker Compose ile Kurulum

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=true
      - ELASTIC_PASSWORD=changeme
      - ES_JAVA_OPTS=-Xms1g -Xmx1g
    volumes:
      - es-data:/usr/share/elasticsearch/data
    ports: ['9200:9200']

  kibana:
    image: docker.elastic.co/kibana/kibana:8.11.0
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=kibana_system
      - ELASTICSEARCH_PASSWORD=changeme
    ports: ['5601:5601']
    depends_on: [elasticsearch]

volumes:
  es-data:

Filebeat ile Log Toplama

# /etc/filebeat/filebeat.yml (her uygulama sunucusunda)
filebeat.inputs:
  - type: filestream
    id: nginx-access
    paths:
      - /var/log/nginx/access.log
    parsers:
      - ndjson: {}
    fields:
      service: nginx
      type: access

  - type: filestream
    id: app-log
    paths:
      - /var/log/myapp/*.log
    fields:
      service: myapp

  - type: journald
    id: systemd
    include_matches.match:
      - _SYSTEMD_UNIT=keydal.service

processors:
  - add_host_metadata: {}
  - add_cloud_metadata: {}

output.elasticsearch:
  hosts: ['https://es.example.com:9200']
  username: elastic
  password: changeme
  index: "logs-%{[fields.service]}-%{+yyyy.MM.dd}"
systemctl enable --now filebeat
filebeat test config
filebeat test output

Logstash ile Dönüştürme

Ham log''ları parse edip zenginleştirmek için Logstash pipeline yazılır.

# /etc/logstash/conf.d/nginx.conf
input {
  beats {
    port => 5044
  }
}

filter {
  if [service] == "nginx" {
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
    date {
      match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
    }
    geoip {
      source => "clientip"
    }
    useragent {
      source => "agent"
      target => "ua"
    }
    mutate {
      convert => { "response" => "integer" "bytes" => "integer" }
    }
  }
}

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

Kibana''da Arama

# KQL (Kibana Query Language)
service: "nginx" AND response >= 500
service: "nginx" AND response: (500 or 502 or 503 or 504)
request: "*wp-admin*"
clientip: "1.2.3.4"
NOT status: (200 or 304)
response_time > 1000

# Lucene (daha güçlü)
message:error OR level:ERROR

Index Lifecycle Management (ILM)

30 gün sonra log''lar büyük yer kaplar. ILM politikası ile otomatik rollover, downgrade, delete.

PUT _ilm/policy/logs-policy
{
  "policy": {
    "phases": {
      "hot":   { "actions": { "rollover": { "max_size": "50gb", "max_age": "7d" } } },
      "warm":  { "min_age": "7d",  "actions": { "shrink": { "number_of_shards": 1 }, "forcemerge": { "max_num_segments": 1 } } },
      "cold":  { "min_age": "30d", "actions": { "allocate": { "number_of_replicas": 0 } } },
      "delete":{ "min_age": "90d", "actions": { "delete": {} } }
    }
  }
}

Alerting

Kibana''da Stack Management → Alerts: "son 5 dk içinde 5xx oranı %5''i geçerse Slack''a bildir" gibi kurallar tanımlanır. Threshold, anomaly detection, index patterns desteklenir.

Performans Notları

  • Elasticsearch RAM''e aç — JVM heap toplam RAM''in yarısı, max 31 GB
  • SSD zorunlu
  • Shard sayısı: 1 shard = 20-40 GB sweet spot
  • Büyük cluster''da master/data/ingest node''ları ayır
  • Index template ile shard/replica ayarla

Alternatifler

  • Grafana Loki: ELK''dan çok daha hafif, label bazlı (index yok). Grafana''ya entegre
  • OpenSearch: Elasticsearch''ün AWS fork''u — lisans endişen varsa
  • Datadog, New Relic, Splunk: yönetilen SaaS, kurulum yok ama pahalı

Modern Web Hosting ve Sunucu Altyapısı

Performanslı bir web hosting hizmeti üç temel altyapı kararına dayanır: NVMe SSD diskler (klasik SATA SSD'ye göre 4-6 kat IOPS), LiteSpeed Web Server veya Nginx + LSCache kombinasyonu (Apache'ye göre 9 kat istek kapasitesi) ve CloudLinux + Imunify360 izolasyonu. Hosting sağlayıcısının kontrol paneli (cPanel, Plesk, DirectAdmin), günlük yedek politikası, veri merkezi konumu ve destek ekibi yanıt süresi de büyük fark yaratır. Türkiye lokasyonu yerli ziyaretçilere düşük gecikme verirken; Hetzner Frankfurt veya OVH Roubaix gibi Avrupa lokasyonları global trafik için daha uygundur. Site büyüdükçe paylaşımlı hosting'ten VPS, ardından dedicated server'a geçiş; CPU/RAM/disk kaynaklarının web sitemizin ihtiyaçlarına göre ölçeklenmesini sağlar.

Merkezi log altyapısı

ELK Stack veya Loki kurulumu, log parsing ve alerting için iletişime geçin

WhatsApp