Graylog Nedir? Docker Compose ile Adım Adım Kurulum Rehberi

Sayfayı kopyala
Modern ve dağıtık yazılım mimarilerinde birden fazla sunucuya, mikroservise veya veritabanına dağılmış durumdaki log (kayıt) dosyalarını tek tek incelemek tam bir kabusa dönüşebilir. Graylog, bu karmaşayı önlemek ve log verilerini tek bir merkezden yönetmek için geliştirilmiş güçlü bir platformdur.
💡 Özet (TL;DR):
- Graylog Nedir? Farklı kaynaklardan gelen log verilerini gerçek zamanlı olarak toplayan, dizinleyen (index) ve görselleştiren açık kaynaklı bir log yönetim aracıdır.
- Altyapı Gereksinimleri: Ayarlar ve yapılandırma verileri için MongoDB, logların saklanması ve hızlıca aranabilmesi için ise OpenSearch (veya Elasticsearch) arama motorunu kullanır.
- Ne Zaman Tercih Edilmeli? Dağıtık bir mimariye sahipseniz, anlık hata takipleri yapmak istiyorsanız ve belirli durumlarda (örneğin 5 dakikada 10'dan fazla kritik hata alındığında) otomatik uyarılar (alert) oluşturmak istiyorsanız idealdir.
Merkezi Loglama Neden Gereklidir?
Tek bir sunucuda çalışan küçük projelerde logları tail -f /var/log/nginx/access.log komutuyla konsoldan izlemek yeterli olabilir. Ancak sunucu sayısı arttıkça veya Docker/Kubernetes gibi konteyner teknolojileri kullanılmaya başlandığında, her bir sunucuya tek tek bağlanıp log dosyalarını aramak sürdürülemez bir hâl alır.
Merkezi loglama çözümleri, tüm kaynaklardan gelen verileri alır, bunları anlamlandırıp (parse) yapısal verilere (JSON, GELF vb.) dönüştürür ve tek bir panel üzerinden hızlı arama yapmanıza olanak tanır.
Docker Compose ile Graylog Kurulumu
Graylog, 5.x+ sürümleriyle birlikte Elasticsearch yerine OpenSearch arama motorunu birincil ve tavsiye edilen veri tabanı olarak kullanmaya başlamıştır.
Aşağıda hem geliştirme (development) hem de hafif prodüksiyon ortamları için kullanabileceğiniz, MongoDB 5.0 ve OpenSearch 2.x tabanlı modern bir docker-compose.yml yapılandırması bulabilirsiniz:
version: '3.8'
services:
mongodb:
image: mongo:5.0
container_name: graylog-mongodb
volumes:
- mongodb_data:/data/db
opensearch:
image: opensearchproject/opensearch:2.11.0
container_name: graylog-opensearch
environment:
- OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g
- bootstrap.memory_lock=true
- discovery.type=single-node
- plugins.security.disabled=true
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- opensearch_data:/usr/share/opensearch/data
graylog:
image: graylog/graylog:5.2
container_name: graylog-server
environment:
# En az 96 karakter uzunluğunda rastgele bir gizli anahtar üretin (örn: pwgen -N 1 -s 96)
- GRAYLOG_PASSWORD_SECRET=some_very_long_password_secret_at_least_96_characters_long
# Admin paneli giriş şifrenizin SHA-256 hash'i (Varsayılan şifre: admin)
- GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
- GRAYLOG_HTTP_BIND_ADDRESS=0.0.0.0:9000
- GRAYLOG_ELASTICSEARCH_HOSTS=http://opensearch:9200
- GRAYLOG_MONGODB_URI=mongodb://mongodb:27017/graylog
ports:
# Web Arayüzü & REST API portu
- "9000:9000"
# GELF UDP Girişi (Log göndermek için)
- "12201:12201/udp"
# Standart Syslog UDP Girişi
- "1514:1514/udp"
volumes:
- graylog_data:/usr/share/graylog/data
depends_on:
- mongodb
- opensearch
volumes:
mongodb_data:
opensearch_data:
graylog_data:
Konteynerleri Başlatma
OpenSearch motorunun sağlıklı çalışabilmesi için işletim sisteminizin sanal bellek limitini (vm.max_map_count) artırmanız gerekir. Terminalden şu komutları çalıştırarak sistemi başlatabilirsiniz:
# Bellek limitini artır (Linux ortamları için zorunludur)
sudo sysctl -w vm.max_map_count=262144
# Konteynerleri arka planda başlat
docker-compose up -d
Kurulum tamamlandıktan sonra tarayıcınızdan http://localhost:9000 adresine giderek kullanıcı adına admin, şifreye admin yazıp giriş yapabilirsiniz.
Log Analiz Araçları Karşılaştırması
| Kriter | Graylog | ELK Stack (Elasticsearch, Logstash, Kibana) | Grafana Loki |
|---|---|---|---|
| Kullanım Amacı | Doğrudan log yönetimi, kolay arama ve alarm | Genel veri görselleştirme ve analitik platformu | Hafif, az kaynak tüketen Kubernetes odaklı loglama |
| Boru Hattı (Pipeline) | Arayüz üzerinden kolayca kural yazma ve yönlendirme | Logstash yapılandırma dosyaları ile zorlu süreç yönetimi | Promtail/Logql kuralları |
| Kaynak Tüketimi | Yüksek (Loglardaki her kelime dizinlenir) | Yüksek (Tüm alanlar dizinlenir) | Düşük (Sadece metadata etiketleri dizinlenir) |
| Hazır Alarm Sistemi | Var (Yerleşik ve arayüzden yönetilebilir) | Eklenti veya Lisans gerektirir | Grafana Alerting üzerinden kurulur |
Sıkça Sorulan Sorular (FAQ)
GELF (Graylog Extended Log Format) nedir?
GELF, Graylog tarafından standart Syslog'un limitlerini aşmak için geliştirilmiş JSON tabanlı bir log formatıdır. Büyük boyutlu log dosyalarını sıkıştırarak taşır, parçalı verilerin kaybolmasını engeller ve log mesajlarına özel ek parametreler (meta-data) eklemenize imkan tanır.
Graylog için 2GB RAM'li bir sunucu yeterli mi?
OpenSearch ve Elasticsearch doğası gereği yüksek bellek tüketir. Geliştirme ortamı için en az 4GB, stabil bir canlı (production) ortamı için ise en az 8GB RAM'e sahip sunucuları tercih etmelisiniz. Eğer kaynaklarınız çok kısıtlıysa, alternatif olarak Grafana Loki kullanmayı düşünebilirsiniz.
Stream ve Pipeline arasındaki fark nedir?
- Stream: Log verilerini belirli kurallara göre gerçek zamanlı olarak klasörlere ayırmanızı sağlar (Örn: Nginx loglarını ayrı, PHP hata loglarını ayrı bir klasöre yönlendirmek).
- Pipeline: Gelen log verileri dizinlenmeden önce üzerlerinde manipülasyon yapmanızı sağlar. Örneğin log içerisindeki hassas verileri (kredi kartı no gibi) maskeleyebilir, loglara IP adresi üzerinden coğrafi konum (GeoIP) bilgisi ekleyebilirsiniz.
Resmi Bağlantılar ve Dokümantasyonlar
Bu Yazıda Yapılan Değişiklikler
- 20.06.2026: Yazı içeriği modernize edildi. Graylog 5.x ve OpenSearch 2.x desteğiyle Docker Compose yapılandırması güncellendi. Log araçları karşılaştırma tablosu, GELF detayları, Stream/Pipeline çalışma prensipleri ve LLO geliştirmeleri eklendi.
- 11.05.2022: Yazı özeti düzenlendi.
