← Kursa Dön
📄 Text · 35 min

Elasticsearch Ekosistemi — Elastic Stack (ELK)

Elastic Stack, Kibana, Logstash, Beats

Bir orkestra düşün. Sadece keman olsa güzel çalar ama sınırlıdır. Yanına viyola, çello, kontrbas, flüt, obua, timpani ekle — şimdi bir senfoni var. Her enstrüman kendi rolünü oynar ama birlikte çaldıklarında ortaya muhteşem bir bütün çıkar.

Elasticsearch de tek başına güçlü bir arama motorudur. Ama Elastic Stack — yani Elasticsearch, Kibana, Logstash ve Beats birlikte çalıştığında — veri toplama, dönüştürme, depolama, arama ve görselleştirme sürecinin tamamını kapsayan eksiksiz bir platform ortaya çıkar.


Elastic Stack (ELK Stack) Nedir?

Tarihsel olarak ELK Stack olarak bilinir: Elasticsearch + Logstash + Kibana. Sonradan Beats eklendi ve isim resmi olarak Elastic Stack oldu, ama toplulukta hâlâ "ELK" denir.

┌─────────────────────────────────────────────────────┐
│                    ELASTIC STACK                     │
│                                                     │
│  ┌──────────┐  ┌──────────┐  ┌───────────────────┐ │
│  │  Beats   │→│ Logstash  │→│  Elasticsearch     │ │
│  │ (toplama)│  │(dönüştür)│  │  (depola + ara)   │ │
│  └──────────┘  └──────────┘  └─────────┬─────────┘ │
│                                         │           │
│                               ┌─────────▼─────────┐ │
│                               │     Kibana        │ │
│                               │  (görselleştir)   │ │
│                               └───────────────────┘ │
└─────────────────────────────────────────────────────┘

Her bileşenin rolü net:

BileşenRolAnaloji
BeatsVeri toplama (hafif agent'lar)Sahadaki muhabirler
LogstashVeri dönüştürme ve yönlendirmeEditör masası — gelen haberi düzenler
ElasticsearchDepolama, indeksleme, aramaKütüphane — arşivler ve aranabilir kılar
KibanaGörselleştirme ve yönetimTelevizyon ekranı — sonuçları gösterir

Elasticsearch — Kalp

Önceki derste detaylıca ele aldık, ama ekosistem içindeki rolünü tekrar vurgulayalım:

  • Merkezi veri deposu — tüm verinin indekslendiği ve saklandığı yer

  • Arama motoru — full-text search, aggregation, analitik

  • REST API — tüm bileşenler Elasticsearch'le HTTP üzerinden konuşur

  • Dağıtık — birden fazla node'a yayılarak ölçeklenir

Elasticsearch olmadan Elastic Stack olmaz. Diğer tüm bileşenler ona veri gönderir veya ondan veri okur.

// Cluster sağlık durumunu kontrol et
GET /_cluster/health

// Yanıt:
{
  "cluster_name": "my-cluster",
  "status": "green",
  "number_of_nodes": 3,
  "number_of_data_nodes": 3,
  "active_primary_shards": 25,
  "active_shards": 50,
  "unassigned_shards": 0
}

Kibana — Göz

Kibana, Elasticsearch'ün görselleştirme ve yönetim arayüzüdür. Web tabanlıdır — tarayıcıdan http://localhost:5601 adresine gidersin ve karşına zengin bir arayüz çıkar.

Kibana Ne Yapar?

1. Discover — Veri Keşfi

Elasticsearch'teki verini ham haliyle görebilirsin. Filtreleme, sıralama, zaman aralığı seçme — SQL client'ından farklı olarak görsel ve interaktif.

2. Dev Tools — Geliştirici Konsolu

Bu kursun en çok kullanacağın Kibana özelliği. Elasticsearch REST API'sine sorgu göndermenin en kolay yolu:

// Kibana Dev Tools'ta şu şekilde yazarsın:
GET /products/_search
{
  "query": {
    "match": {
      "name": "kahve"
    }
  }
}

// cURL karşılığı:
// curl -X GET "localhost:9200/products/_search" -H 'Content-Type: application/json' -d'{"query":{"match":{"name":"kahve"}}}'

Dev Tools'un avantajları:

  • Otomatik tamamlama (autocomplete)

  • Söz dizimi vurgulama (syntax highlighting)

  • Request history

  • Çoklu sorguyu sırayla çalıştırma

  • cURL'den çok daha okunabilir

3. Dashboard — Görsel Panolar

Birden fazla görselleştirmeyi (visualization) bir araya getirerek dashboard oluşturursun:

  • Çubuk grafik: Kategorilere göre ürün sayısı

  • Çizgi grafik: Günlük sipariş trendi

  • Pasta grafik: Trafik kaynaklarının dağılımı

  • Harita: Coğrafi dağılım

  • Metrik: Toplam satış, ortalama sipariş tutarı

  • Tablo: En çok satan ürünler

4. Lens — Sürükle-Bırak Görselleştirme

Kibana'nın en modern görselleştirme aracı. Kod yazmadan, alanları sürükle-bırak ile görselleştirme oluşturursun. Akıllıca öneriler sunar — "Bu veriyi en iyi bu grafik tipi gösterir" der.

5. Canvas — Sunum Kalitesinde Infografik

PowerPoint benzeri, canlı veriye bağlı infografikler. Pazarlama ekibine veya yönetime gösterilecek rapor panellerinde kullanılır.

6. Alerting — Uyarılar

Belirli koşullar sağlandığında alarm tetikle:

  • "Son 5 dakikada 500 hatası 100'ü geçerse Slack'e bildirim gönder"

  • "Disk kullanımı %90'ı aşarsa e-posta at"

  • "Sipariş sayısı ani %50 düşerse PagerDuty tetikle"

7. Maps — Coğrafi Görselleştirme

Harita üzerinde veri gösterimi. IP adreslerinden lokasyon çıkarma (GeoIP), coğrafi bölgelere göre filtreleme.

8. Machine Learning

Anomali tespiti, trend tahmini, outlier detection. Ücretli lisans gerektirir ama güçlü bir özellik.

Kibana Mimarisi

Kibana, Node.js ile yazılmış bir web uygulamasıdır. Kendi başına veri saklamaz — tüm konfigürasyonunu (dashboard tanımları, saved searches, visualizations) .kibana isimli bir Elasticsearch index'inde saklar.

[Tarayıcı] → HTTP → [Kibana (Node.js)] → HTTP → [Elasticsearch]
                          ↑
                   port: 5601

Kibana Kurulumu

# Docker ile Kibana
docker run -d --name kibana \
  --net elastic \
  -p 5601:5601 \
  -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" \
  docker.elastic.co/kibana/kibana:8.17.0

# Kibana ayar dosyası: kibana.yml
# server.port: 5601
# server.host: "0.0.0.0"
# elasticsearch.hosts: ["http://localhost:9200"]

💡 İpucu: Bu kurs boyunca Kibana Dev Tools'u ana aracın olarak kullanacağız. cURL da göstereceğiz ama Dev Tools çok daha pratik.


Logstash — Beyin

Logstash bir veri işleme pipeline'ıdır. Farklı kaynaklardan veri alır, dönüştürür ve hedefe gönderir. "ETL" (Extract, Transform, Load) sürecinin Elastic Stack versiyonu.

Logstash Pipeline Yapısı

Her Logstash pipeline'ı üç aşamadan oluşur:

┌─────────┐    ┌─────────┐    ┌──────────┐
│  INPUT   │ →  │ FILTER  │ →  │  OUTPUT  │
│ (kaynak) │    │(dönüşüm)│    │ (hedef)  │
└─────────┘    └─────────┘    └──────────┘
  • Input: Veri nereden gelecek? (dosya, Kafka, veritabanı, HTTP, beats, stdin...)

  • Filter: Veri nasıl dönüştürülecek? (parse, enrich, transform, drop...)

  • Output: Veri nereye gidecek? (Elasticsearch, dosya, Kafka, stdout...)

Logstash Konfigürasyonu Örneği

Bir web sunucusunun access log'larını parse edip Elasticsearch'e gönderen pipeline:

# logstash.conf

input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}

filter {
  # Nginx log satırını parse et
  grok {
    match => { 
      "message" => "%{IPORHOST:client_ip} - %{USER:ident} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:status_code} %{NUMBER:bytes}"
    }
  }
  
  # Tarih formatını düzelt
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
    target => "@timestamp"
  }
  
  # IP adresinden lokasyon bilgisi çıkar
  geoip {
    source => "client_ip"
    target => "geo"
  }
  
  # Status code'u integer'a çevir
  mutate {
    convert => { 
      "status_code" => "integer"
      "bytes" => "integer" 
    }
    remove_field => ["message", "ident", "timestamp", "http_version"]
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "nginx-logs-%{+YYYY.MM.dd}"
  }
  
  # Debug için konsola da yazdır
  stdout { 
    codec => rubydebug 
  }
}

Bu pipeline şunu yapar:

  1. Input: Nginx access log dosyasını okur

  2. Filter — Grok: Ham log satırını yapılandırılmış alanlara parse eder

  3. Filter — Date: Zaman damgasını standart formata çevirir

  4. Filter — GeoIP: IP adresinden ülke/şehir bilgisi çıkarır

  5. Filter — Mutate: Veri tiplerini düzeltir, gereksiz alanları kaldırır

  6. Output: Sonucu Elasticsearch'e, günlük index'lere yazar

Logstash'in Güçlü Yanları

ÖzellikAçıklama
200+ PluginInput, filter, output için zengin plugin ekosistemi
Grok PatternsYapılandırılmamış metni parse etmek için güçlü pattern'ler
Conditional Logicif/else ile akış kontrolü
Multiple PipelinesBirden fazla pipeline paralel çalışabilir
Dead Letter Queueİşlenemeyen event'ler kaybolmaz
Persistent QueuePipeline'daki veri disk'e yazılarak korunur

Logstash'in Zayıf Yanları

  • Kaynak tüketimi yüksek: JVM tabanlı, minimum 1GB RAM ister

  • Karmaşık konfigürasyon: Büyük pipeline'lar yönetimi zorlaşır

  • Darboğaz olabilir: Tüm veri tek noktadan geçer

Bu yüzden basit log toplama senaryolarında Beats + Elasticsearch Ingest Pipeline tercih ediliyor — Logstash'e gerek kalmıyor.

Logstash Çalıştırma

# Docker ile Logstash
docker run -d --name logstash \
  --net elastic \
  -v ~/pipeline/:/usr/share/logstash/pipeline/ \
  docker.elastic.co/logstash/logstash:8.17.0

# Komut satırından test
echo "test mesajı" | logstash -e 'input { stdin {} } output { stdout { codec => rubydebug } }'

Beats — Kulak

Beats ailesi, hafif veri toplayıcılardan (lightweight data shippers) oluşur. Her biri belirli bir veri tipini toplamakta uzmanlaşmıştır.

Logstash'in aksine Beats çok az kaynak tüketir. Go dilinde yazılmıştır. Sunuculara kurup "çalıştır ve unut" (set and forget) yapabilirsin.

Beat Ailesi

BeatNe Toplar?Kullanım Alanı
FilebeatLog dosyalarıUygulama logları, sistem logları
MetricbeatSistem ve servis metrikleriCPU, RAM, disk, Docker, MySQL, Nginx stats
PacketbeatAğ trafiğiHTTP, DNS, MySQL query'leri, Redis komutları
HeartbeatUptime (erişilebilirlik)Servislerin ayakta olup olmadığı
AuditbeatAudit verileriDosya bütünlüğü, kullanıcı aktivitesi
WinlogbeatWindows Event LogWindows sunucu logları
FunctionbeatServerless fonksiyonlarAWS Lambda, Cloud Functions

Filebeat — En Popüler Beat

Filebeat, log dosyalarını okuyup Elasticsearch'e (veya Logstash'e) gönderir. Çoğu ELK kurulumunun temel taşı.

# filebeat.yml — Temel konfigürasyon

filebeat.inputs:
  - type: filestream
    id: app-logs
    paths:
      - /var/log/myapp/*.log
    parsers:
      - ndjson:
          target: ""
          add_error_key: true

  - type: filestream
    id: nginx-logs
    paths:
      - /var/log/nginx/access.log
      - /var/log/nginx/error.log

# Elasticsearch'e doğrudan gönder
output.elasticsearch:
  hosts: ["http://localhost:9200"]
  index: "filebeat-%{+yyyy.MM.dd}"

# VEYA Logstash'e gönder (dönüşüm gerekiyorsa)
# output.logstash:
#   hosts: ["localhost:5044"]

# Kibana dashboard'larını otomatik yükle
setup.kibana:
  host: "localhost:5601"

setup.dashboards.enabled: true

Filebeat'in Akıllı Özellikleri

1. Registry (Kayıt Tutma): Filebeat, her dosyanın hangi satırına kadar okuduğunu bir registry dosyasında tutar. Sunucu yeniden başlasa bile kaldığı yerden devam eder — veri kaybı veya tekrarı olmaz.

2. Back Pressure Handling: Elasticsearch yavaşlarsa veya erişilemezse, Filebeat veri göndermeyi yavaşlatır ve verileri bellekte/diskte tutar. Elasticsearch düzelince kaldığı yerden devam eder.

3. Modules: Yaygın uygulamalar için hazır konfigürasyonlar:

# Mevcut modülleri listele
filebeat modules list

# Nginx modülünü etkinleştir
filebeat modules enable nginx

# Modül ile başlat — parse, dashboard hepsi hazır
filebeat setup
filebeat -e

Nginx, Apache, MySQL, PostgreSQL, Docker, Kubernetes, AWS ve daha onlarca modül hazır geliyor. Sıfırdan konfigürasyon yazmana gerek kalmıyor.

Metricbeat — Sistem Metrikleri

# metricbeat.yml

metricbeat.modules:
  # Sistem metrikleri
  - module: system
    metricsets: ["cpu", "memory", "network", "diskio", "filesystem", "process"]
    period: 10s

  # Docker metrikleri
  - module: docker
    metricsets: ["container", "cpu", "diskio", "memory", "network"]
    hosts: ["unix:///var/run/docker.sock"]
    period: 10s

  # Nginx metrikleri
  - module: nginx
    metricsets: ["stubstatus"]
    hosts: ["http://localhost:80"]
    period: 10s

output.elasticsearch:
  hosts: ["http://localhost:9200"]

Metricbeat ile sunucu metrikleri, Docker container'ları, veritabanları ve web sunucularını izleyebilirsin. Kibana'da hazır dashboard'lar geliyor.

Heartbeat — Uptime Monitoring

# heartbeat.yml

heartbeat.monitors:
  # HTTP endpoint kontrolü
  - type: http
    id: my-api
    name: "Production API"
    urls: ["https://api.example.com/health"]
    schedule: "@every 30s"
    check.response.status: [200]

  # TCP port kontrolü
  - type: tcp
    id: my-db
    name: "PostgreSQL"
    hosts: ["db.example.com:5432"]
    schedule: "@every 60s"

  # ICMP (ping) kontrolü
  - type: icmp
    id: my-server
    name: "Web Server"
    hosts: ["web.example.com"]
    schedule: "@every 30s"

output.elasticsearch:
  hosts: ["http://localhost:9200"]

Ingest Pipelines — Elasticsearch İçinde Dönüşüm

Logstash olmadan, doğrudan Elasticsearch içinde veri dönüşümü yapmak da mümkün. Ingest Pipeline bunu sağlar.

// Bir ingest pipeline tanımla
PUT /_ingest/pipeline/web-logs-pipeline
{
  "description": "Web loglarını işle",
  "processors": [
    {
      "grok": {
        "field": "message",
        "patterns": ["%{IP:client_ip} - - \\[%{HTTPDATE:timestamp}\\] \"%{WORD:method} %{URIPATHPARAM:url}\""]
      }
    },
    {
      "date": {
        "field": "timestamp",
        "formats": ["dd/MMM/yyyy:HH:mm:ss Z"],
        "target_field": "@timestamp"
      }
    },
    {
      "geoip": {
        "field": "client_ip",
        "target_field": "geo"
      }
    },
    {
      "user_agent": {
        "field": "user_agent",
        "target_field": "ua"
      }
    },
    {
      "remove": {
        "field": ["message", "timestamp"]
      }
    }
  ]
}

// Pipeline'ı kullanarak döküman index'le
POST /web-logs/_doc?pipeline=web-logs-pipeline
{
  "message": "192.168.1.1 - - [10/Jan/2025:13:45:00 +0000] \"GET /api/products\"",
  "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0"
}

Logstash vs Ingest Pipeline

ÖzellikLogstashIngest Pipeline
Nerede çalışırAyrı JVM processElasticsearch içinde
Kaynak tüketimiYüksek (1GB+ RAM)Düşük (ES'in parçası)
Plugin çeşitliliğiÇok zengin (200+)Sınırlı ama yeterli
Birden fazla output✅ (ES, Kafka, S3...)❌ (sadece ES)
Conditional logicGelişmiş (if/else)Temel (conditions)
Karmaşık dönüşümSınırlı
Kullanım kolaylığıOrta (config dosyası)Kolay (REST API)

Kural: Basit dönüşümler → Ingest Pipeline. Karmaşık dönüşümler veya birden fazla hedef → Logstash.


Elastic Agent ve Fleet — Yeni Nesil

Elastic 7.x ile birlikte Elastic Agent tanıtıldı. Beats ailesinin tümünü tek bir agent'ta birleştiren yeni yaklaşım.

Beats vs Elastic Agent

ESKİ YAKLAŞIM (Beats):
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Filebeat │ │Metricbeat│ │Heartbeat │  → Her birini ayrı kur ve yönet
└──────────┘ └──────────┘ └──────────┘

YENİ YAKLAŞIM (Elastic Agent):
┌─────────────────────────────────────┐
│          Elastic Agent              │
│  (Log + Metric + Uptime + Security) │  → Tek agent, merkezi yönetim
└─────────────────────────────────────┘
         ↕ (Fleet Server)
┌─────────────────────────────────────┐
│      Fleet (Kibana içinde)          │  → Policy bazlı, uzaktan konfigürasyon
└─────────────────────────────────────┘

Fleet — Merkezi Yönetim

Fleet, Kibana içinden binlerce Elastic Agent'ı merkezi olarak yönetmenini sağlar:

  • Policies: Hangi verilerin toplanacağını tanımlar

  • Integrations: Hazır veri toplama şablonları (200+ entegrasyon)

  • Remote Configuration: Agent'ları tek tek SSH ile değil, Fleet'ten güncelle

Kibana → Fleet → Policy Güncelle → 1000 Agent otomatik güncellenir

Ne Zaman Hangi Yaklaşım?

SenaryoTavsiye
Yeni kurulum, sıfırdan başlıyorsunElastic Agent + Fleet
Mevcut Beats kurulumu varBeats'te devam edebilirsin
Çok özel konfigürasyon gerekiyorBeats (daha fazla kontrol)
Basit/standart log + metric toplamaElastic Agent + Fleet
Air-gapped (internet yok) ortamBeats (Fleet internet ister)

Bu kurs boyunca biz temel Beats ve Logstash anlatacağız çünkü kavramları anlamak için ideal. Elastic Agent, Beats'in "kolay modu" gibi — Beats'i anlayan, Agent'ı da kolayca kullanır.


Elastic Stack Mimarileri

Mimari 1: Basit (Development / Küçük Projeler)

[Uygulama] → [Elasticsearch] ← [Kibana]

Tek node Elasticsearch, üstüne Kibana. Log toplaması yok, veriyi doğrudan uygulama gönderiyor.

# docker-compose.yml — Basit mimari
version: "3.8"
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.17.0
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ports:
      - "9200:9200"
    volumes:
      - es-data:/usr/share/elasticsearch/data

  kibana:
    image: docker.elastic.co/kibana/kibana:8.17.0
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch

volumes:
  es-data:

Mimari 2: Orta (Standart ELK)

[Sunucular]→[Filebeat]→[Logstash]→[Elasticsearch]←[Kibana]
                                       (3 node)

Birden fazla sunucudan Filebeat ile log toplama, Logstash ile dönüştürme, 3 node Elasticsearch cluster.

Mimari 3: Büyük (Enterprise)

[Sunucular]→[Elastic Agent]→[Fleet Server]
                                    ↓
[Kafka/Redis] ← Buffer → [Logstash]
                              ↓
                     [Elasticsearch Cluster]
                     (Hot-Warm-Cold Tiers)
                              ↑
                          [Kibana]
                     (Load Balanced)

Bu mimaride:

  • Buffer (Kafka/Redis): Ani trafik artışlarını absorbe eder

  • Hot-Warm-Cold: Yeni veri hızlı SSD'de, eski veri ucuz disk'te

  • Load Balanced Kibana: Birden fazla Kibana instance'ı


Elastic Cloud ve Diğer Yönetilen Servisler

Elastic Cloud

Elastic'in kendi yönetilen servisi. Elasticsearch ve Kibana'yı kendi sunucularında barındırır:

  • AWS, Azure, GCP üzerinde deploy

  • Otomatik ölçekleme

  • Yedekleme ve geri yükleme

  • Güvenlik (TLS, kimlik doğrulama) varsayılan

  • Ücretsiz deneme mevcut

https://cloud.elastic.co → Ücretsiz hesap aç → Deployment oluştur → 5 dk'da hazır

Amazon OpenSearch Service

AWS'nin Elasticsearch fork'u olan OpenSearch'ün yönetilen servisi:

  • AWS ekosistemiyle entegre (IAM, CloudWatch, VPC)

  • Elasticsearch 7.x API uyumlu (büyük ölçüde)

  • Maliyet optimizasyonu: UltraWarm, Cold Storage

Azure / GCP Seçenekleri

  • Azure: Elastic Cloud on Azure (resmi partner)

  • GCP: Elastic Cloud on GCP (resmi partner)

Self-Hosted vs Managed

KriterSelf-HostedManaged (Cloud)
KontrolTam kontrolSınırlı (ayarlar)
MaliyetSunucu + insan maliyetiAylık abonelik
BakımSen yaparsınSağlayıcı yapar
ÖlçeklemeManuelOtomatik/yarı otomatik
GüvenlikSen konfigüre edersinVarsayılan aktif
ÖğrenmeDaha çok şey öğrenirsinAltyapıyı unutursun

Tavsiye: Öğrenme aşamasında Docker ile self-hosted, production'da ihtiyacına göre managed service.


Java Perspektifinden Elastic Stack

Java uygulamalarından Elastic Stack'e veri göndermek için birkaç yol var:

Yol 1: Doğrudan Elasticsearch Client ile

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch.core.IndexRequest;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;

import java.time.Instant;
import java.util.HashMap;
import java.util.Map;

class Main {
    public static void main(String[] args) throws Exception {
        RestClient restClient = RestClient.builder(
            new HttpHost("localhost", 9200)
        ).build();

        ElasticsearchClient client = new ElasticsearchClient(
            new RestClientTransport(restClient, new JacksonJsonpMapper())
        );

        // Uygulama logu gönder
        Map<String, Object> logEntry = new HashMap<>();
        logEntry.put("@timestamp", Instant.now().toString());
        logEntry.put("level", "ERROR");
        logEntry.put("logger", "com.example.PaymentService");
        logEntry.put("message", "Payment failed for order #12345");
        logEntry.put("order_id", 12345);
        logEntry.put("error_code", "INSUFFICIENT_FUNDS");

        client.index(i -> i
            .index("app-logs-" + java.time.LocalDate.now())
            .document(logEntry)
        );

        System.out.println("Log gönderildi!");
        restClient.close();
    }
}

Yol 2: SLF4J + Logback ile Otomatik

Daha yaygın yaklaşım: Uygulama loglarını dosyaya yaz, Filebeat toplasın.

<!-- logback.xml — JSON formatında log yaz -->
<configuration>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/var/log/myapp/app.log</file>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>/var/log/myapp/app-%d{yyyy-MM-dd}.log</fileNamePattern>
      <maxHistory>30</maxHistory>
    </rollingPolicy>
  </appender>

  <root level="INFO">
    <appender-ref ref="FILE"/>
  </root>
</configuration>

Bu yaklaşımda uygulama JSON formatında log yazar → Filebeat okur → Elasticsearch'e gönderir. Uygulama Elasticsearch'i bilmez bile.


Elastic Stack Versiyonlama

Tüm Elastic Stack bileşenleri aynı versiyon numarasını paylaşır. Aynı major version'ı kullanmak kritik:

✅ Doğru:
Elasticsearch 8.17.0 + Kibana 8.17.0 + Logstash 8.17.0 + Filebeat 8.17.0

❌ Yanlış:
Elasticsearch 8.17.0 + Kibana 7.17.0  (Major version uyumsuz!)

⚠️ Dikkatli:
Elasticsearch 8.17.0 + Kibana 8.15.0  (Minor version farkı — genelde çalışır ama önerilmez)

Güncelleme kuralı: Önce Elasticsearch'ü güncelle, sonra diğerlerini. Beats → Logstash → Elasticsearch → Kibana sırası önerilir.


Lisanslama

Elastic Stack'in lisans yapısı karmaşık bir geçmişe sahip:

Ücretsiz (Basic/Free)

  • Elasticsearch core

  • Kibana core (Discover, Dashboard, Dev Tools)

  • Beats ve Logstash

  • Ingest Pipelines

  • ILM (Index Lifecycle Management)

  • Snapshot/Restore

Ücretli (Gold/Platinum/Enterprise)

  • Machine Learning

  • Alerting (gelişmiş)

  • Graph Analytics

  • SAML/LDAP Authentication

  • Cross-Cluster Replication

  • Searchable Snapshots

Bu kurs için ücretsiz lisans yeterli. Anlatacağımız her şey free tier'da çalışır.


Best Practices

Tüm bileşenlerde aynı versiyon kullan — major version uyumsuzluğu sorun çıkarır

Basit başla — İlk gün Elasticsearch + Kibana yeter, Logstash/Beats sonra ekle

Beats > Logstash — Basit log toplama için Filebeat yeterli, Logstash'e her zaman ihtiyaç yok

Ingest Pipeline'ı değerlendir — Basit dönüşümler için Logstash'a gerek kalmaz

Docker ile başla — Öğrenme aşamasında en kolay yol

Kibana Dev Tools'u öğren — Bu kursun en çok kullanacağın araç olacak


Yaygın Hatalar

❌ "Her yere Logstash koyayım"

Logstash kaynak yoğun. Basit log toplama için Filebeat yeterli. Logstash'ı sadece karmaşık dönüşümler gerektiğinde kullan.

❌ "Beats ile Logstash aynı şeyi yapar"

Hayır. Beats toplar, Logstash dönüştürür. Complementer bileşenlerdir. Beats → Logstash → Elasticsearch akışı yaygındır.

❌ "Kibana olmadan da olur"

Teknik olarak evet. Ama Kibana'sız Elasticsearch kullanmak, monitörsüz bilgisayar kullanmak gibidir. Dev Tools, Dashboard, Monitoring — hepsi Kibana'da.

❌ "Version karıştırsam ne olur ki"

Major version uyumsuzluğunda bileşenler birbirleriyle konuşmayı reddedebilir. Minor version farkı genelde tolere edilir ama production'da bunu yapmayın.

❌ "Elastic Agent çıktı, Beats öldü"

Beats hâlâ aktif olarak geliştiriliyor ve destekleniyor. Elastic Agent daha yeni ve kolay ama Beats daha olgun ve daha fazla kontrol sunuyor.


Özet

  • Elastic Stack (ELK), Elasticsearch + Kibana + Logstash + Beats'ten oluşan eksiksiz bir veri platformudur

  • Kibana, Elasticsearch'ün görselleştirme ve yönetim arayüzüdür — Dev Tools ile sorgu yazma, Dashboard ile görselleştirme

  • Logstash, karmaşık veri dönüşüm pipeline'ları için kullanılır — Input → Filter → Output mimarisi

  • Beats, hafif veri toplayıcılardır — Filebeat (log), Metricbeat (metrik), Heartbeat (uptime)

  • Ingest Pipeline, Elasticsearch içinde basit veri dönüşümü sağlar — Logstash'e her zaman ihtiyaç yoktur

  • Elastic Agent, Beats'in birleştirilmiş yeni nesil halidir — Fleet ile merkezi yönetim sunar

  • Tüm bileşenlerde aynı versiyon kullanmak kritiktir

Bir sonraki derste Elasticsearch'ü kuracağız — Docker ile 5 dakikada ayağa kaldıracağız!