Log (Günlük Kaydı): Sistemin Ne Yaptığını Geriye Dönük Okumak
Log, bir yazılımın ya da sistemin çalışırken ürettiği zaman damgalı olay kayıtlarıdır. Log seviyeleri, örnekleri ve doğru loglama pratiklerini öğrenin.
Log nedir?
Log (günlük kaydı), bir yazılımın, sunucunun ya da cihazın çalışırken ürettiği, zaman damgası taşıyan olay kayıtlarıdır. Bir kullanıcı giriş yaptı, bir istek alındı, bir veritabanı sorgusu zaman aşımına uğradı, bir dosya silindi gibi olayların her biri bir satır ya da bir kayıt olarak tutulur.
Loglar sistemin hafızasıdır. Bir sorun yaşandığında ne olduğunu, ne zaman olduğunu ve hangi bileşenin etkilendiğini sonradan okumak mümkün olur. Hata ayıklama, güvenlik denetimi, performans analizi ve yasal kayıt tutma gibi birçok ihtiyaç logların varlığına dayanır.
Uçak kara kutusu benzetmesi açıklayıcıdır: normal zamanlarda kimse bakmaz, ama bir şey ters gittiğinde en değerli kaynak odur. Kötü loglanmış bir sistem, olay anında kör uçmak demektir.
Bir log kaydında neler bulunur?
Tipik bir kayıt şu alanlardan oluşur: • Zaman damgası: olayın ne zaman olduğu, tercihen saat dilimi belirtilerek. • Seviye: olayın önem derecesi. • Kaynak: hangi uygulama, servis ya da sunucunun ürettiği. • Mesaj: olayın kısa açıklaması. • Bağlam: kullanıcı kimliği, istek kimliği, işlem adı, hata ayrıntısı gibi tanıyıcı alanlar.
Log seviyeleri önem sırasına göre ayrılır. Yaygın adlandırma şöyledir: debug geliştirme sırasındaki ayrıntılı bilgi, info normal akış olayları, warn beklenmeyen ama sistemi durdurmayan durumlar, error işlemi başarısız kılan hatalar, fatal ise uygulamanın devam edemediği ölümcül durumlardır.
Üretimde genellikle yalnızca info ve üstü açık tutulur; debug seviyesi ihtiyaç halinde geçici olarak açılır, çünkü ayrıntılı loglar hem depolama hem performans maliyeti getirir.
Düz metin log ile yapılandırılmış log
Geleneksel loglar serbest metin satırlarıdır. İnsanlar için okunaklıdır, ama makinelerle aranması ve ayrıştırılması zordur; aynı bilgi farklı yazılımlarda farklı biçimlerde yazılabilir.
Yapılandırılmış loglama (structured logging) ise her olayı alan-değer çiftleri halinde, çoğunlukla JSON biçiminde yazar. Örneğin bir sipariş hatasında müşteri kimliği, sipariş kimliği, hata kodu ve süre ayrı alanlar olarak kaydedilir. Bu sayede araçlar kayıtları kolayca filtreler, gruplar ve sayar.
Bir diğer önemli kavram korelasyon kimliğidir. Bir isteğin geçtiği tüm servislerde aynı kimlik kayda eklenirse, dağıtık bir sistemde tek bir kullanıcı isteğinin izi baştan sona sürülebilir. Mikroservis mimarilerinde bu pratik neredeyse zorunludur.
Log yönetimi: toplama, depolama ve analiz
Tek bir sunucuda logu dosyadan okumak mümkündür. Çok sayıda servis ve sunucu olduğunda ise loglar tek bir yerde toplanmadan anlamlı analiz yapılamaz. Merkezi log yönetimi bu amaçla kurulur: her kaynakta bir toplayıcı ajan logları okur, gerekirse ayrıştırıp zenginleştirir ve arama destekli bir depoya gönderir.
Bu mimarinin yaygın örneği Elastic Stack'tir (Elasticsearch, Logstash, Kibana ve Beats bileşenleriyle). Yetenekleri arasında tam metin arama, panolar ve uyarılar vardır. Benzer görevi başka açık kaynak ve ticari araçlar da görür.
Saklama politikası önemlidir: logların ne kadar süre, hangi maliyetle saklanacağı, eski kayıtların nasıl arşivleneceği ve silineceği baştan planlanmalıdır. Kişisel veri içeren loglar ayrıca gizlilik düzenlemelerine tabidir.
Log, metrik ve iz: gözlemlenebilirliğin temel sinyalleri
Gözlemlenebilirlik yaklaşımında log tek başına değil, metrik ve izle birlikte kullanılır. Metrik, zaman içinde ölçülen sayısal değerdir (istek sayısı, gecikme, hata oranı). İz (trace), bir isteğin servisler arasındaki yolculuğunu ve her adımın süresini gösterir. Log ise o anda ne olduğunu ayrıntılı biçimde anlatan olay kaydıdır.
Birbirini tamamlarlar: metrik bir sorun olduğunu söyler, iz sorunun hangi servisi etkilediğini gösterir, log ise tam olarak ne olduğunu açıklar. Örneğin hata oranı panosu yükselir, iz bir ödeme servisini işaret eder, o servisin logları ise dış bir servis bağlantısının zaman aşımına uğradığını ortaya koyar.
Bu çerçevede sorun giderme, panolar, uyarılar ve nöbet düzeniyle birlikte düşünülür; böylece bir olay yaşandığında kök neden hızla bulunabilir.
Sık yapılan hatalar ve iyi pratikler
En sık görülen hata, çok fazla ya da çok az loglamaktır. Her adımı kaydeden sistem gürültüden okunamaz hale gelir ve maliyet büyür; hata durumunda bağlam yazmayan sistem ise olay sonrası ipucu bırakmaz. Hata loglarında nerede, hangi girdiyle ve hangi kullanıcı için olduğunun bulunması gerekir.
Gizli bilgilerin loga yazılması ciddi bir riskdir. Parola, kart numarası, erişim jetonu ve kimlik bilgileri loglara girmemeli, gerektiğinde maskelenmelidir. Zaman damgasının tutarlı biçimde ve standart saat diliminde yazılması, sunucu saatlerinin senkron olması da analizde kritik önem taşır.
İyi pratikler: tutarlı bir log şeması belirlemek, seviyeleri doğru kullanmak, korelasyon kimliği eklemek, saklama süresini planlamak ve logları düzenli olarak gözden geçirmek.
Bu alanı derinlemesine öğrenmek isteyenler için Mindset'in Yapılandırılmış Loglama ve Uygulama Telemetrisi, Elastic Stack (ELK) ile Merkezi Log Analizi ve Gözlemlenebilirlik: Loglama, Metrik ve İz Takibi programları bulunur.
İlgili Mindset programı
Yapılandırılmış Loglama ve Uygulama Telemetrisi
Sık sorulan sorular
Log ile audit trail (denetim izi) aynı mıdır?
Birbirine yakındır ama amaçları farklıdır. Teknik loglar sistem davranışını ve hataları izlemek için tutulur. Denetim izi ise kimin, neyi, ne zaman değiştirdiğini kanıtlamak için tutulan ve değiştirilemez olması beklenen kayıtlardır. Bazı sistemlerde bunlar aynı altyapıyı kullanır.
Üretimde hangi log seviyesi açık olmalıdır?
Genellikle info ve üstü açık tutulur. Debug seviyesi çok ayrıntılı ve maliyetli olduğundan yalnızca sorun incelemesi sırasında geçici olarak açılır. Seviye ayarının uygulamayı yeniden başlatmadan değiştirilebilmesi büyük kolaylık sağlar.
Loglara hangi bilgiler yazılmamalıdır?
Parola, kart numarası, oturum anahtarı ve gereksiz kişisel veriler loglara açık biçimde yazılmamalıdır. Gerekli olduğunda bu alanlar maskelenir ya da kısaltılır. Loglar çoğu zaman geniş bir ekip tarafından okunur ve ayrı sistemlere kopyalanır; hassas bir değer log satırına girdiğinde kontrolü kaybetmek kolaylaşır.
Log tutmak uygulamayı yavaşlatır mı?
Yanlış yapılırsa evet. Senkron ve çok ayrıntılı diske yazma gecikme yaratabilir. Asenkron loglama, uygun seviye seçimi ve gereksiz kayıtlardan kaçınma bu etkiyi büyük ölçüde azaltır.