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.