Logback
Genel Bakış
Amacı Nedir?
Apinizer Gateway üzerindeki API Proxy trafiği için yüksek hacimli logları dosya tabanlı olarak toplar ve operasyon ekiplerine sürekli görünürlük sağlar.
RollingFileAppender parametreleri sayesinde disk tüketimini kontrol eder, günlüklerin günlük/saatlik döngülerle ayrılmasını garanti eder.
Ortam bazlı log dizinleri tanımlanarak Development/Test/Production ayrışması sağlanır ve insidant analizi hızlanır.
Yanlış logPath izinleri hata doğurabileceğinden erişim haklarının OS seviyesinde doğrulanması kritik önem taşır.
Çalışma Prensibi
Integration Flow veya Connector içerisinden Logback bağlantısı talep edildiğinde, sistem yapılandırılmış connection parametrelerini okur.
Logback RollingFileAppender worker node üzerinde dosya tanıtıcılarını reuse ederek aynı log dosyasına eşzamanlı yazım ihtiyacını yönetir.
Worker pod'u, seçilen Ortam'a bağlı sistem kullanıcı hesabı ve dosya izinleriyle hedef dosya sistemine erişir; ek Authentication katmanı gerektirmez.
HTTP isteği/yanıtı başlıkları, gövdeleri ve meta verileri belirlenen logPattern ile formatlanır ve File I/O üzerinden belirtilen logPath/logFileName kombinasyonuna yazılır.
İşlem tamamlandıktan sonra bağlantı aynı worker thread içinde açık kalır ve RollingFileAppender buffer'ı flush edilerek yeni talepleri bekler.
Bağlantı hatası, timeout veya authentication hatası durumunda deployment-result dialog'u ayrıntılı hata mesajıyla devreye girer, kullanıcıya log dizini ve yetki kontrollerini gözden geçirmesi önerilir.
Kullanım Alanları
API Proxy trafik loglarını merkezi olarak saklama ve SIEM entegrasyonuna hazırlama.
İş kritik entegrasyonlarda ayrıntılı request/response izlerini geriye dönük analiz edebilme.
Ortam bazlı log retention politikalarını uygulayarak disk kapasitesini dengede tutma.
Güvenlik incelemelerinde belirli pod veya endpoint loglarını filtreleyerek dışa aktarma.
Teknik Özellikler ve Yetenekler
Temel Özellikler
logPath alanı ile worker node üstündeki dizin seçilir, hatalı klasörler aktif olarak reddedilir.
logFileName ve logFilenamePattern kombinasyonu günlükleri tarih/sıra bazlı böler, kolay arşivlenebilirlik sağlar.
maxFileSize, maxHistory ve totalSizeCap değerleri ile disk tüketimi kontrol altında tutulur.
Her ortam (Development, Test, Production) için ayrı connection parametreleri tanımlama imkanı.
Connection'ı aktif veya pasif hale getirme (enable/disable toggle). Pasif durumda bağlantı kullanılamaz ancak yapılandırması saklanır.
İleri Düzey Özellikler
Test Connection butonu, kaydetmeden önce logPath erişimi ve desen doğrulamasını tetikler.
Name alanı için anlık benzersizlik kontrolü yapılır, çakışma durumunda kayıt engellenir.
Proje bazlı bağlantılar tek tıkla global alana taşınarak çoklu proje kullanımı sağlanır.
"Test Connection" butonu ile bağlantı parametrelerini kaydetmeden önce doğrulama imkanı.
Connection yapılandırmasını ZIP dosyası olarak export etme. Farklı ortamlara (Development, Test, Production) import etme. Versiyon kontrolü ve yedekleme imkanı.
Bağlantı sağlığı, pool durumu ve performans metriklerini izleme.
Connection Parametreleri
Zorunlu Parametreler
Açıklama: Connection adı (benzersiz olmalı)
Örnek Değer: Production_Logback
Notlar: Boşlukla başlamaz, özel karakterler kullanılmamalı
Açıklama: Log dosyalarının yazılacağı dizin
Örnek Değer: /var/log/apinizer/
Notlar: Worker pod'unun yazma izni olmalı, mutlak path önerilir
Açıklama: RollingFileAppender temel dosya adı
Örnek Değer: ApinizerApiProxyTraffic
Notlar: Harf, rakam ve _ kullanılması önerilir
Açıklama: Tarih ve indeks içeren dosya adı deseni
Örnek Değer: %d{yyyy-MM-dd}.%i.log
Notlar: Logback pattern'leri desteklenir, tarih formatı zorunludur
Açıklama: Tek satırlık log formatı
Örnek Değer: %d{yyyy-MM-dd HH:mm:ss.SSS}[%t]%n
Notlar: Tümü Logback conversion pattern'leriyle uyumludur
Açıklama: Tek dosyanın MB cinsinden üst limiti
Örnek Değer: 25
Notlar: Pozitif tamsayı, 1-1024 MB aralığı önerilir
Açıklama: Saklanacak döngü dosyası sayısı
Örnek Değer: 30
Notlar: 0 sınırsız anlamına gelir ancak disk büyüyebilir
Açıklama: Tüm döngü dosyalarının toplam MB limiti
Örnek Değer: 1024
Notlar: 0 ise Logback toplam limit uygulamaz; Production için >512 MB önerilir
İsteğe Bağlı Parametreler
Açıklama: Bağlantının amacı veya kapsamı
Varsayılan Değer: ''
Önerilen Değer: İşlevi ve hedef sistemi belirten kısa açıklama
Açıklama: Yayımlanmış ortam seçimi
Varsayılan Değer: null
Önerilen Değer: Her ortam için ayrı değer seçilmesi önerilir
Açıklama: Belirli worker pod'una log yönlendirmek için etiket
Varsayılan Değer: ''
Önerilen Değer: Multi-node kümelerde sadece hedef pod'a yazmak gerektiğinde kullanın
Açıklama: Bağlantının worker node'lara dağıtılıp dağıtılmayacağı
Varsayılan Değer: true
Önerilen Değer: Sadece yönetim node'unda test amaçlı tutulacaksa false
Açıklama: Bağlantının aktifliği
Varsayılan Değer: true
Önerilen Değer: Production'da her zaman aktif, sorun çözülürken geçici olarak kapatılabilir
Timeout ve Connection Pool Parametreleri
Açıklama: Bağlantı kurulması için maksimum bekleme süresi
Varsayılan: Uygulanmaz
Min: - | Max: -
Birim: milisaniye
Açıklama: İstek yanıtı için maksimum bekleme süresi
Varsayılan: Uygulanmaz
Min: - | Max: -
Birim: milisaniye
Açıklama: Connection pool'daki maksimum bağlantı sayısı
Varsayılan: Uygulanmaz
Min: - | Max: -
Birim: adet
Açıklama: Log buffer'ının diske yazım aralığı (Logback internal)
Varsayılan: 1000
Min: 250 | Max: 5000
Birim: milisaniye
Kullanım Senaryoları
Durum: Yüksek hacimli trafik analizi gerekir
Çözüm: logPath=/var/log/apinizer/proxy, maxHistory=30, totalSizeCap=2048
Beklenen Davranış: Tüm çağrılar 30 günlük geçmişle saklanır, SIEM'e okunabilir
Durum: Belirli endpoint logları istenir
Çözüm: logFilenamePattern=%d{yyyy-MM-dd}-security.%i.log
Beklenen Davranış: Tarih bazlı dosyalar hızlıca filtrelenir, olay süresi içinde inceleme yapılır
Durum: QA ortamında ayrıntılı log gerekir
Çözüm: environmentId=Test, maxFileSize=10
Beklenen Davranış: Test logları küçük dosyalara ayrılır, geliştiriciler kolayca indirir
Durum: Belirli worker pod'unda sorun vardır
Çözüm: logPodName=gateway-worker-2
Beklenen Davranış: Sadece ilgili pod'dan log alınır, hedef sorun izole edilir
Durum: KVKK kapsamında log saklama
Çözüm: maxHistory=0, totalSizeCap=5120
Beklenen Davranış: Sonsuz döngü yerine toplam kota ile yasal saklama süresi sağlanır
Durum: Yedek node'a log kopyalama
Çözüm: logPath=/mnt/dr/logs, Enable Export All açık
Beklenen Davranış: Failover senaryosunda tüm loglar paylaşılan depoya yazılır
Connection Yapılandırma
Yeni Logback Oluşturma
- Sol menüden Connection → Logback bölümüne gidin.
- Sağ üstteki [+ Create] butonuna tıklayın.
Enable Status (Aktif Durumu): Toggle ile aktif/pasif durumu ayarlayın. Yeni connection'lar varsayılan olarak aktiftir.
Name (İsim) Zorunlu:
Örnek: Production_Logback
- Benzersiz isim girin, boşlukla başlamaz.
- Sistem otomatik kontrol eder. Yeşil tik: kullanılabilir. Kırmızı çarpı: mevcut isim.
Description (Açıklama): Örnek: "API proxy trafik logları"
- Maks. 1000 karakter.
- Connection'ın amacını açıklayın.
Sayfanın üst kısmındaki işlem butonları alanında, [<> Variable] butonunu kullanarak dinamik değer seçebilir, Global variable ifadeleri sayesinde connection parametrelerini sabit değer yerine değişken tabanlı yönetebilirsiniz. Detaylı bilgi için Dinamik Değişkenler sayfasını inceleyebilirsiniz.
- Dropdown menüden ortam seçin: Development, Test, veya Production.
- Her ortam için farklı connection parametreleri tanımlanabilir.
- logPath alanına worker node'un yazabildiği mutlak dizini girin.
- logFileName ve logFilenamePattern alanlarıyla RollingFileAppender dosya döngüsünü belirleyin; tarih ve indeks içermesine dikkat edin.
- Yetkisiz dizinler deploy aşamasında hata üretir.
- logPattern alanını Logback conversion pattern'leriyle doldurun, gerekirse thread adı veya request-id ekleyin.
- Eğer belirli pod'a yönlendirme gerekiyorsa logPodName alanını kullanın.
- Logback dosya yazımı için ayrı timeout yoktur; gerekirse JVM seviyesinde flush interval ayarlarını deployment descriptor üzerinden güncelleyin.
- Disk kotaları için maxFileSize, maxHistory, totalSizeCap değerlerini operasyon politikalarına uygun şekilde belirleyin.
- Worker node kullanıcı hesabının logPath üzerinde yazma izni olduğundan emin olun.
- Gerekiyorsa dosya sistemi ACL'leri veya Kerberos destekli paylaşım noktaları kullanın.
- Production ortamında paylaşılan dizinlere sadece yetkili servis hesaplarının erişmesine izin verin.
- [Test Connection] butonuna tıklayın.
- Bağlantı parametrelerinin doğru olup olmadığını test edin.
- Başarılı: Yeşil onay mesajı, Başarısız: Hata detayları gösterilir.
- Sağ üstteki [Save and Deploy] butonuna tıklayın.
Kontrol Listesi: Benzersiz isim. Zorunlu alanlar dolu. Test connection başarılı (önerilir)
Sonuç:
- Connection listeye eklenir.
- Integration Flow ve Connector adımlarında kullanılabilir hale gelir.
- Ortama göre aktif olur.
Connection başarıyla oluşturuldu! Artık Integration Flow ve Connector adımlarında kullanabilirsiniz.
Connection'ı Silme
Connection'ı silmek için:
- Connection listesinde satır sonundaki ⋮ menüsünden Delete seçeneğini tıklayın.
- Onay dialogunda silme işlemini onaylayın.
Silmeden Önce Kontrol Edin:
- Integration Flow veya Connector adımlarında kullanılıyor olabilir.
- Gerekirse alternatif bir connection atayın.
- Silmeden önce Export ile yedek alın.
- Silmek yerine connection'ın aktif durumunu pasif hale getirin.
- Connection pasif olur ancak silinmez.
- Gerektiğinde aktif hale getirerek yeniden kullanabilirsiniz.
Connection'ı Dışa/İçe Aktarma
Bu adımda kullanıcı, mevcut connection'ları yedekleme, farklı ortamlara taşıma veya paylaşma amacıyla dışa aktarabilir (export) ya da daha önce dışa aktarılmış bir connection'ı tekrar içe aktarabilir (import). Bu işlem, sürüm yönetimi, test ve üretim ortamları arasında geçiş veya ekipler arası paylaşım süreçlerinde veri bütünlüğünü korumak için kullanılır.
Dışa Aktarma (Export)
- Connection listesinde satır sonundaki ⋮ menüsünden Export seçeneğini tıklayın.
- ZIP dosyası otomatik olarak indirilir.
Format: {Date}-logback-integration-{ConnectionName}-export.zip
Örnek: 13 Nov 2025-logback-integration-Production_Logback-export.zip
- Connection JSON dosyası
- Metadata bilgileri
- Bağımlılık bilgileri (örneğin sertifikalar, key store)
- Yedekleme
- Ortamlar arası taşıma (Test → Prod)
- Versiyonlama
- Ekip veya proje bazlı paylaşım
İçe Aktarma (Import)
- Ana listede [Import Logback] butonuna tıklayın.
- İndirilen ZIP dosyasını seçin.
- Sistem kontrolleri: Format geçerli mi? İsim çakışması var mı? Bağımlılıklar mevcut mu?
- Ardından [Import] butonuna tıklayın.
Senaryo 1: İsim Çakışması → Eski connection'ın üzerine yazın veya yeni bir isimle oluşturun.
Senaryo 2: Eksik Bağımlılıklar → Eksik sertifikaları veya key store'ları önce oluşturun veya import sırasında çıkarın.
Connection'ın Kullanım Alanları
Adımlar:
- Connection'ı oluşturun.
- Test Connection ile bağlantıyı doğrulayın.
- Save and Deploy ile kaydedin ve etkinleştirin.
- Connection'ın Enabled durumda olduğundan emin olun.
Logback RollingFileAppender ile dosya tabanlı log yazımı gerektiren adımlarda connection seçilir. Örnek: "Logback Appender", "File Logger", "Rolling File Writer" gibi adımlar. Bağlantı seçimi bu adımların yapılandırmasında yer alan Connection alanından yapılır.
Zamanlanmış görevlerde (ör. belirli aralıklarla log arşivleme, log rotasyonu vb.) bağlantı seçilerek dosya tabanlı log yazımı gerçekleştirilir. Connection değiştiğinde, job çalışma davranışı da buna göre güncellenir.
Connection Test özelliği ile bağlantının doğruluğu Integration Flow'dan bağımsız olarak kontrol edilebilir. Bu test hata ayıklama sürecinde kritik önem taşır.
Best Practices
Yapılması Gerekenler ve En İyi Uygulamalar
Kötü: Temp dizinlerini Production'da kullanmak.
İyi: Ayrı bir /var/log/apinizer dizini açmak.
En İyi: Ayrılmış disk veya mount point üzerinde sadece servis hesabına izin vermek.
Kötü: Desende tarih kullanmamak.
İyi: Günlük tarihli desen kullanmak.
En İyi: Tarih + indeks ve uygulama adı içeren desenle SIEM uyumluluğu sağlamak.
Kötü: maxHistory=0 ve totalSizeCap=0 bırakmak.
İyi: Trafiğe göre makul değerler belirlemek.
En İyi: Disk kapasitesi, regülasyon ve yedekleme süreçlerine göre otomatik temizleme kuralları koymak.
Kötü: Tüm pod'ları tek dizine yazdırmak.
İyi: Sorunlu pod'lar için logPodName kullanmak.
En İyi: Her pod için ayrı dizin + merkezi toplama pipeline'ı kurmak.
Kötü: Tüm ortamlarda aynı connection parametrelerini kullanmak.
İyi: Her ortam için ayrı connection oluşturmak.
En İyi: Environment seçeneğini kullanarak tek connection'da tüm ortamları yönetmek, ortamlar arası geçişte sadece environment değiştirmek
Kötü: Connection'ı test etmeden kaydetmek ve deployment etmek.
İyi: Kaydetmeden önce Test Connection ile doğrulamak.
En İyi: Her parametre değişikliğinden sonra test etmek, production'a geçmeden önce test ortamında tam entegrasyon testi yapmak
Güvenlik En İyi Uygulamaları
logPath dizinine sadece ilgili worker servis hesaplarının yazabileceği POSIX izinleri tanımlayın, root paylaşımlarını Production'da açmayın
NFS/Samba gibi paylaşımlarda network segmentini kısıtlayın, erişimlerde IP tabanlı allowlist uygulayın
logPattern'e kişisel veri yazılmasını engelleyin, gerekirse privacy setting bileşenleriyle hassas alanları anonimleştirin
Kullanıcı adı ve şifre gibi hassas bilgileri environment variable veya secret manager kullanarak saklayın. Kimlik bilgilerini kod veya konfigürasyon dosyalarına hardcode etmeyin. Periyodik olarak şifreleri güncelleyin
Production ortamında mutlaka SSL/TLS aktif edin. Self-signed sertifikalar sadece development ortamında kullanın. Sertifika expiration tarihlerini takip edin ve zamanında yenileyin
Connection yapılandırmasını sadece yetkili kullanıcıların değiştirmesine izin verin. Connection değişiklik loglarını saklayın. Kritik connection'lar için değişiklik approval süreci uygulayın
Kaçınılması Gerekenler
Neden kaçınılmalı: root dizininde log tutmak yanlış izinlere yol açar, diğer servisleri etkiler
Alternatif: Ayrı mount edilmiş log dizini kullanın
Neden kaçınılmalı: Tarihsiz dosyalar overwrite olur, log kaybı yaşanır
Alternatif: %d içeren desenler kullanın
Neden kaçınılmalı: Disk dolduğunda gateway durabilir
Alternatif: maxFileSize, maxHistory ve totalSizeCap değerlerini sistem kapasitesine göre belirleyin
Neden kaçınılmalı: Test verileri production sistemine yazılabilir, gerçek kullanıcılar etkilenebilir, güvenlik riski oluşur
Alternatif: Her ortam için ayrı connection oluşturun, environment parametresini kullanın, connection isimlerini ortama göre prefix ekleyerek ayırın (Test_, Prod_)
Neden kaçınılmalı: Ağ gecikmelerinde connection sürekli timeout olur, Entegrasyon adımları başarısız olur
Alternatif: Gerçek kullanım senaryolarına göre timeout değerlerini ayarlayın, network latency'yi ölçün ve timeout'ları buna göre belirleyin
Neden kaçınılmalı: Her istekte yeni bağlantı açılır, performans düşer, kaynak tüketimi artar, hedef sistem yükü artar
Alternatif: Connection pool aktif edin, pool size'ı trafik hacmine göre ayarlayın, pool monitoring kurun
Performans İpuçları
Öneri: SSD tabanlı dizinleri tercih edin, noatime mount seçeneği kullanın
Etki: Yazma gecikmeleri azalır, log kaydı kesintisizleşir
Öneri: logPattern içerisine sadece ihtiyaç duyulan alanları alın, pahalı JSON serileştirmelerden kaçının
Etki: CPU kullanımı düşer, log throughput artar
Öneri: maxHistory ve totalSizeCap değerlerini gerçek disk kapasitesiyle eşleştirin, background cleanup scriptleri planlayın
Etki: Disk doluluk riskleri ortadan kalkar, manuel müdahale ihtiyacı azalır
Öneri: Pool size'ı peak trafiğe göre ayarlayın (önerilen: eşzamanlı istek sayısı × 1.5), idle connection timeout'ları belirleyin, pool health check yapın
Etki: Bağlantı açma maliyeti %80 azalır, yanıt süreleri düşer, kaynak kullanımı optimize edilir
Öneri: Gerçek network latency'yi ölçün, timeout değerlerini buna göre ayarlayın, çok düşük veya çok yüksek timeout'lardan kaçının
Etki: Gereksiz beklemeler önlenir, hızlı fail-over sağlanır, kullanıcı deneyimi iyileşir
Öneri: Connection pool kullanımını izleyin, timeout oranlarını takip edin, connection health check yapın, alerting kurun
Etki: Sorunlar proaktif tespit edilir, performans darboğazları erken belirlenir, kesinti süresi azalır
Sorun Giderme (Troubleshooting)
Log Dosyası Oluşmuyor
logPath yanlış, worker yazma izni yok veya connection disable durumda olabilir.
logPath değerini doğrulayın.
Worker pod kullanıcı izinlerini kontrol edin.
Connection enable durumunu açın.
Dosya Boyutu Limitini Aşıyor
maxFileSize düşük, maxHistory=0 veya totalSizeCap=0 olabilir.
maxFileSize'ı trafiğe göre artırın.
maxHistory'ye limit verin.
totalSizeCap tanımlayın ve redeploy edin.
Connection Timeout
Network gecikmesi, hedef sistem yavaş yanıt veriyor veya timeout değeri çok düşük olabilir.
Network connectivity kontrol edin.
Hedef sistem sağlığını kontrol edin.
Timeout değerlerini artırın.
Connection loglarını inceleyin.
Authentication Failed
Yanlış kullanıcı adı/şifre, expired credentials veya yetki problemi olabilir.
Kimlik bilgilerini doğrulayın.
Hedef sistemde kullanıcının aktif olduğunu kontrol edin.
Gerekli yetkilerin verildiğini kontrol edin.
SSL/TLS sertifikalarını kontrol edin.
Pool Exhausted
Pool size çok düşük, connection leak var veya trafik çok yüksek olabilir.
Pool size'ı artırın.
Connection'ların düzgün kapatıldığını kontrol edin.
Idle connection timeout'ları ayarlayın.
Connection kullanım metriklerini izleyin.
Connection Test Başarılı Ama Entegrasyon Akışı Hata Veriyor
Integration/Connector adımında farklı connection seçili olabilir, adım yanlış yapılandırılmış olabilir veya Flow/Job redeploy edilmemiş olabilir.
Connection'ın enable toggle'ının aktif olduğunu kontrol edin.
Integration Flow'da doğru connection'ın seçildiğini doğrulayın.
Connection'ı tekrar deploy edin.
Integration Flow veya Job'ı redeploy edin.
Gateway loglarını kontrol edin.
Sık Sorulan Sorular (SSS)
Logback Connection için minimum hangi parametreleri girmeliyim?
Name, logPath, logFileName, logFilenamePattern, logPattern ve tüm limit alanları doldurulmalıdır; diğerleri isteğe bağlıdır ancak tavsiye edilir.
Logları aynı anda hem dosyaya hem de harici sisteme aktarabilir miyim?
Evet, Logback Connection dosya yazarken Integration Flow'da paralel Connector adımlarıyla REST API veya Message Queue çıkışları tanımlanabilir.
logPodName değerini boş bırakırsam ne olur?
Boş bırakıldığında tüm worker pod'ları aynı logPath altında döner; spesifik pod takibi yapmayacaksanız boş bırakmak güvenlidir.
maxHistory ile totalSizeCap çelişirse hangisi öncelikli olur?
Logback öncelikle maxHistory değerine göre temizler, ardından totalSizeCap aşımı devam ediyorsa en eski dosyaları silmeye devam eder.
Logları harici SIEM aracına nasıl taşıyabilirim?
Rolling dosyalar tamamlandığında external agent'lar veya cron job'lar logPath'i okuyup SIEM'e push edebilir; dosya desenini SIEM beklentisiyle uyumlu tutun.
Aynı connection'ı birden fazla Integration Flow'da kullanabilir miyim?
Evet, aynı connection birden fazla Integration Flow veya Connector adımında kullanılabilir. Bu merkezi yönetim sağlar ve konfigürasyon tutarlılığını garanti eder. Ancak connection'da yapılan değişiklikler tüm kullanım yerlerini etkileyeceği için dikkatli olunmalıdır.
Connection pool kullanmak zorunlu mudur?
Connection pool kullanımı zorunlu değildir ancak yüksek trafikli sistemlerde şiddetle önerilir. Her istekte yeni bağlantı açmak yerine mevcut bağlantıları yeniden kullanmak performansı önemli ölçüde artırır.
Test ve Production için farklı connection'lar mı oluşturmalıyım?
Evet, her ortam için ayrı connection oluşturmanız önerilir. Alternatif olarak environment parametresini kullanarak tek connection içinde tüm ortamları yönetebilirsiniz. Bu yaklaşım daha kolay yönetim ve daha az hata riski sağlar.
Test Connection başarılı ama Integration Flow'da çalışmıyor, neden?
Birkaç neden olabilir:
- Connection enable toggle'ı pasif olabilir
- Integration adımında farklı bir connection seçili olabilir
- Connection deploy edilmemiş olabilir
- Integration Flow henüz redeploy edilmemiş olabilir