Logrotate kullanarak günlük döndürme ve sıkıştırma
- Düzey: Orta
- Tahmini süre: ~20 dakika
- Hedef: Disk alanı tükenmesini önlemek için uygulama günlük dosyalarını otomatik olarak sıkıştırmak ve döndürmek üzere logrotate yapılandırmak.
Giriş
Günlükler – herhangi bir üretim uygulamasını yönetmenin kritik bir parçasıdır: onlarsız, neyin yanlış gittiğini ve bununla ilgili ne yapılması gerektiğini güvenilir bir şekilde anlamak çok zor olurdu. Yoğun bir uygulama dakikada binlerce giriş üretebilir ve bunların tümü genellikle dosyalarda saklanır. Disk alanının tükenmesini önlemek için eski günlükleri zamanında sıkıştırmamız ve silmemiz gerekir. Bu eğitimde, bir Linux sunucusunda logrotate yapılandıracağız.
Logrotate nedir?
logrotate, büyük sayıda günlük dosyası üreten sistemlerin yönetimini basitleştirmek için tasarlanmış bir Linux yardımcı programıdır. Günlüklerin otomatik olarak sıkıştırılmasına, döndürülmesine ve silinmesine olanak tanır. Genellikle günlük, haftalık veya aylık olarak cron veya bir systemd zamanlayıcısı aracılığıyla çalıştırılır.
Önkoşullar
Başlamadan önce, aşağıdaki koşulların karşılandığından emin olun:
- İşletim sistemi: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12 veya CentOS/RHEL 7+
- logrotate: sürüm 3.x (1. adımda kontrol edin)
- Erişim: sunucuya sudo veya root erişimi
- Gerekli bilgi: Linux komut satırını ve temel dosya düzenlemeyi güvenle kullanma
Adım 1: Logrotate kurulumunu doğrulama
Kurulumu doğrulamak için, basitçe çalıştırın:
logrotate --version
Beklenen çıktı:
logrotate 3.19.0 Varsayılan posta komutu: /usr/bin/mail Varsayılan sıkıştırma komutu: /bin/gzip Varsayılan sıkıştırmayı açma komutu: /bin/gunzip Varsayılan sıkıştırma uzantısı: .gz Varsayılan durum dosyası yolu: /var/lib/logrotate/status
Eğer komut bulunamazsa – logrotate yüklü değildir. Yükleyin:
Debian/Ubuntu:
sudo apt install logrotate
CentOS/RHEL:
sudo yum install logrotate
Adım 2: Yapılandırma yapısını anlama
Ana yapılandırma /etc/logrotate.conf konumunda bulunur – şimdilik bunu değiştirmeyeceğiz. Belirli hizmetler için kurallarımız /etc/logrotate.d/ içine gidecek – her hizmet için oraya ayrı bir dosya yerleştirilmelidir.
Bir şey eklemeden önce, hizmetiniz için bir yapılandırmanın zaten mevcut olup olmadığını kontrol edin:
ls /etc/logrotate.d/
nginx veya Apache gibi popüler hizmetler için yapılandırmalar genellikle zaten mevcuttur. Eğer nginx veya apache2 zaten oradaysa – o dosyayı açın ve döndürme sayısını ve sıkıştırma ayarlarını ihtiyaçlarınıza göre ayarlayın, bir kopya oluşturmaktan ziyade.
Adım 3: Bir hizmet yapılandırması ekleme
Varsayalım ki özel bir uygulama var ve günlükleri /opt/myapp/*.log konumunda bulunuyor.
Dosyayı oluşturun ve açın:
sudo nano /etc/logrotate.d/myapp
İçine aşağıdakileri yapıştırın:
/opt/myapp/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate systemctl reload myapp > /dev/null 2>&1 || true endscript }
Bu yapılandırma logrotate'e şunları yapmasını talimat verir:
- daily – günlükleri günlük olarak döndür; ayrıca
weeklyveyamonthlybelirtebilirsiniz. - missingok – günlük dosyası eksikse bir hata ile başarısız olmamak.
- rotate 14 – silinmeden önce 14 döndürülmüş kopyayı sakla.
- compress – döndürülen günlükleri gzip kullanarak sıkıştır.
- delaycompress – en son döndürmeyi sıkıştırma; uygulama hala dosyayı açık tutuyorsa kullanışlıdır.
- notifempty – günlük dosyası boşsa döndürmeyi atla.
- create 0640 www-data adm – belirtilen izinler, sahip ve grup ile yeni bir boş günlük dosyası oluştur. Sahip, uygulamanın çalıştığı kullanıcı ile eşleşmelidir (Debian tabanlı sistemlerde genellikle
www-data, RHEL tabanlı sistemlerde genellikleapacheveyanginx). - sharedscripts – postrotate betiğini bir kez çalıştır, birden fazla dosya eşleşse bile.
- postrotate – döndürmeden sonra uygulamaya dosya tanıtıcılarını yeniden açmasını sinyal ver.
Eğer /opt/myapp/ dizini veya günlük dosyaları ilk çalıştırma sırasında henüz mevcut değilse, bu bir sorun değildir. missingok direktifi logrotate'in dosyayı sessizce atlamasına neden olacak ve bir hata vermeyecektir. Uygulama günlükleri oluşturur oluşturmaz günlük döndürme otomatik olarak başlayacaktır.
Adım 4: Yapılandırmayı test etme
4.1 Kuru çalıştırma
Yapılandırmayı yazdıktan sonra, doğrulanmalıdır. -d bayrağı logrotate'i hata ayıklama modunda çalıştırır – hiçbir şey aslında değiştirilmez:
sudo logrotate -d /etc/logrotate.d/myapp
-d modu tanılama bilgileri çıktılar ancak hiçbir dosyayı değiştirmez.
4.2 Zorunlu gerçek çalıştırma
Eğer kuru çalıştırma doğru görünüyorsa – -f bayrağını kullanarak gerçek bir döndürmeyi zorlayın:
sudo logrotate -f /etc/logrotate.d/myapp
Önemli: -f bayrağı gerçek bir döndürmeyi tetikler. Test çalıştırması doğru göründükten sonra yalnızca bunu çalıştırın.
Adım 5: Sonucu doğrulama
İlk birkaç döndürmeden sonra, günlük dizinini kontrol edin:
ls -lh /opt/myapp/
Beklenen çıktı:
toplam 28K -rw-r----- 1 www-data adm 0 Oca 17 12:00 app.log -rw-r----- 1 www-data adm 12K Oca 17 11:59 app.log.1 -rw-r----- 1 www-data adm 11K Oca 16 12:00 app.log.2.gz -rw-r----- 1 www-data adm 9K Oca 15 12:00 app.log.3.gz
En son döndürme (app.log.1) delaycompress nedeniyle sıkıştırılmamış olarak kalır. Daha eski olan her şey gzipped. Tam olarak istediğimiz buydu.
Adım 6: Otomatik zamanlamayı doğrulama
logrotate otomatik olarak çalışır – dağıtıma bağlı olarak cron veya bir systemd zamanlayıcısı aracılığıyla.
Cron tabanlı sistemler
cat /etc/cron.daily/logrotate
Eğer dosya mevcutsa – bu dosya logrotate'i günlük olarak çalıştıran dosyadır.
Systemd tabanlı sistemler
Daha yeni sistemlerde, logrotate cron yerine bir systemd zamanlayıcısı aracılığıyla çalıştırılabilir.
Kontrol edin:
systemctl list-timers | grep logrotate
Son ve sonraki çalışma zamanlarıyla bir zamanlayıcı görmelisiniz, şöyle bir şey:
Per 2026-01-18 00:00:00 UTC 23s kaldı Çar 2026-01-17 00:00:11 UTC 47 dk önce logrotate.timer
Eğer logrotate.timer çıktıda yoksa – zamanlayıcı devre dışı. Etkinleştirin:
sudo systemctl enable logrotate.timer
sudo systemctl start logrotate.timer
Durum dosyası
Logrotate'in en son ne zaman çalıştığını kendi durum dosyası aracılığıyla kontrol edebilirsiniz:
cat /var/lib/logrotate/status
Bu, logrotate'in kendi döndürme geçmişidir. İlk gerçek çalıştırmadan sonra, her günlük dosyasını ve son döndürme tarihini göreceksiniz:
"/opt/myapp/app.log" 2026-1-17 "/var/log/nginx/access.log" 2026-1-17
Eğer herhangi bir günlük beklenildiği gibi döndürülmüyorsa – bakılacak ilk yer burasıdır.
Geri alma
Yapılan her şeyi geri almak için, /etc/logrotate.d/ içindeki yapılandırma dosyasını basitçe silin:
sudo rm /etc/logrotate.d/myapp
Bu, uygulamanız için günlük işleme işlemini durduracaktır. Zaten döndürülen dosyalar silinmez.
Logrotate'i tamamen kaldırmak için:
Debian/Ubuntu:
sudo apt remove logrotate
CentOS/RHEL:
sudo yum remove logrotate
Önemli: Logrotate'i kaldırmak, nginx, rsyslog ve ona bağlı diğer hizmetler dahil olmak üzere tüm sistem için günlük döndürmeyi devre dışı bırakacaktır.
Sonuç
Hepsi bu kadar. /etc/logrotate.d/ içinde iyi yazılmış bir dosya, -d ile doğrulandı – ve iş bitti. Günlükler temiz kalır, disk sağlıklı kalır ve artık bunu düşünmek zorunda kalmazsınız.
Belge Sürümü: 1.2
Son Güncelleme: Mart 2026
Sahibi: Teknik Dokümantasyon Ekibi