Skip to content
Back to blog
Rehber Linux Sistem Yönetimi Logrotate Sunucu Optimizasyonu DevOps

Logrotate ile Disk Alanı Yönetimi: Sunucu Sağlığı İçin Otomasyon Rehberi

Log dosyalarınızın disk alanını tüketmesini önlemek ve sistem performansını korumak için Logrotate yapılandırması üzerine kapsamlı bir teknik rehber.

Caner Serbest

Sistem ve Altyapı

3 min read

Logrotate ile Disk Alanı Yönetimi: Sunucu Sağlığı İçin Otomasyon Rehberi

Sistem yöneticileri olarak en sık karşılaştığımız sorunlardan biri, sunucu disklerinin aniden dolmasıdır. Çoğu zaman bu durumun arkasında, yanlış yapılandırılmış uygulama günlükleri (log dosyaları) yatar. Bir uygulamanın access.log veya error.log dosyası kontrolsüzce büyüdüğünde, sadece disk alanını tüketmekle kalmaz, aynı zamanda bu dosyaları okumaya çalışan sistem araçlarının performansını da ciddi oranda düşürür. Bu noktada devreye giren Logrotate, Linux ekosisteminde log dosyalarını yönetmek, döndürmek, sıkıştırmak ve temizlemek için kullandığımız standart ve en güçlü araçtır.

Logrotate Nedir ve Nasıl Çalışır?

Logrotate, zamanlanmış bir görev olarak (genellikle /etc/cron.daily/ altında) çalışan bir yardımcı programdır. Görevi oldukça basittir: Büyük log dosyalarını alır, onları yeniden adlandırır, yeni ve boş bir dosya oluşturur ve eski dosyaları sıkıştırarak belirli bir süre saklar.

Logrotate’in ana yapılandırma dosyası /etc/logrotate.conf iken, uygulamaya özel yapılandırmalar /etc/logrotate.d/ dizininde tutulur. Bu ayrım, sistem genelindeki ayarların temiz kalmasını sağlar.

Temel Yapılandırma Parametrelerini Anlamak

Bir log dosyasını nasıl yönetmek istediğimizi belirlemek için kullanılan temel parametreleri inceleyelim. Aşağıdaki örnek bir yapılandırma bloğudur:

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data www-data
}
  • daily: Logları günlük olarak döndürür.
  • rotate 7: En fazla 7 adet eski log dosyasını tutar. 8. dosya oluştuğunda en eskisini siler.
  • compress: Eski logları gzip ile sıkıştırarak diskte yer açar.
  • delaycompress: Sıkıştırma işlemini bir sonraki döngüye erteler. Bu, log yazan uygulamanın henüz dosyayı bırakmadığı senaryolarda dosya bütünlüğünü korumak için kritiktir.
  • missingok: Log dosyası mevcut değilse hata mesajı vermeden devam eder.
  • notifempty: Log dosyası boşsa, döndürme işlemi yapmaz.
  • create 0640 www-data www-data: Döndürme sonrası yeni dosyanın izinlerini ve sahibini ayarlar.

Gerçek Dünya Senaryosu: Nginx Logları

Bir web sunucusu yönetiyorsanız, Nginx loglarının kontrolsüz büyümesi kaçınılmazdır. Nginx için örnek bir /etc/logrotate.d/nginx içeriği şöyle olabilir:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

Buradaki sharedscripts ve postrotate bloğu oldukça önemlidir. Log dosyası değiştirildiğinde, Nginx’in yeni dosyaya yazmaya başlaması için ona bir sinyal (SIGHUP veya USR1) göndermemiz gerekir. sharedscripts kullanımı, log dosyaları bir liste halindeyken (yıldız karakteri ile) komutun her dosya için değil, tüm işlem sonunda bir kez çalıştırılmasını sağlar.

Yaygın Hatalar ve Dikkat Edilmesi Gerekenler

1. postrotate Hataları

En sık yapılan hata, log dosyasını döndürdükten sonra uygulamaya sinyal göndermeyi unutmaktır. Eğer uygulamanız dosya tanıtıcısını (file descriptor) serbest bırakmazsa, logrotate dosyayı taşısa bile uygulama hala eski dosyaya yazmaya devam eder. Bu da disk alanının serbest kalmamasına neden olur.

2. İzin Sorunları

Logrotate çalışırken root yetkilerini kullanır. Eğer create parametresi ile dosya sahibini doğru ayarlamazsanız, uygulamanız yeni oluşan log dosyasına yazamaz ve uygulamanız çöker. Her zaman uygulamanın çalıştığı kullanıcı ve grubu (örneğin www-data veya node) doğru tanımladığınızdan emin olun.

3. Zamanlama Çakışmaları

Eğer sisteminizde çok fazla log dosyası varsa ve bunların hepsi aynı anda döndürülmeye çalışılırsa, CPU ve I/O yükünde ani artışlar görülebilir. Logrotate’in zamanlamasını /etc/cron.daily dizininden çıkış yaparak veya systemd timer’ları ile daha kontrollü bir şekilde yönetebilirsiniz.

Debugging: Logrotate Test Etme

Yapılandırmanızı sisteme uygulamadan önce mutlaka test etmelisiniz. -d (debug) ve -f (force) bayrakları bu konuda en iyi dostlarınızdır.

  • -d (Debug): Logrotate’in ne yapacağını simüle eder ama hiçbir dosyayı değiştirmez. logrotate -d /etc/logrotate.d/myapp

  • -f (Force): Logrotate’i, zamanı gelmese bile tüm dosyaları döndürmeye zorlar. Yapılandırmanızın düzgün çalışıp çalışmadığını görmenin en hızlı yolu budur. logrotate -f /etc/logrotate.d/myapp

Sonuç

Logrotate, basit bir araç gibi görünse de sisteminizin kararlılığı için kritik bir savunma hattıdır. “Log dosyası ne kadar büyüyebilir ki?” dememek gerekir; binlerce küçük isteğin birleşimi, günler içinde gigabaytlarca boş alanın kaybolmasına sebep olabilir.

Kendi altyapınızda bu yapılandırmaları yaparken, her uygulamanın loglama alışkanlıklarını göz önünde bulundurarak; rotate sayısını disk kapasitenize göre optimize edin ve mutlaka compress seçeneğini aktif tutarak disk alanını verimli kullanın. Sağlıklı bir sunucu, iyi yönetilen loglardan geçer.

Caner Serbest


Bu yazı Gemini ile otomatik oluşturulmuştur.