Logrotate kullanarak günlük döndürme ve sıkıştırma | INTROSERV
EUR
european

EUR

usa

USD

Turkish Tr
Ex. VAT Ex. VAT 0%

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:

  1. daily – günlükleri günlük olarak döndür; ayrıca weekly veya monthly belirtebilirsiniz.
  2. missingok – günlük dosyası eksikse bir hata ile başarısız olmamak.
  3. rotate 14 – silinmeden önce 14 döndürülmüş kopyayı sakla.
  4. compress – döndürülen günlükleri gzip kullanarak sıkıştır.
  5. delaycompress – en son döndürmeyi sıkıştırma; uygulama hala dosyayı açık tutuyorsa kullanışlıdır.
  6. notifempty – günlük dosyası boşsa döndürmeyi atla.
  7. 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 genellikle apache veya nginx).
  8. sharedscripts – postrotate betiğini bir kez çalıştır, birden fazla dosya eşleşse bile.
  9. postrotate – döndürmeden sonra uygulamaya dosya tanıtıcılarını yeniden açmasını sinyal ver.

Info

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

Info

-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

Info

Ö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

Info

Ö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

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA