format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightMikroservis Mimarisinde Log Yönetimi: ELK Stack Kapsamlı Rehber
- arrow_rightELK Stack Nedir ve Neden Tercih Edilmeli?
- arrow_rightELK Stack Bileşenleri ve İşlevleri
- arrow_right1. Elasticsearch: Arama ve İndeksleme Motoru
- arrow_right2. Logstash: Veri İşleme ve Pipeline
- arrow_right3. Kibana: Görselleştirme ve Dashboard
- arrow_right4. Beats: Hafif Veri Toplayıcılar
- arrow_rightMikroservis Mimarisinde Log Yönetimi Zorlukları
- arrow_rightDağıtık İzleme (Distributed Tracing)
- arrow_rightLog Formatı Standartlaştırması
- arrow_rightELK Stack Kurulumu ve Yapılandırması
- arrow_rightDocker ile ELK Stack Kurulumu
- arrow_rightLogstash Pipeline Yapılandırması
- arrow_rightMikroservis Log Yönetimi En İyi Uygulamaları
- arrow_right1. Yapılandırılmış Loglama (Structured Logging)
- arrow_right2. Merkezi Log Deposu Kullanımı
- arrow_right3. Log Seviyelerinin Doğru Kullanımı
- arrow_right4. Retansiyon Politikaları
- arrow_rightELK Stack Alternatifleri ve Karşılaştırması
- arrow_rightGrafana Loki: Hafif Alternatif
- arrow_rightPerformans Optimizasyonu
- arrow_rightElasticsearch Performans İpuçları
- arrow_rightLogstash Performans Ayarları
Mikroservis Mimarisinde Log Yönetimi: ELK Stack Kapsamlı Rehber
Mikroservis mimarisi, modern yazılım geliştirme süreçlerinde ölçeklenebilirlik ve esneklik sağlayan popüler bir yaklaşımdır. Ancak bu mimaride onlarca hatta yüzlerce servisin birbirleriyle iletişim kurması, merkezi log yönetimi olmadan kabus haline gelebilir. Bu makalede, mikroservis ortamlarında log yönetimi için en yaygın kullanılan çözüm olan ELK Stack'i detaylı olarak inceleyeceğiz.
Gartner'a göre, kurumsal IT departmanları 2025 yılına kadar günlük üretilen veri miktarını ortalama 25 kat artırmış olacak. Bu veri patruluğu, özellikle dağıtık sistemlerde kritik önem taşımaktadır.
ELK Stack Nedir ve Neden Tercih Edilmeli?
ELK Stack, dört ana bileşenden oluşan açık kaynaklı bir log yönetimi ve analiz platformudur. Bu stack, büyük ölçekli sistemlerde merkezi log toplama, arama ve görselleştirme için endüstri standardı haline gelmiştir.
Elasticsearch, Logstash, Kibana ve Beats bileşenlerinin entegrasyonu, yüksek erişilebilirlik gereksinimleri olan sistemlerde güvenilir bir altyapı sunar.
ELK Stack Bileşenleri ve İşlevleri
1. Elasticsearch: Arama ve İndeksleme Motoru
Elasticsearch, dağıtık ve RESTful bir arama motorudur. JSON formatında belge depolar ve Lucene altyapısı üzerine inşa edilmiştir. Mikroservis loglarını gerçek zamanlı olarak indeksler ve milyarlarca kaydı saniyeler içinde aramanıza olanak tanır.
Temel özellikleri:
- Tam metin arama yetenekleri
- Gerçek zamanlı indeksleme
- Dağıtık mimari ile yatay ölçeklenebilirlik
- RESTful API desteği
- Kümeleme (clustering) desteği
2. Logstash: Veri İşleme ve Pipeline
Logstash, log verilerini toplamak, dönüştürmek ve Elasticsearch'e aktarmak için kullanılan ETL (Extract, Transform, Load) aracıdır. Farklı kaynaklardan gelen verileri standartlaştırır ve zenginleştirir.
Logstash pipeline'ı üç aşamadan oluşur: Input → Filter → Output. Bu yapı, ham log verilerinin yapılandırılmış formata dönüştürülmesini sağlar.
Mikroservis ortamında Docker container logları, sistem logları ve uygulama logları için Docker veya Kubernetes entegrasyonları mevcuttur.
3. Kibana: Görselleştirme ve Dashboard
Kibana, Elasticsearch verilerini görselleştirmenize olanak tanıyan web tabanlı bir arayüzdür. Dashboard'lar, grafikler ve tablolar oluşturarak sistem sağlığını monitör etmenizi sağlar.
Kibana'nın sunduğu görselleştirme seçenekleri arasında çizgi grafikleri, pasta grafikleri, haritalar, tablolar ve metrikler bulunur. Anlık uyarı (alerting) sistemi ile kritik olaylardan haberdar olabilirsiniz.
4. Beats: Hafif Veri Toplayıcılar
Beats, Logstash'in yerine veya onunla birlikte kullanılabilen hafif veri toplayıcılardır. Her beats türü farklı veri tiplerini toplamak üzere tasarlanmıştır:
- Filebeat: Log dosyalarını toplar
- Metricbeat: Sistem metriklerini toplar
- Packetbeat: Ağ trafiğini analiz eder
- Winlogbeat: Windows event loglarını toplar
- Heartbeat: Uptime monitoring sağlar
Mikroservis Mimarisinde Log Yönetimi Zorlukları
Mikroservis mimarisi, monolitik uygulamalara kıyasla benzersiz log yönetimi zorlukları ortaya çıkarır. Her servis bağımsız olarak çalışır ve kendi loglarını üretir. Bu durum, hata ayıklama ve sistem izleme süreçlerini karmaşıklaştırır.
Dağıtık İzleme (Distributed Tracing)
Mikroservisler arası isteklerin takibi kritiktir. Bir kullanıcı isteği birçok servisten geçer ve her birinin logu ayrı tutulur. Bu durumda,Correlation ID kullanarak isteklerin sonunu başına bağlamak esastır.
OpenTelemetry ve Jaeger gibi araçlar, ELK Stack ile entegre edilerek dağıtık izleme yeteneklerini genişletir. Distributed tracing, veri merkezi ortamlarında performans optimizasyonu için vazgeçilmezdir.
Log Formatı Standartlaştırması
Her mikroservis farklı log formatları üretebilir. JSON formatı, makine tarafından okunabilir ve aranabilir olduğu için standart olarak önerilir. Zorunlu alanlar şunları içermelidir:
- Timestamp (ISO 8601 formatında)
- Log seviyesi (DEBUG, INFO, WARN, ERROR)
- Servis adı
- Correlation ID
- Mesaj
ELK Stack Kurulumu ve Yapılandırması
Docker ile ELK Stack Kurulumu
En hızlı başlangıç yöntemi, Docker Compose kullanarak ELK Stack'i ayağa kaldırmaktır. Aşağıdaki docker-compose.yml dosyası temel bir kurulum sağlar:
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false
ports:
- "9200:9200"
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
logstash:
image: docker.elastic.co/logstash/logstash:8.11.0
ports:
- "5044:5044"
volumes:
- ./logstash/pipeline:/usr/share/logstash/pipeline
kibana:
image: docker.elastic.co/kibana/kibana:8.11.0
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
volumes:
elasticsearch-data:
Logstash Pipeline Yapılandırması
Logstash pipeline'ı, log verilerinin nasıl işleneceğini belirler. Aşağıdaki örnek, mikroservis loglarını işlemek için temel bir yapılandırma sunar:
input {
beats {
port => 5044
}
}
filter {
json {
source => "message"
}
mutate {
add_field => { "servis_adı" => "%{service}" }
}
date {
match => [ "timestamp", "ISO8601" ]
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "mikroservis-loglari-%{+YYYY.MM.dd}"
}
}
Bu yapılandırma, gelen JSON loglarını parsed eder, gerekli alanları ekler ve Elasticsearch'e aktarır. PHP-FPM performans ayarları gibi sistem konfigürasyonları da benzer pipeline mantığı ile izlenebilir.
Mikroservis Log Yönetimi En İyi Uygulamaları
1. Yapılandırılmış Loglama (Structured Logging)
Her log kaydı JSON formatında olmalı ve makine tarafından kolayca parse edilebilir olmalıdır. Bu yaklaşım, Logstash filtrelerinin daha etkili çalışmasını sağlar.
{
"timestamp": "2024-01-15T10:30:00Z",
"level": "ERROR",
"service": "odeme-servisi",
"trace_id": "abc-123-def",
"message": "Ödeme işlemi başarısız",
"error_code": "PAYMENT_001",
"user_id": "user_456"
}
2. Merkezi Log Deposu Kullanımı
Tüm mikroservisler loglarını merkezi ELK Stack'e göndermelidir. Bu, tek bir noktadan tüm sistemi izlemeyi mümkün kılar. Merkezi depolama, felaket kurtarma planlaması için de kritiktir.
3. Log Seviyelerinin Doğru Kullanımı
Log seviyeleri tutarlı şekilde kullanılmalıdır:
- DEBUG: Geliştirme ortamında detaylı bilgi
- INFO: Normal operasyonel olaylar
- WARN: Potansiyel sorunlar
- ERROR: Hatalar ve istisnalar
4. Retansiyon Politikaları
Elasticsearch'de log verilerinin ne kadar süre saklanacağı belirlenmeli ve Index Lifecycle Management (ILM) yapılandırılmalıdır. Önerilen politikalar:
- Sıcak (Hot): Son 7 gün - aktif yazma ve okuma
- Ilık (Warm): 7-30 gün - daha az okuma, daha az kaynak
- Soğuk (Cold): 30-90 gün - arşiv amaçlı saklama
- Silme (Delete): 90+ gün - otomatik temizleme
ELK Stack Alternatifleri ve Karşılaştırması
ELK Stack dışında farklı log yönetimi çözümleri de mevcuttur. İşte en popüler alternatiflerin karşılaştırması:
| Özellik | ELK Stack | Graylog | Splunk | Loki |
|---|---|---|---|---|
| Lisans | Apache 2.0 | GPLv3 | Proprietary | Apache 2.0 |
| Kurulum Kolaylığı | Orta | Kolay | Kolay | Kolay |
| Ölçeklenebilirlik | Çok Yüksek | Yüksek | Çok Yüksek | Orta |
| Maliyet | Ücretsiz | Ücretsiz/Ücretli | Yüksek | Ücretsiz |
| Grafana Entegrasyonu | Var | Var | Var | Native |
According to a 2024 survey by DevOps.com, %67 of organizations using microservices prefer ELK Stack for log management due to its flexibility and extensive ecosystem. Splunk is preferred in enterprise environments where premium support is required.
Grafana Loki: Hafif Alternatif
Grafana Loki, Prometheus ekibi tarafından geliştirilen ve Grafana ile native entegrasyon sunan bir log aggregation sistemidir. Daha az kaynak tüketir ancak Elasticsearch kadar gelişmiş arama yetenekleri sunmaz. Küçük ölçekli mikroservis deployment'ları için idealdir.
Performans Optimizasyonu
Elasticsearch Performans İpuçları
Yüksek hacimli mikroservis ortamlarında Elasticsearch performansı kritiktir:
- Doğru shard sayısı: Her index için shard sayısı, beklenen veri hacmine göre belirlenmeli. Genel kural, her shard'ın 30-50GB'ı geçmemesidir.
- Index template yapılandırması: Mapping'ler önceden tanımlanarak dinamik mapping'in performans etkisi azaltılmalıdır.
- Document bundling: Küçük log eventleri yerine, birkaç log satırını birleştiren batch işleme tercih edilebilir.
- Hardware requirements: Minimum 8GB RAM ve SSD depolama önerilir. Production ortamları için kaliteli sunucu altyapısı kritiktir.
Logstash Performans Ayarları
Logstash throughput'unu artırmak için:
- Pipeline workers sayısını CPU core sayısına göre ayarlayın
- Batch size ve queue ayarlarını optimize edin
- Gerekli olmayan filtreleri kaldırın
- Memory queue yerine persistent queue kullanın