Linux Sistemlerde Logrotate ile Disk Doluluğunu Önlemenin 5 Kritik Adımı: Uygulamalı Kılavuz
Linux sistemlerde log dosyalarının disk alanını tüketmesini engellemek için Logrotate kullanımına dair detaylı bir rehber. Uygulamalı yapılandırma örnekleri ve en iyi uygulamalarla sistem yöneticilerinin karşılaştığı disk doluluk problemlerine kalıcı çözümler sunuyoruz.
Caner Serbest
Sistem ve Altyapı
7 min read
Linux Sistemlerde Logrotate ile Disk Doluluğunu Önlemenin 5 Kritik Adımı: Uygulamalı Kılavuz
Sistem yöneticilerinin en sık karşılaştığı problemlerden biri, log dosyalarının disk alanını tüketerek sistem performansını olumsuz etkilemesidir. /var/log dizininde biriken log dosyaları, özellikle uzun süreli çalışan sunucularda ciddi disk doluluk problemlerine yol açabilir. Bu durumda devreye Logrotate giriyor: Linux sistemlerinde log dosyalarını otomatik olarak sıkıştırma, arşivleme ve silme işlemlerini yöneten güçlü bir araç.
Bu rehberde, Logrotate’un nasıl çalıştığını, temel yapılandırmasını ve disk doluluğunu önlemek için kullanabileceğiniz 5 kritik adımı detaylı olarak inceleyeceğiz. Uygulamalı örneklerle birlikte, log yönetimini sisteminizin sürdürülebilirliği için nasıl optimize edeceğinizi öğreneceksiniz.
🔍 Logrotate Nedir ve Neden Önemlidir?
Logrotate, sistem loglarını otomatik olarak yönetmek için tasarlanmış bir hizmet programıdır. Temel işlevleri şunlardır:
- Log dosyalarını sıkıştırma (compress)
- Log dosyalarını döndürme (rotate) ve arşivleme
- Eski log dosyalarını silme
- Log dosyalarının boyutunu ve sayısını sınırlama
Neden önemlidir?
- Disk doluluğunu önler
- Log dosyalarının yönetimini otomatikleştirir
- Sistem performansını korur
- Yasal ve güvenlik gereksinimleri için log arşivleme sağlar
📊 İstatistiksel Veri: Birçok sistemde
/var/logdizini toplam disk kullanımının %10-20’sini oluşturur. Logrotate kullanılmadığında bu oran %50’lere kadar çıkabilir.
🛠️ Logrotate Kurulumu ve Temel Yapılandırma
Logrotate, çoğu Linux dağıtımında varsayılan olarak kuruludur. Kurulumunu doğrulamak için:
# Kurulumu kontrol et
which logrotate
# Sürümünü görüntüle
logrotate --version
Eğer sisteminizde yüklü değilse, aşağıdaki komutlarla kurabilirsiniz:
# Debian/Ubuntu
sudo apt update && sudo apt install logrotate
# RHEL/CentOS
sudo yum install logrotate
# Arch Linux
sudo pacman -S logrotate
Temel Yapılandırma Dosyası
Logrotate’un ana yapılandırma dosyası /etc/logrotate.conf konumundadır. Bu dosyada global ayarlar tanımlanır. Örnek bir yapılandırma:
# /etc/logrotate.conf
# Global ayarlar
weekly
rotate 4
compress
delaycompress
dateext
missingok
notifempty
create 0640 root adm
Ayarların anlamı:
weekly: Log dosyalarını haftalık olarak döndürrotate 4: En fazla 4 arşiv saklacompress: Log dosyalarını sıkıştırdelaycompress: Bir sonraki döndürmede sıkıştırdateext: Dosyalara tarih eklemissingok: Log dosyası yoksa hata vermenotifempty: Log dosyası boşsa döndürmecreate 0640 root adm: Yeni log dosyası oluştururken izinleri ve sahibi ayarla
🚀 Logrotate’u Özel Log Dosyaları için Yapılandırma
Logrotate’un en güçlü yanı, farklı log dosyaları için özel yapılandırmalar tanımlayabilmenizdir. Bu yapılandırmalar /etc/logrotate.d/ dizininde saklanır.
Örnek 1: Apache Web Sunucusu Logları
Apache loglarını yönetmek için /etc/logrotate.d/apache2 dosyasını oluşturun:
# /etc/logrotate.d/apache2
/var/log/apache2/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
/usr/sbin/apache2ctl graceful > /dev/null
endscript
}
Açıklamalar:
rotate 52: Bir yıl boyunca log arşivlerini saklasharedscripts: Postrotate script’i sadece bir kez çalıştırpostrotate: Apache’yi yeniden yükle (log dosyalarını serbest bırakmak için)
Örnek 2: Nginx Logları
Nginx logları için /etc/logrotate.d/nginx dosyasını düzenleyin:
# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 640 www-data adm
sharedscripts
postrotate
/usr/sbin/nginx -s reload
endscript
}
Örnek 3: Uygulama Logları (Özel Hizmetler)
Kendi uygulamanızın loglarını yönetmek için /etc/logrotate.d/uygulama dosyasını oluşturun:
# /etc/logrotate.d/uygulama
/var/log/uygulama/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 644 root root
sharedscripts
postrotate
systemctl restart uygulama.service
endscript
}
🔄 Logrotate’un Çalışma Prensibi ve Döndürme Mekanizması
Logrotate, log dosyalarını döndürme (rotate) işlemi sırasında aşağıdaki adımları takip eder:
- Mevcut log dosyasını kapatır (örneğin,
access.log→access.log.1) - Yeni bir log dosyası oluşturur (örneğin,
access.log) - Eski log dosyasını sıkıştırır (örneğin,
access.log.1→access.log.1.gz) - Arşivlenen log dosyalarını siler (örneğin,
access.log.5.gzsilinir)
Döndürme Türleri
Logrotate’un desteklediği döndürme türleri:
| Tür | Açıklama | Örnek |
|---|---|---|
| rotate N | En fazla N arşiv sakla | rotate 4 → 4 arşiv + 1 aktif log |
| weekly | Haftalık döndürme | weekly → Her Pazar logları döndür |
| daily | Günlük döndürme | daily → Her gün logları döndür |
| monthly | Aylık döndürme | monthly → Her ayın 1’inde logları döndür |
| size | Belirli boyuta ulaşınca döndür | size 100M → 100MB’a ulaşınca döndür |
🛠️ Logrotate’u Manuel Olarak Test Etme
Logrotate’un doğru çalışıp çalışmadığını test etmek için -d (debug) ve -v (verbose) seçeneklerini kullanabilirsiniz:
# Logrotate’u debug modunda çalıştır
sudo logrotate -d /etc/logrotate.d/apache2
# Logrotate’u gerçek modda çalıştır (test için)
sudo logrotate -v /etc/logrotate.d/apache2
Debug çıktısı örneği:
reading config file /etc/logrotate.d/apache2
reading config info for /var/log/apache2/*.log
Handling 1 logs
...
rotating pattern: /var/log/apache2/*.log weekly (52 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/apache2/access.log
log does not need rotating (log size is below the 'size' threshold)
🚨 Disk Doluluğunu Önlemek için 5 Kritik Adım
1. Log Dosyalarını Sıkıştırma (Compression)
Sıkıştırma, disk alanından tasarruf etmenin en etkili yoludur. Logrotate’un compress ve delaycompress seçeneklerini kullanın:
/var/log/uygulama/*.log {
compress
delaycompress
...
}
compress: Döndürülen log dosyalarını sıkıştırdelaycompress: Bir sonraki döndürmede sıkıştır (aktif log dosyasını sıkıştırmamak için)
Sonuç: Log dosyaları %70-90 oranında küçülür.
2. Log Dosyalarını Döndürme Sıklığını Ayarlama
Log dosyalarını ne sıklıkla döndüreceğinizi ayarlayın:
# Günlük loglar için
daily
# Haftalık loglar için
weekly
# Belirli bir boyuta ulaşınca
tam 100M
Öneri:
- Kritik sistem logları (
/var/log/syslog,/var/log/auth.log) → haftalık - Uygulama logları → günlük
- Geçici loglar → boyut tabanlı (örneğin,
size 50M)
3. Arşivlenen Log Dosyalarını Sınırlama
Eski log dosyalarını saklama süresini sınırlayın:
rotate 4 # En fazla 4 arşiv sakla
rotate 52 # Bir yıl boyunca arşivleri sakla
Öneri:
- Kritik loglar (güvenlik, sistem) → uzun süre sakla (örneğin, 52 hafta)
- Geçici loglar → kısa süre sakla (örneğin, 4 hafta)
4. Log Dosyalarını Manuel Olarak Döndürme
Bazen log dosyalarını acil olarak döndürmeniz gerekebilir. Bunu manuel olarak yapabilirsiniz:
# Logrotate’u belirli bir log dosyası için çalıştır
sudo logrotate -f /etc/logrotate.d/apache2
# Tüm logrotate yapılandırmalarını çalıştır
sudo logrotate -f /etc/logrotate.conf
-f(force): Log dosyalarını zorla döndür
5. Logrotate’un Çalışmasını Doğrulama ve İzleme
Logrotate’un çalışmasını doğrulamak için sistem loglarını kontrol edin:
# Systemd üzerinden logrotate’un çalışıp çalışmadığını kontrol et
sudo systemctl status logrotate.timer
# Logrotate’un son çalışma zamanı
sudo journalctl -u logrotate.timer
# Disk kullanımını kontrol et
df -h /var
Öneri:
- Logrotate’un çalışmasını cron veya systemd timer ile otomatikleştirin
- Disk kullanımını Grafana/Prometheus ile izleyin
🔧 Logrotate’un Gelişmiş Kullanımı
1. Postrotate ve Prerotate Scriptleri
Log dosyalarını döndürmeden önce veya sonra özel komutlar çalıştırmak için prerotate ve postrotate bloklarını kullanın:
/var/log/nginx/*.log {
...
prerotate
echo "Log dosyaları döndürülmeden önce yapılacak işlemler"
endscript
postrotate
/usr/sbin/nginx -s reload
endscript
}
Kullanım alanları:
- Uygulamaları yeniden yükleme
- Log dosyalarını başka bir dizine taşımak
- Log dosyalarını analiz etmek
2. Logrotate ile Özel Dosya Dizinleri
Belirli bir dizindeki tüm log dosyalarını yönetmek için joker karakterler kullanın:
/var/log/uygulama/*.log {
...
}
/var/log/uygulama/subdir/*.log {
...
}
3. Logrotate ile SSH Loglarını Yönetme
SSH loglarını yönetmek için /etc/logrotate.d/sshd dosyasını düzenleyin:
# /etc/logrotate.d/sshd
/var/log/auth.log {
weekly
rotate 4
compress
delaycompress
missingok
notifempty
create 640 root adm
}
📊 Disk Doluluğunu Önlemek için Logrotate Stratejileri
| Senaryo | Önerilen Yapılandırma | Açıklama |
|---|---|---|
| Web Sunucusu (Apache/Nginx) | daily, rotate 30, compress | Günlük logları sıkıştırarak sakla |
| Uygulama Logları | size 100M, rotate 14, delaycompress | Boyut tabanlı döndürme |
| Sistem Logları | weekly, rotate 52, create 640 root adm | Uzun süreli arşivleme |
| Güvenlik Logları | daily, rotate 90, compress | Kritik logları uzun süre sakla |
| Geçici Loglar | size 50M, rotate 7 | Kısa süreli saklama |
⚠️ Sık Yapılan Hatalar ve Çözümleri
1. Logrotate’un Çalışmaması
Problem: Logrotate’un çalışmadığını fark ediyorsunuz.
Çözüm:
- Logrotate’un cron job’unu kontrol edin:
sudo cat /etc/cron.daily/logrotate - Logrotate’un sistem loglarını kontrol edin:
sudo journalctl -u logrotate.timer - Elle çalıştırarak test edin:
sudo logrotate -v /etc/logrotate.conf
2. Log Dosyalarının Sıkıştırılmaması
Problem: Log dosyaları sıkıştırılmıyor.
Çözüm:
compressvedelaycompressseçeneklerini doğru şekilde kullanın- Sıkıştırma için
gzipveyaxzkullanılabilir:compresscmd /usr/bin/gzip uncompresscmd /usr/bin/gunzip
3. Disk Doluluğunun Devam Etmesi
Problem: Logrotate çalışıyor ama disk doluluğu devam ediyor.
Çözüm:
- Logrotate’un hangi log dosyalarını yönetmediğini kontrol edin:
sudo logrotate -d /etc/logrotate.conf - Kritik log dosyalarını manuel olarak ekleyin
- Logrotate’un çalışma sıklığını artırın (örneğin,
dailyyerinesize 50M)
📝 Sonuç: Logrotate ile Disk Yönetimini Nasıl Optimize Edersiniz?
Logrotate, Linux sistemlerinde log yönetimini otomatikleştirmenin ve disk doluluğunu önlemenin en etkili yoludur. Bu rehberde öğrendiğiniz gibi:
- Logrotate’un temel yapılandırmasını (
/etc/logrotate.conf) anladınız. - Özel log dosyaları için yapılandırmalar oluşturmayı öğrendiniz.
- Logrotate’un çalışma prensibini (döndürme, sıkıştırma, arşivleme) kavradınız.
- Disk doluluğunu önlemek için 5 kritik adımı uyguladınız.
- Gelişmiş kullanım tekniklerini (postrotate scriptleri, özel dosya dizinleri) keşfettiniz.
🔄 Uygulama Özeti
- Logrotate’u kurun (varsayılan olarak çoğu sistemde yüklüdür).
- Ana yapılandırma dosyasını (
/etc/logrotate.conf) düzenleyin. - Özel log dosyaları için yapılandırma dosyaları oluşturun (
/etc/logrotate.d/). - Logrotate’un çalışmasını test edin (
-dve-vseçenekleriyle). - Disk kullanımını izleyin ve gerektiğinde ayarları güncelleyin.
🚀 İleri Seviye İpuçları
- Logrotate’u systemd timer ile çalıştırın (örneğin,
logrotate.timer). - Log dosyalarını farklı bir dizine taşımak için
olddirseçeneğini kullanın. - Log dosyalarını analiz etmek için
logrotatesonrası scriptler yazın. - Disk kullanımını izlemek için Prometheus + Grafana entegrasyonu yapın.
📚 Kaynaklar ve İleri Okuma
- Logrotate Resmi Dokümantasyonu
- Linux Logrotate Kullanım Kılavuzu
- Systemd ile Logrotate Timer Kurulumu
- Logrotate ile Uygulama Loglarını Yönetme
Son Söz: Logrotate, sistem yöneticilerinin en değerli araçlarından biridir. Disk doluluğunu önlemek, log yönetimini otomatikleştirmek ve sistem performansını korumak için Logrotate’u doğru şekilde kullanmayı öğrenin. Bu rehberdeki adımları uygulayarak, log yönetimini sisteminizin sürdürülebilirliği için optimize edebilirsiniz.
💡 Hatırlatma: Logrotate’un çalışmasını düzenli olarak kontrol edin ve disk kullanımını izleyin. Unutmayın, önlemek tedavi etmekten daha iyidir!
Bu yazı Mistral ile otomatik oluşturulmuştur.