İçeriğe Atla
Mustafa Erbay
Kariyer · 11 dk okuma · görüntülenme Read in English

Log Seviye Stratejileri: Detaylı İzleme mi, Minimum Gürültü mü?

Sistemlerimizde log seviyelerini doğru ayarlamak, hem detaylı izleme hem de gereksiz gürültüyü azaltma arasında kritik bir denge kurmayı gerektirir. Bu…

100%

Log Seviyeleri: Neden Önemli?

Sistemlerimizde yaşadığımız sorunları teşhis etmenin ve performanslarını optimize etmenin temel yolu, ürettikleri logları doğru bir şekilde analiz etmekten geçer. Ancak her şeyin logunu tutmak, bir samanlıkta iğne aramaktan farksız bir duruma yol açabilir. Tersine, çok az log tutmak ise sorunun kaynağını bulmamızı imkansız hale getirebilir. İşte tam bu noktada, log seviyeleri stratejimiz devreye giriyor.

Bu yazıda, farklı log seviyelerinin ne anlama geldiğini, hangi durumlarda hangisini kullanmamız gerektiğini ve bu stratejiyi kendi projelerimde nasıl uyguladığımı detaylıca ele alacağım. Amacım, hem gereksiz gürültüyü azaltarak sistemlerimizi daha verimli hale getirmek hem de kritik durumlarda ihtiyacımız olan tüm bilgiyi eksiksiz bir şekilde elde etmek.

Yaygın Log Seviyeleri ve Anlamları

Loglama, sistemlerin ve uygulamaların çalışma durumlarını kaydetme işlemidir. Farklı seviyeler, kaydedilen bilginin önem derecesini ve detaylılık seviyesini belirtir. Bu seviyeleri doğru anlamak, etkili bir loglama stratejisi oluşturmanın ilk adımıdır.

Genel olarak kabul görmüş log seviyeleri şunlardır:

  • TRACE (En Detaylı): Genellikle geliştirme aşamasında veya çok spesifik bir hatayı ayıklamak için kullanılır. Her fonksiyon çağrısını, değişken değerini ve akış kontrolünü kaydedebilir. Production ortamında kullanılması genellikle önerilmez çünkü aşırı miktarda veri üretir.
  • DEBUG (Hata Ayıklama): Geliştiricilerin uygulamaların normal çalışma akışını anlamalarına yardımcı olur. Bu seviyede kaydedilen bilgiler, uygulamanın hangi yolları izlediğini, hangi koşulların gerçekleştiğini gösterir.
  • INFO (Bilgi): Uygulamanın normal çalışma durumunu gösteren önemli olayları kaydeder. Örneğin, bir kullanıcının giriş yapması, bir işlemin başarıyla tamamlanması gibi. Production ortamında genellikle varsayılan seviye budur.
  • WARN (Uyarı): Potansiyel sorunlara işaret eden ancak uygulamanın çalışmasını doğrudan durdurmayan durumları belirtir. Örneğin, bir kaynağın geçici olarak kullanılamaması veya bir konfigürasyonun varsayılan değerlerle çalışması gibi.
  • ERROR (Hata): Bir işlemin veya isteğin başarısızlıkla sonuçlandığını gösterir. Bu seviyedeki loglar, uygulamanın düzgün çalışmadığı durumları belirlemek için kritiktir.
  • FATAL (Kritik Hata): Uygulamanın veya sistemin çökmesine neden olan, acil müdahale gerektiren ciddi hataları belirtir. Bu seviyede bir log alındığında, genellikle sistemin çalışması durur.

Log Seviyeleri ve Sistem Performansı

Log seviyesini değiştirmek, doğrudan sistem performansını etkileyebilir. Örneğin, TRACE veya DEBUG seviyesinde yoğun bir logging yapmak, diske sürekli yazma işlemi gerektireceği için I/O performansını düşürebilir. Ayrıca, oluşturulan büyük log dosyaları disk alanını hızla tüketebilir ve bu da dolaylı olarak performans sorunlarına yol açabilir.

Strateji Geliştirme: Ne Zaman Ne Kullanmalı?

Etkili bir loglama stratejisi, projenin yaşam döngüsüne, mevcut altyapıya ve izleme ihtiyaçlarına göre şekillenir. Tek bir “doğru” strateji yoktur; en iyisi, projenin gereksinimlerine en uygun olanıdır.

Geliştirme Ortamı (Development Environment)

Geliştirme aşamasında, hataları hızla bulmak ve düzeltmek esastır. Bu nedenle, genellikle daha detaylı log seviyeleri tercih edilir.

  • TRACE / DEBUG: Bu seviyeler, kodun akışını anlamak, değişkenlerin değerlerini kontrol etmek ve beklenmedik davranışları tespit etmek için paha biçilmezdir. Örneğin, bir API çağrısının neden başarısız olduğunu anlamak için DEBUG seviyesindeki loglar, isteğin tam olarak nasıl gönderildiğini ve sunucudan gelen yanıtın ne olduğunu gösterebilir.
  • INFO: Normal akışın izlenmesi için kullanılır.

Bu ortamda aşırı loglama maliyeti düşüktür, çünkü genellikle yerel makinelerde veya test sunucularında çalışılır. Ancak yine de, aşırı TRACE loglamanın performansı olumsuz etkileyebileceği unutulmamalıdır.

Test Ortamı (Staging/Testing Environment)

Test ortamı, production ortamını taklit etmeli, ancak yine de hata ayıklama için bir miktar esneklik sunmalıdır.

  • DEBUG / INFO: Bu seviyeler, uygulamanın farklı senaryolarda nasıl davrandığını görmek için uygundur. Örneğin, yük testleri sırasında veya entegrasyon testlerinde DEBUG seviyesi, olası darboğazları veya hatalı entegrasyon noktalarını belirlemeye yardımcı olabilir.
  • WARN / ERROR: Bu seviyeler, test senaryolarının başarısız olduğu durumları tespit etmek için kullanılır.

Production Ortamı (Production Environment)

Production ortamında öncelik, sistemin kararlılığı, performansı ve güvenliğidir. Bu nedenle, loglama seviyeleri daha muhafazakar olmalıdır.

  • INFO: Normal operasyonel durumları izlemek için kullanılır. Bir kullanıcının başarıyla oturum açması, bir isteğin başarıyla işlenmesi gibi bilgiler bu seviyede kaydedilir. Bu, genel sistem sağlığını anlamak için yeterli bilgiyi sağlar.
  • WARN: Potansiyel sorunları erkenden tespit etmek için önemlidir. Örneğin, bir veritabanı bağlantısının zaman aşımına uğraması ama ardından tekrar kurulabilmesi gibi durumlar uyarı olarak kaydedilebilir.
  • ERROR: Gerçekleşen hataları ve bunların etkilerini kaydetmek için kullanılır. Bir isteğin işlenememesi, bir modülün çökmesi gibi durumlar bu seviyede loglanır.
  • FATAL: Uygulamanın veya sistemin tamamen durmasına neden olan kritik hatalar için saklanır.

Bu seviyelerde tutulan loglar, hem performans üzerinde minimum etkiye sahiptir hem de sorun giderme için gerekli temel bilgileri sağlar. Gerekli olduğunda, sorun giderme amacıyla geçici olarak daha detaylı log seviyelerine geçiş yapılabilir.

Gerçek Dünya Senaryoları ve Uygulamalarım

Kendi projelerimde ve danışmanlık yaptığım firmalarda, log seviyeleri konusunda çeşitli deneyimlerim oldu. Bu deneyimler, stratejimin evrimleşmesine katkı sağladı.

Senaryo 1: Üretim ERP’sinde Sevkiyat Hataları

Bir üretim ERP sistemi üzerinde çalışırken, sevkiyat raporlarının zaman zaman eksik geldiğini fark ettik. Başlangıçta INFO seviyesinde loglama yapılıyordu. Sorunu tespit etmek için log seviyesini geçici olarak DEBUG seviyesine çıkardık. Bu sayede, sevkiyat işleminin hangi adımlarda takıldığını ve hangi verilerin eksik olduğunu detaylı olarak görebildik.

DEBUG seviyesinde, normalde gizli kalan veritabanı sorgusu görünür hale geldi; sorunun bu sorgunun belirli koşullar altında boş sonuç döndürmesinden kaynaklandığını fark ettik. Sonuç olarak, sorguyu optimize ederek ve eksik veriler için daha fazla hata kontrolü ekleyerek sorunu çözdük. Production’da tekrar INFO seviyesine döndük, ancak bu tür kritik modüller için özel uyarı (WARN) logları ekledik.

Senaryo 2: Kendi Yan Ürünümdeki Performans Sorunları

Kendi geliştirdiğim finansal hesaplayıcı uygulamasının backend’inde, yoğun kullanımlarda yavaşlamalar gözlemledim. Başlangıçta INFO seviyesi yeterli görünüyordu, ancak performans darboğazını bulmak için DEBUG seviyesine geçtim.

Logları incelediğimde, belirli bir hesaplama fonksiyonunun beklenenden çok daha fazla tekrarlandığını gördüm. Bu durum, önbellekleme (caching) mekanizmasında bir hata olduğunu gösteriyordu. DEBUG logları, aynı anahtar için art arda yinelenen “cache miss” kayıtlarını ortaya çıkardı; bu da önbelleğin doğru şekilde güncellenmediğini veya anahtarın yanlış oluşturulduğunu gösteriyordu. Önbellek anahtarını düzelttikten ve güncelleme mantığını iyileştirdikten sonra performans sorunu ortadan kalktı. Production’da INFO ve bazı kritik hesaplamalar için WARN seviyelerini kullanmaya devam ediyorum.

Senaryo 3: Diagnostik Sağlamayan Dış Platformlar

Üçüncü taraf bir platformla (örneğin bir uygulama mağazasının yayınlama süreci) çalışırken sık karşılaşılan bir durum, platformun bir işlemi reddetmesi ama nedenini açıkça söylememesidir. Böyle durumlarda dış sistemden anlamlı bir geri bildirim gelmediği için, çözüm tek başına kendi uygulamanızın loglarına kalır: yayınlama/entegrasyon adımlarını kaydeden özel bir DEBUG katmanı eklemek, hangi alanın ya da isteğin reddedildiğini görünür kılar. İlke basit: diagnostiğini kontrol edemediğiniz bir sistemle konuşuyorsanız, kendi tarafınızdaki loglama tek penceredir; bu yüzden dış entegrasyon noktalarını baştan loglanabilir tasarlamak gerekir.

İleri Düzey Loglama Teknikleri ve Araçlar

Temel log seviyelerinin ötesinde, daha gelişmiş loglama teknikleri ve araçları, sistemlerimizi daha derinlemesine izlememize olanak tanır.

Yapılandırılmış Loglama (Structured Logging)

Geleneksel düz metin (plain text) loglar yerine, yapılandırılmış loglama (örneğin JSON formatında) kullanmak, logların analizini ve sorgulanmasını çok daha kolay hale getirir. Her log girdisi, anahtar-değer çiftleri şeklinde yapılandırılır, böylece belirli alanlara (örneğin user_id, request_id, error_code) göre filtreleme ve arama yapmak çok daha verimli olur.

Örnek bir yapılandırılmış log çıktısı:

{
  "timestamp": "2026-05-28T15:00:00Z",
  "level": "ERROR",
  "service": "auth-service",
  "request_id": "abc123xyz789",
  "user_id": "user_456",
  "message": "Authentication failed: Invalid credentials",
  "details": {
    "ip_address": "192.168.1.100",
    "attempt_count": 3
  }
}

Bu format, log analiz araçları (örneğin Elasticsearch, Splunk, Loki) tarafından kolayca işlenebilir ve görselleştirilebilir.

Centralize Logging Sistemleri

Dağıtık sistemlerde, farklı servislerden gelen logları tek bir yerde toplamak, genel bir bakış açısı kazanmak için şarttır. Elasticsearch, Logstash, Kibana (ELK Stack) veya Grafana Loki gibi merkezi loglama sistemleri, tüm log verilerini tek bir platformda birleştirerek arama, analiz ve görselleştirme imkanı sunar.

Bu sistemler, sadece logları toplamakla kalmaz, aynı zamanda logları filtreleme, desenleri tanıma ve anormallikleri tespit etme gibi gelişmiş özellikler de sunar. Örneğin, belirli bir hata kodunun belirli bir zaman diliminde ne kadar sık oluştuğunu kolayca görebilirsiniz.

Korelasyon ID’leri (Correlation IDs)

Dağıtık sistemlerde, tek bir isteğin birden fazla servisten geçtiği durumlar yaygındır. Bu isteklerin uçtan uca izlenmesi için korelasyon ID’leri kullanılır. Bir istek ilk servise ulaştığında benzersiz bir ID oluşturulur ve bu ID, isteğin geçtiği tüm sonraki servislere iletilir.

Her servis, kendi loglarında bu korelasyon ID’sini kaydederek, tek bir isteğin yaşam döngüsünü tüm sistem boyunca takip etmeyi mümkün kılar. Bu, bir isteğin hangi serviste takıldığını veya geciktiğini anlamak için hayati önem taşır.

Sonuç: Dengeli Bir Yaklaşım

Log seviyeleri, sistemlerimizin hem sağlığını izlemek hem de olası sorunları çözmek için kullandığımız güçlü bir araçtır. Ancak bu aracın etkili kullanılabilmesi için dengeli bir yaklaşım benimsemek şarttır. Geliştirme ortamında detaylı bilgilere ulaşmak, production ortamında ise sistemi gereksiz yükten ve bilgi kirliliğinden korumak esastır.

Yapılandırılmış loglama, merkezi loglama sistemleri ve korelasyon ID’leri gibi ileri düzey teknikler, log verilerinden maksimum faydayı sağlamamıza yardımcı olur. Unutmamalıyız ki, en iyi loglama stratejisi, projenin ihtiyaçlarına en uygun, sürdürülebilir ve ölçeklenebilir olandır. Bu dengeyi kurarak, sistemlerimizi daha güvenilir, performanslı ve yönetilebilir hale getirebiliriz.

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

Bu yazı nasıldı?

Sıkça Sorulanlar

Bu makale ile ilgili okurların sorduğu yaygın sorular.

Log seviyelerini ayarlamak için hangi araçları kullanmalıyım?
Ben genellikle log seviyelerini ayarlamak için Elasticsearch, Logstash ve Kibana gibi araçları kullanıyorum. Bu araçlar, log verilerini toplamak, işlemek ve analiz etmek için çok faydalı oluyor. Ayrıca, bu araçları kullanarak log seviyelerini gerçek zamanlı olarak izleyip ayarlayabiliyorum.
Log seviyelerini minimum seviyede tutmanın avantajları ve dezavantajları nelerdir?
Log seviyelerini minimum seviyede tutmanın avantajı, gereksiz veri üretiminin azaltılması ve performansın artırılmasıdır. Ancak dezavantajı, kritik hataları tespit etmekte zorluk yaşanmasıdır. Ben, log seviyelerini minimum seviyede tutarken, kritik olayları riêng olarak loglama stratejisini uyguluyorum.
Log seviyelerini ayarlamak için hangi stratejiyi kullanmalıyım?
Ben, log seviyelerini ayarlamak için bir dizi stratejiyi uyguluyorum. İlk olarak, sistemlerin normal çalışma durumunu anlamak için INFO seviyesini kullanıyorum. Ardından, hata ayıklama için DEBUG seviyesini ve çok spesifik hataları ayıklamak için TRACE seviyesini kullanıyorum. Ayrıca, log seviyelerini gerçek zamanlı olarak izleyerek ayarlamaktan yana da faydalanıyorum.
Log seviyelerini yanlış ayarlamanın sonuçları nelerdir?
Log seviyelerini yanlış ayarlamanın sonuçları, sistem performansının düşmesi, gereksiz veri üretimi ve kritik hataları tespit edememe olabilir. Ben, log seviyelerini yanlış ayarlamanın bu sonuçlarını yaşamamak için, dikkatli bir şekilde log seviyelerini ayarlıyor ve düzenli olarak log verilerini analiz ediyorum.
ME

Mustafa Erbay

Sistem Mimarisi · Network Uzmanı · Altyapı, Güvenlik ve Yazılım

2006'dan bu yana sistem mimarisi, network, sunucu altyapıları, büyük yapıların kurulumu, yazılım ve sistem güvenliği ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Yorumlar

Sunucu Taraflı AI Moderasyon

Yorumlar sunucuda yapay zeka ile denetlenir ve kalıcı olarak saklanır.

?
0/2000

Sunucu taraflı AI denetim

✉️ Ücretsiz · Spam yok · İstediğin an çık

Yeni yazılardan haberdar olun

Yeni içerikler ve teknik notlar e-postanıza gelsin.

  • 📌
    Haftanın en iyisi Sadece okumaya değer tek yazı
  • 🔧
    Alet çantası Bu hafta kullandığım araçlar
  • 🧠
    Perde arkası Blog'a girmeyen notlar

Spam yapmıyoruz. İstediğiniz zaman ayrılabilirsiniz. · Sadece Umami (self-hosted, Google yok) ile takip.

Okuma İstatistikleriniz

0

Yazı Okundu

0dk

Okuma Süresi

0

Gün Serisi

-

Favori Kategori

İlgili Yazılar