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

Log Seviye Stratejisi: Üretim Ortamında Doğru Tercihler Nasıl Yapılır?

Üretim ortamlarında log seviyesi stratejisi belirlerken nelere dikkat etmeli? Hangi log seviyesi ne zaman kullanılmalı? Deneyimlerimle anlatıyorum.

100%

Log Seviye Stratejisi: Üretim Ortamında Doğru Tercihler Nasıl Yapılır?

Üretim ortamında sistemlerimizin sağlığını ve performansını izlemek kritik önem taşır. Bu izlemenin temel taşlarından biri de loglama. Ancak, her şeyi sürekli olarak DEBUG seviyesinde kaydetmek hem performans sorunlarına yol açar hem de aradığımız bilgiyi bulmayı imkansız hale getirir. Doğru log seviyesi stratejisi belirlemek, hem sistem kaynaklarını verimli kullanmamızı sağlar hem de sorun anında hızlıca çözüm bulmamıza yardımcı olur. Bu yazıda, üretim ortamında log seviyesi stratejisi oluştururken nelere dikkat etmemiz gerektiğini, hangi durumlarda hangi seviyeyi kullanmamız gerektiğini ve bu stratejiyi nasıl optimize edebileceğimizi kendi deneyimlerimden yola çıkarak anlatacağım.

Loglama, bir uygulamanın veya sistemin çalışma zamanı boyunca ürettiği bilgileri kaydetme işlemidir. Bu bilgiler, hataları ayıklamak (debugging), sistemin performansını izlemek, güvenlik olaylarını tespit etmek ve genel sistem davranışını anlamak için kullanılır. Log seviyeleri, kaydedilen bilgilerin ayrıntı düzeyini belirler. Genellikle kullanılan standart seviyeler şunlardır: TRACE, DEBUG, INFO, WARN, ERROR, FATAL. Her seviyenin kendine özgü bir kullanım amacı ve önceliği vardır. Üretim ortamında bu seviyeleri doğru yönetmek, adeta bir cerrahın hassasiyetiyle çalışmayı gerektirir.

Standart Log Seviyeleri ve Anlamları

Loglama dünyasında yaygın olarak kabul görmüş bazı standart seviyeler bulunur. Bunları anlamak, doğru stratejiyi kurmanın ilk adımıdır. Her seviye, belirli bir kullanım senaryosuna hizmet eder ve hangi bilgilerin ne zaman kaydedileceğini belirlememize yardımcı olur. Bu seviyeleri doğru anlamak ve uygulamak, arıza giderme (troubleshooting) süreçlerini hızlandırır ve gereksiz log yükünü azaltır.

  • TRACE: En ayrıntılı log seviyesidir. Genellikle geliştirme aşamasında, kodun en ince detaylarının bile izlenmesi gerektiğinde kullanılır. Metot girişleri, çıkışları, değişken değerleri gibi bilgiler bu seviyede kaydedilir. Üretim ortamında sürekli açık bırakılması önerilmez.
  • DEBUG: Geliştirme ve hata ayıklama için kullanılır. Uygulamanın normal akışını anlamaya yardımcı olacak bilgiler içerir. Örneğin, bir isteğin hangi adımlardan geçtiği, hangi parametrelerle işlendiği gibi detaylar bu seviyede tutulabilir. Üretim ortamında, geçici olarak belirli bir modül için açılabilir.
  • INFO: Uygulamanın normal işleyişi hakkında bilgi veren seviyedir. Önemli olaylar, başarılı işlemler, başlatılan görevler gibi bilgiler kaydedilir. Örneğin, bir kullanıcının giriş yapması, bir raporun başarıyla oluşturulması gibi durumlar INFO seviyesinde loglanır. Üretim ortamında genellikle varsayılan seviye olarak kullanılır.
  • WARN: Potansiyel olarak sorun yaratabilecek durumları belirtir, ancak uygulamanın çalışmasını hemen durdurmaz. Örneğin, bir konfigürasyon dosyasının eksik olması ama uygulamanın varsayılan değerlerle devam edebilmesi WARN seviyesinde loglanabilir. Bu uyarılar, gelecekteki sorunları önlemek için önemlidir.
  • ERROR: Bir işlemin başarısız olduğunu gösteren kritik hataları kaydeder. Örneğin, veritabanı bağlantısının kurulamaması, bir dosyanın yazılamaması gibi durumlar ERROR seviyesinde loglanır. Üretim ortamında bu seviyedeki loglar, acil müdahale gerektiren durumları işaret eder.
  • FATAL: Uygulamanın çalışmasını engelleyen ve hemen durdurulması gereken ciddi hataları belirtir. Örneğin, kritik bir servisin başlatılamaması veya belleğin tamamen tükenmesi gibi durumlar FATAL olarak loglanır. Bu seviyedeki loglar, sistemin tamamen çökmesine neden olabilecek olayları haber verir.

Üretim Ortamında Varsayılan Log Seviyesi Seçimi

Üretim ortamında log seviyesi seçimi, adeta bir denge sanatıdır. Bir yandan sistemin sağlığını gözetirken, diğer yandan gereksiz kaynak tüketiminden kaçınmalıyız. Genel eğilim, INFO seviyesini varsayılan olarak kullanmaktır. Bu, uygulamanın normal işleyişini takip etmek için yeterli bilgiyi sağlarken, aşırı loglamanın getireceği performans ve depolama sorunlarından kaçınmamızı sağlar. Ancak bu, her zaman doğru cevap olmayabilir.

Bir üretim ERP sistemi üzerinde çalışırken, sevkiyat ve faturalama modülleri için INFO seviyesi genellikle yeterliydi. Ancak, operatör ekranlarının anlık veri güncellemelerini yönettiği bir bölümde, gecikmeler yaşandığında DEBUG seviyesine geçiş yapmak sorunun kaynağını bulmada kritik rol oynuyordu. Bu tür durumlarda, tüm sistemi DEBUG’e almak yerine, sadece ilgili modülün log seviyesini geçici olarak artırmak daha akılcı bir yaklaşımdır. Bu, hem sorunu çözmemize olanak tanır hem de genel sistem performansını minimum düzeyde etkiler.

Dinamik Log Seviyesi Ayarlaması ve Kullanım Senaryoları

Üretim ortamında her zaman sabit bir log seviyesi kullanmak zorunda değiliz. Sistemlerimizin dinamik yapısını göz önünde bulundurarak, log seviyelerini duruma göre ayarlayabiliriz. Bu, özellikle belirli bir modülde sorun yaşandığında veya yeni bir özellik devreye alındığında çok faydalı olur. Örneğin, yeni bir AI destekli üretim planlama modülü devreye alırken, ilk birkaç gün DEBUG seviyesinde loglama yaparak olası hataları ve beklenmedik davranışları erkenden tespit edebiliriz.

Kendi finansal hesaplayıcı projelerimde, kullanıcı deneyimini iyileştirmek adına bazen belirli API çağrılarını veya hesaplama adımlarını yakından izlemem gerekti. Bu durumlarda, Nginx veya FastAPI gibi bileşenlerin log seviyesini geçici olarak DEBUG’e yükselttim. Örneğin, bir kullanıcının yaşadığı ve raporladığı bir hesaplama hatasını gidermek için, ilgili kullanıcının oturumuna ait isteklerin log seviyesini geçici olarak artırarak sorunun tam olarak nerede başladığını ve hangi parametrelerle gerçekleştiğini belirledim. Bu sayede, sorunun kaynağını hızla tespit edip çözebildim.

# Örnek: FastAPI'de dinamik log seviyesi ayarlaması (basit bir gösterim)
from fastapi import FastAPI
import logging

app = FastAPI()

# Varsayılan logger ayarı
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

@app.get("/calculate")
async def calculate(value: int):
    logger.info(f"Calculation requested with value: {value}")

    try:
        # Gerçek hesaplama mantığı buraya gelecek
        if value < 0:
            logger.warning(f"Negative value provided: {value}. Proceeding with absolute value.")
            value = abs(value)

        result = value * 2
        logger.debug(f"Intermediate result for {value}: {result}") # DEBUG seviyesi

        if result > 1000:
            logger.error(f"Calculation result exceeded threshold: {result}")
            return {"error": "Result too large"}

        logger.info(f"Calculation successful. Result: {result}")
        return {"result": result}

    except Exception as e:
        logger.exception(f"An error occurred during calculation for value {value}") # Hata detayıyla loglama
        return {"error": "An internal error occurred"}

# Log seviyesini dışarıdan değiştirme mekanizması eklenmeli (örn. bir API endpoint veya konfigürasyon dosyası ile)
# Örneğin:
# logger.setLevel(logging.DEBUG) # Bu satırın dinamik olarak çalıştırılması

Loglama Performansı ve Kaynak Tüketimi

Loglama, sistem kaynaklarını (CPU, bellek, disk I/O) kullanan bir işlemdir. Özellikle yüksek trafikli sistemlerde veya çok ayrıntılı loglama yapıldığında, bu tüketim göz ardı edilemeyecek boyutlara ulaşabilir. Üretim ortamında loglama performansını optimize etmek, sistemin genel stabilitesi ve yanıt verme süresi için hayati önem taşır. Gereğinden fazla loglama yapmak, CPU’yu yoğun kullanabilir, disk alanını hızla tüketebilir ve hatta uygulamanın yavaşlamasına neden olabilir.

Bir e-ticaret platformunun backend servisinde, yoğun bir kampanya döneminde loglar inanılmaz bir hızla artmaya başladı. Özellikle her bir sepet işleminin detaylı olarak loglandığı DEBUG seviyesi, sistemin I/O’sunu o kadar zorladı ki, veritabanı sorguları bile yavaşladı. Bu durumu fark ettiğimizde, sadece kritik modüllerin log seviyesini INFO’ya çektik ve genel log seviyesini WARN’a düşürdük. Bu basit ayarlama ile bile disk I/O’su belirgin biçimde azaldı ve sistemin yanıt verme süresi normale döndü. Bu deneyim, üretim ortamında log seviyesinin ne kadar hassas bir ayar olduğunu bir kez daha gösterdi.

Güvenlik Odaklı Loglama Stratejileri

Loglama sadece performans ve hata ayıklama için değil, aynı zamanda güvenlik açısından da kritik bir rol oynar. Güvenlik olaylarını tespit etmek, şüpheli aktiviteleri izlemek ve sızma girişimlerini analiz etmek için yeterli ve doğru logların tutulması gerekir. Ancak, güvenlik logları da performans üzerinde etkili olabilir, bu nedenle bir denge kurulmalıdır.

Güvenlik gereksinimi yüksek ortamlarda, güvenlik ekibinin talebiyle belirli API erişimlerinin ve yetkilendirme işlemlerinin daha detaylı loglanması gerekebilir. Bu, her bir isteğin kaynağını, hedefini, kullanılan metodu ve yanıtını içeren daha ayrıntılı loglar anlamına gelir. Bu sayede, olası bir yetkisiz erişim denemesi veya veri sızıntısı girişimi çok daha hızlı tespit edilebilir. Ancak bu ek loglamanın getirdiği disk alanı ihtiyacını da göz önünde bulundurarak, eski ve önemsiz güvenlik loglarını daha agresif bir şekilde arşivlemek gerekir.

# Örnek: fail2ban loglarını izlemek ve güvenlik olaylarını tespit etmek
# /var/log/fail2ban.log dosyasını izleyerek şüpheli IP adreslerini ve engelleme nedenlerini görebiliriz.
# cat /var/log/fail2ban.log | grep "Ban"

# Sistem loglarında (örn. journald) şüpheli giriş denemelerini arama
# journalctl -u sshd -p err..emerg | grep "Failed password"

Hangi Log Seviyesi Güvenlik İçin Uygun?

Güvenlik olaylarını tespit etmek için genellikle ERROR ve WARN seviyeleri yeterli olsa da, bazı durumlarda INFO veya hatta DEBUG seviyesindeki loglar da kritik bilgiler içerebilir. Örneğin, bir brute-force saldırısını tespit etmek için başarısız giriş denemelerinin kaydedildiği loglar önemlidir. Bu bilgiyi ERROR seviyesinde tutmak mantıklıdır. Ancak, bir kullanıcının yetkilendirme adımlarının detaylı olarak izlenmesi gerekiyorsa, bu INFO veya DEBUG seviyesinde yapılabilir. Önemli olan, güvenlik ekibiyle birlikte çalışarak hangi olayların hangi detay seviyesinde kaydedilmesi gerektiğini belirlemektir.

Log Seviye Stratejisini Sürekli İyileştirme

Loglama stratejisi statik bir yapı değildir; zamanla değişen ihtiyaçlara ve sistemin gelişimine ayak uydurmalıdır. Yeni özellikler eklendikçe, performans sorunları ortaya çıktıkça veya güvenlik gereksinimleri değiştikçe loglama stratejisini gözden geçirmek ve güncellemek gerekir. Bu, sürekli bir iyileştirme döngüsüdür.

Kullanıcı geri bildirimleri de log stratejisini şekillendirmede değerli bir kaynaktır. Varsayılan olarak INFO seviyesinde çalışan bir uygulamada, “uygulama aniden kapanıyor” türü bir şikayet geldiğinde, ilgili modülün log seviyesini geçici olarak DEBUG’e çıkarmak çökmeye neden olan tam hatayı ve tetikleyici parametreleri ortaya çıkarabilir. Bu nedenle kullanıcı geri bildirimleri, hangi modüllerin daha yakından izlenmesi gerektiğini belirlemede iyi bir yol göstericidir.

Log Analizi ve Geri Bildirim Döngüsü

Logları düzenli olarak analiz etmek, sadece hataları bulmakla kalmaz, aynı zamanda loglama stratejisinin etkinliği hakkında da bilgi verir. Hangi logların en çok kullanıldığı, hangi logların gereksiz olduğu veya hangi bilgilerin eksik olduğu gibi soruların cevapları, stratejiyi iyileştirmek için kullanılabilir. Bu geri bildirim döngüsü, loglama sistemini daha verimli ve kullanışlı hale getirir.

Daha önceki bir sistem yönetimi projemde, journald`‘nin log seviyesini ve saklama süresini optimize etmek için yaptığımız analizler sonucunda, gereksiz yere disk alanı kaplayan verbose logları temizleyip, kritik hata loglarının saklama süresini uzatmıştık. Bu tür düzenli analizler, sistem kaynaklarını daha verimli kullanmamızı ve aradığımız bilgiye daha hızlı ulaşmamızı sağlar.

# journalctl ile logları analiz etme örnekleri
# Belirli bir zamana ait logları görüntüleme
# journalctl --since "2026-05-28 09:00:00" --until "2026-05-28 10:00:00"

# Belirli bir servise ait logları filtreleme
# journalctl -u my-application.service

# Belirli bir anahtar kelimeye göre log arama
# journalctl -g "database connection error"

Loglama, modern sistemlerin ayrılmaz bir parçasıdır. Üretim ortamında doğru log seviye stratejisini belirlemek, sistem sağlığını korumak, sorunları hızlıca çözmek ve güvenliği sağlamak için kritik öneme sahiptir. Bu stratejiyi oluştururken, INFO seviyesini varsayılan olarak kabul etmek iyi bir başlangıç noktasıdır, ancak sisteminize özel ihtiyaçları göz önünde bulundurarak dinamik ayarlamalar yapmak ve düzenli analizlerle stratejiyi sürekli iyileştirmek en etkili yaklaşımdır.

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.

Üretim ortamında doğru log seviyesi stratejisi oluştururken nelere dikkat etmemiz gerekiyor?
Benim deneyimim, üretim ortamında doğru log seviyesi stratejisi oluştururken sistem kaynaklarını verimli kullanmak ve sorun anında hızlıca çözüm bulmak için dikkat etmemiz gereken en önemli şey, log seviyelerini doğru şekilde ayarlamanın yanında, logların düzenli olarak izlenmesidir. Ayrıca, farklı log seviyelerini (örneğin DEBUG, INFO, ERROR) doğru bir şekilde kullanmak ve bu seviyeleri üretim ortamının gereksinimlerine göre ayarlamak da çok önemlidir.
Hangi log seviyesini ne zaman kullanmalıyım?
Ben genellikle, sistemi geliştirirken veya hataları ayıklarken DEBUG seviyesini, normal çalışma durumunda INFO seviyesini ve sorun anında ERROR seviyesini kullanıyorum. Örneğin, bir yeni özellik geliştirirken DEBUG seviyesini kullanarak, kodun her adımını izleyebiliyorum, ancak üretim ortamında bu seviyeyi kullanmam sistem performansını olumsuz etkileyebilir. INFO seviyesini ise, sistemin normal çalışma durumunu izlemek için kullanıyorum.
Log seviyesi stratejisinin avantajları ve dezavantajları nelerdir?
Benim deneyimime göre, doğru log seviyesi stratejisinin avantajı, sistem kaynaklarını verimli kullanmak ve sorun anında hızlıca çözüm bulmaktır. Ancak, yanlış log seviyesi stratejisinin dezavantajı, sistem performansını olumsuz etkileyebilir ve aradığımız bilgiyi bulmayı imkansız hale getirebilir. Örneğin, her şeyi sürekli olarak DEBUG seviyesinde kaydetmek, sistem performansını yavaşlatabilir ve log dosyalarının büyümesine neden olabilir.
Log seviyesi stratejisi oluştururken en büyük hata nedir?
Benim görüşüm, log seviyesi stratejisi oluştururken en büyük hata, her şeyi sürekli olarak aynı log seviyesinde kaydetmektir. Örneğin, her şeyi DEBUG seviyesinde kaydetmek, sistem performansını olumsuz etkileyebilir ve aradığımız bilgiyi bulmayı imkansız hale getirebilir. Ayrıca, log seviyelerini üretim ortamının gereksinimlerine göre ayarlamamak da bir diğer büyük hatadır. Ben genellikle, farklı log seviyelerini (örneğin DEBUG, INFO, ERROR) doğru bir şekilde kullanmak ve bu seviyeleri üretim ortamının gereksinimlerine göre ayarlamak için bir strateji oluşturuyorum.
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