
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
Elif Demir
Cloud Solutions Architect
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.
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.
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.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ı.
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 →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