Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Bu yazıda log sistemlerinin neden karmaşık hale geldiğini ve bu karmaşıklığı basitleştirmek için kullanılan “canonical log line” yaklaşımını öğreneceksin. Özellikle production ortamında hızlı analiz yapmanın neden zor olduğunu ve bunu nasıl daha pratik hale getirebileceğini net şekilde anlayacaksın.
Şimdi şöyle bir düşün…
Bir production problemi var ve sen loglara bakıyorsun. Ekranda yüzlerce, binlerce satır log akıyor. Ama aslında senin aradığın şey çok basit:
“Bu request’te ne oldu?”
Sorun şu: loglar genelde çok parçalıdır.
Bir request için:
Yani şöyle bir durum oluşur:
Aynı request’e ait bilgi farklı yerlere dağılmıştır.
Bunu şöyle hayal edebilirsin:
Bir hikayeyi 10 parçaya bölmüşler ve her parça farklı sayfada yazıyor. Sen de hikayeyi anlamaya çalışıyorsun.
Bu problemi çözmek için geliştiriciler genelde structured logging kullanır.
Yani loglara şu tarz bilgiler eklenir:
Bu sayede aynı request’e ait logları birleştirebilirsin.
Yani şöyle düşün:
Her parçaya bir “etiket” yapıştırıyorsun ve diyorsun ki “bunlar aynı hikayeye ait”.
Ama burada da bir problem var:
👉 Hâlâ veriler farklı satırlarda
Yani analiz yapmak için:
Bu hem pahalı (compute açısından) hem de yavaş.
Sen de fark etmişsindir ki…
Bir şeyleri anlamak için sürekli şu işlemi yapıyoruz:
“Bu request’in tüm loglarını topla ve analiz et”
Ama bu şu demek:
Özellikle Splunk gibi sistemlerde query yazmak bile ayrı bir iş.
İşte burada Stripe çok basit ama etkili bir çözüm getiriyor:
👉 Her request’in sonunda tek bir özet log yaz.
Buna “canonical log line” deniyor.
Canonical log line şu mantıkla çalışır:
“Bu request hakkında bilmem gereken her şeyi tek satırda ver”
Bu log içinde şunlar olabilir:
Yani tüm kritik bilgiler tek satırda toplanır.
Bunu şöyle hayal edebilirsin:
Artık hikayeyi 10 parçadan okumuyorsun, sana direkt özet çıkarılmış hali veriliyor.
En kritik avantajı şu:
👉 Artık logları “birleştirmene gerek yok”
Örneğin şu soruya cevap arıyorsun:
“En çok rate limit’e takılan kullanıcılar kim?”
Eskiden:
Şimdi:
Bu kadar.
Bu yaklaşımın teknik olarak büyük avantajları var:
Yani şöyle düşün:
Ham veriyi analiz etmek yerine, önceden hazırlanmış özet üzerinden gidiyorsun.
Stripe bunu şöyle çözmüş:
Burada önemli bir nokta var:
Eğer herkes farklı isimlerle key yazarsa:
… sistem kaosa döner.
Bu yüzden Stripe şunu yapıyor:
👉 Standart naming convention
Yani:
Bu yaklaşım özellikle şu durumlarda çok değerli:
Ama her sistem için şart değil.
Loglar aslında en güçlü debug aracımız ama çoğu zaman fazla parçalı oldukları için kullanımı zorlaşıyor. Structured logging bu sorunu kısmen çözse de verinin dağınık olması hâlâ büyük bir problem yaratıyor. Canonical log line yaklaşımı ise bu sorunu kökten basitleştiriyor: her request için tek bir özet log üretmek. Böylece logları birleştirme ihtiyacı ortadan kalkıyor, sorgular hızlanıyor ve sistem çok daha anlaşılır hale geliyor. Özellikle production ortamında hızlı karar vermek gerektiğinde bu yaklaşım ciddi bir fark yaratıyor.
Bu yazı Stripe’s Smarter Approach to Structured Logging – Canonical Log Lines videosundan ilham alınarak yazılmıştır.