İçeriğe geç
Muhammet Şafak
en
Soran: Burak Cevaplandı:

Logları OpenSearch'e gönderirken Fluent Bit ile arasına Kafka/Redis buffer koymalı mıyım?


Soru

Go ve Laravel servislerimizin loglarını merkezi bir OpenSearch kümesine topluyoruz. Akış şöyle: konteynerler stdout'a basıyor, sunuculardaki Fluent Bit yakalayıp doğrudan OpenSearch API'ına gönderiyor. Ama saniyede 40.000+ log satırını geçtiğimiz anlarda OpenSearch indexing'de darboğaz oluşuyor; Fluent Bit yetiştiremeyince backpressure başlıyor ve uygulama konteynerlerinin I/O'su bloke oluyor. Araya buffer olarak Redis listesi mi yoksa Kafka mı koymalıyım? Veri kaybını (at-least-once) önlerken sunucularda disk/bellek şişmesini nasıl engellerim?

Cevap

Kısa cevap: Evet, araya bir buffer koymak doğru hamle — ama Redis listesi ile Kafka arasındaki seçim, kabul ettiğin garanti seviyesine bağlı.

Yaşadığın şey klasik backpressure: OpenSearch’in indexleme hızı üretim hızının altına düşünce zincir geriye doğru tıkanıyor, en sonunda uygulama konteynerinin stdout’u bloke oluyor. Çözüm, üretimi (uygulama) tüketimden (OpenSearch) ayıran dayanıklı bir ara katman.

  1. Önce Fluent Bit’in kendi disk buffer’ını aç. storage.type filesystem ve output tarafında storage.total_limit_size ile Fluent Bit, OpenSearch yavaşladığında logu RAM yerine diske yazar; uygulamaya doğru basınç gitmez. Harici bir kuyruk eklemeden önce ölçülmesi gereken ilk şey bu — çoğu zaman tek ihtiyacın olan budur.
  2. Redis listesi: ucuz ama riskli. Bellekte tutar; RPUSH/LPOP basit ama AOF kapalıysa bir restart’ta veriyi kaybedersin ve liste şişerse Redis’in RAM’ini doldurur. Kaybı dert olmayan loglar için buffer olarak iş görür, finansal/audit logu için değil.
  3. Kafka: 40k/s’in doğal sahası. Disk tabanlı, retention’lı, replay edilebilir, consumer group’larıyla yatay tüketim. at-least-once’ı doğal verir. Bedeli operasyonel: kümeyi ayağa kaldırıp beslemek gerekir. Hacmin kalıcıysa doğru araç odur.
  4. at-least-once’ı consumer’da idempotent kıl. OpenSearch’e yazarken her belgeye deterministik bir _id ver (örn. kaynak+offset hash’i). Aynı mesaj iki kez gelse de aynı _id üstüne yazar; mükerrer kayıt oluşmaz.

Sonuç: Önce Fluent Bit filesystem buffer + OpenSearch tarafında bulk ayarı ve ISM (rollover) ile indexlemeyi rahatlat. Bu yetmiyorsa Kafka’ya geç — Redis’i yalnızca kaybını göze alabildiğin loglarda kullan. Ve altın kural: uygulama konteynerini log yazarken asla bloklatma. Log fire-and-forget olmalı; kritik veriyi (ödeme, audit) log hattı üzerinden taşıma, onu ayrı ve garantili bir yoldan yürüt.

İlgili Yazılar

Etiketler: #altyapı#gözlemlenebilirlik#kafka
Paylaş:

Yorumlar

Yorum yapmak için GitHub hesabınızla giriş yapmanız yeterli. Yorumlar GitHub Discussions üzerinde saklanır.

Diğer Sorular

Tüm sorular

Sitede Ara

Yazı, proje ve sayfalarda arama yapmak için yazmaya başlayın.

Esc ile kapat Pagefind ile güçlendirildi