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şen | Rol | Analoji |
|---|---|---|
| Beats | Veri toplama (hafif agent'lar) | Sahadaki muhabirler |
| Logstash | Veri dönüştürme ve yönlendirme | Editör masası — gelen haberi düzenler |
| Elasticsearch | Depolama, indeksleme, arama | Kütüphane — arşivler ve aranabilir kılar |
| Kibana | Görselleştirme ve yönetim | Televizyon 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: 5601Kibana 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:
Input: Nginx access log dosyasını okur
Filter — Grok: Ham log satırını yapılandırılmış alanlara parse eder
Filter — Date: Zaman damgasını standart formata çevirir
Filter — GeoIP: IP adresinden ülke/şehir bilgisi çıkarır
Filter — Mutate: Veri tiplerini düzeltir, gereksiz alanları kaldırır
Output: Sonucu Elasticsearch'e, günlük index'lere yazar
Logstash'in Güçlü Yanları
| Özellik | Açıklama |
|---|---|
| 200+ Plugin | Input, filter, output için zengin plugin ekosistemi |
| Grok Patterns | Yapılandırılmamış metni parse etmek için güçlü pattern'ler |
| Conditional Logic | if/else ile akış kontrolü |
| Multiple Pipelines | Birden fazla pipeline paralel çalışabilir |
| Dead Letter Queue | İşlenemeyen event'ler kaybolmaz |
| Persistent Queue | Pipeline'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
| Beat | Ne Toplar? | Kullanım Alanı |
|---|---|---|
| Filebeat | Log dosyaları | Uygulama logları, sistem logları |
| Metricbeat | Sistem ve servis metrikleri | CPU, RAM, disk, Docker, MySQL, Nginx stats |
| Packetbeat | Ağ trafiği | HTTP, DNS, MySQL query'leri, Redis komutları |
| Heartbeat | Uptime (erişilebilirlik) | Servislerin ayakta olup olmadığı |
| Auditbeat | Audit verileri | Dosya bütünlüğü, kullanıcı aktivitesi |
| Winlogbeat | Windows Event Log | Windows sunucu logları |
| Functionbeat | Serverless fonksiyonlar | AWS 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: trueFilebeat'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 -eNginx, 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
| Özellik | Logstash | Ingest Pipeline |
|---|---|---|
| Nerede çalışır | Ayrı JVM process | Elasticsearch içinde |
| Kaynak tüketimi | Yü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 logic | Gelişmiş (if/else) | Temel (conditions) |
| Karmaşık dönüşüm | ✅ | Sı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üncellenirNe Zaman Hangi Yaklaşım?
| Senaryo | Tavsiye |
|---|---|
| Yeni kurulum, sıfırdan başlıyorsun | Elastic Agent + Fleet |
| Mevcut Beats kurulumu var | Beats'te devam edebilirsin |
| Çok özel konfigürasyon gerekiyor | Beats (daha fazla kontrol) |
| Basit/standart log + metric toplama | Elastic Agent + Fleet |
| Air-gapped (internet yok) ortam | Beats (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ırAmazon 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
| Kriter | Self-Hosted | Managed (Cloud) |
|---|---|---|
| Kontrol | Tam kontrol | Sınırlı (ayarlar) |
| Maliyet | Sunucu + insan maliyeti | Aylık abonelik |
| Bakım | Sen yaparsın | Sağlayıcı yapar |
| Ölçekleme | Manuel | Otomatik/yarı otomatik |
| Güvenlik | Sen konfigüre edersin | Varsayılan aktif |
| Öğrenme | Daha çok şey öğrenirsin | Altyapı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!
AI Asistan
Sorularını yanıtlamaya hazır