Ü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.
ELK Stack veya Loki kurulumu, log parsing ve alerting için iletişime geçin