Container Logging: ELK Stack ile Merkezi Log Yönetimi
Konteyner ortamında yüzlerce servis çalışırken, her birinin logu farklı yerde kalırsa sorun çıkması an meselesidir. Bir hata bulabilmek için tüm konteynerleri teker teker kontrol etmek, ölçeklenebilir bir çözüm değildir. ELK Stack (Elasticsearch, Logstash, Kibana) bu sorunu çözer: tüm logları merkezi bir yerde toplar, aranabilir hale getirir ve görsel panolarla analiz etmeyi sağlar.
Elasticsearch hızlı arama ve indeksleme yapar. Logstash gelen verileri işleyip temizler. Kibana ise bulguları grafik ve tablolarla gösterir. Üçü birlikte, binlerce konteynerin loglarını yönetmeyi pratik hale getirir.
İlk olarak Elasticsearch, Logstash ve Kibana konteynerlerini başlatırız:
1version: '3.8'2services:3elasticsearch:4image: docker.elastic.co/elasticsearch/elasticsearch:8.0.05environment:6- discovery.type=single-node7- xpack.security.enabled=false8ports:9- "9200:9200"10volumes:11- es_data:/usr/share/elasticsearch/data1213logstash:14image: docker.elastic.co/logstash/logstash:8.0.015volumes:16-./logstash.conf:/usr/share/logstash/pipeline/logstash.conf17ports:18- "5000:5000"19depends_on:20- elasticsearch2122kibana:23image: docker.elastic.co/kibana/kibana:8.0.024ports:25- "5601:5601"26depends_on:27- elasticsearch2829volumes:30es_data:Logstash, UDP/TCP üzerinden gelen logları Elasticsearch'e göndermek için yapılandırılır. logstash.conf dosyası oluşturun:
1input {2udp {3port => 50004codec => json5}6}78filter {9if [type] == "docker" {10grok {11match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:log_message}" }12}13}14}1516output {17elasticsearch {18hosts => ["elasticsearch:9200"]19index => "logs-%{+YYYY.MM.dd}"20}21}Bir Node.js uygulamasının loglarını UDP üzerinden Logstash'e gönderin:
1const dgram = require('dgram');2const client = dgram.createSocket('udp4');34function sendLog(level, message) {5const log = JSON.stringify({6timestamp: new Date().toISOString(),7level: level,8message: message,9type: "docker"10});11client.send(log, 5000, 'logstash', (err) => {12if (err) console.error(err);13});14}1516sendLog('INFO', 'Uygulama başlatıldı');17sendLog('ERROR', 'Veritabanı bağlantısı başarısız');Bu kod çalıştırıldığında, loglar Logstash'e gönderilir, Elasticsearch'te indekslenir ve Kibana'da görüntülenir.
Browser'da http://localhost:5601 açıp Kibana'ya girersiniz. "Discover" sekmesinde logs-* indeksini seçerek tüm logları görebilirsiniz. Filtreler ekleyerek (örneğin level: ERROR) sadece hataları bulabilirsiniz. Panolar oluşturarak gerçek zamanlı metrikler takip edebilirsiniz.
ELK Stack kurulduktan sonra, tüm konteynerleriniz merkezi bir yere log gönderebilir, sorunları hızlıca bulabilir ve sistem sağlığını izleyebilirsiniz.
0 yorum