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.0
5environment:
6- discovery.type=single-node
7- xpack.security.enabled=false
8ports:
9- "9200:9200"
10volumes:
11- es_data:/usr/share/elasticsearch/data
12
13logstash:
14image: docker.elastic.co/logstash/logstash:8.0.0
15volumes:
16-./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
17ports:
18- "5000:5000"
19depends_on:
20- elasticsearch
21
22kibana:
23image: docker.elastic.co/kibana/kibana:8.0.0
24ports:
25- "5601:5601"
26depends_on:
27- elasticsearch
28
29volumes:
30es_data:

Logstash, UDP/TCP üzerinden gelen logları Elasticsearch'e göndermek için yapılandırılır. logstash.conf dosyası oluşturun:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1input {
2udp {
3port => 5000
4codec => json
5}
6}
7
8filter {
9if [type] == "docker" {
10grok {
11match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:log_message}" }
12}
13}
14}
15
16output {
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');
3
4function 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}
15
16sendLog('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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz