Logrotate komutu ve kullanımı

Yasemin Gürcan —  22 Temmuz 2014 — 2 Comments

Logrotate komutu /usr/sbin klasörü altında yer alan bir komuttur. Bu komut ile

    • Dosya boyutu belirli bir büyüklüğe ulaştığında log dosyasını rotate(çevrim) etme
    • Rotate işleminden sonra yeni log bilgileri için dosya yaratma
    • Rotate edilmiş log dosyalarını sıkıştırma
    • Eski log dosyalarını kaldırma
    • Log dosyalarını tarihe göre saklama

gibi işlemler yapılabilir.
Logrotate komutunun çalışma yapısı aslında cronun çalışma yapısıdır. /etc/cron.daily/logrotate dizininde günlük olarak çalışan bir shell betiğidir (script).

Komutun genel yapısı aşağıdaki gibidir.
logrotate [-dv] [-f|--force] [-s|--state file] config_file

MongoDB log dosyası için bir örnek yapalım

Örneğimizi MongoDB’de yapmamızın nedeni  MongoDB’nin logları tek bir dosya üzerinde tutmasıdır. Bizim burada önüne geçmeye çalıştığımız şey bu dosyanın çok fazla büyümesine engel olmak ve çok büyüyen bir dosyanın sistemdeki etkilerinden korunmaktır. Birçok sistemde örneğin PostgreSQL’de rotation (çevrim) PostgreSQL’in kendi yapılandırma dosyasından (postgresql.conf) ayarlanabilmektedir. MongoDB için biz bunu elle yapacağız.

Logrotate konfigurasyon dosyası /etc dizini altındaki logrotate.conf dosyasında yer almaktadır. Bu dosyada utmp ve btmp logları için ayarlar mevcuttur. Bu loglar için sistem ayrı bir konfigurasyona ihtiyaç duymaz.

Aşağıda logrotate.conf dosyasınının default halini görebilirsiniz.

MongoDB için öncelikle /var/log/mongodb dizini altındaki log dosyalarını kontrol ediyoruz.

Daha sonra /etc/logrotate.d dizini altında geldiğimizde çeşitli programlar için oluşturulmuş logrotate konfigurasyonlarının yer aldığını görüyoruz.

Yukarıdaki dosyalar içinde MongoDB için konfigurasyon dosyası yer almıyorsa

komutu ile konfigurasyon dosyasını oluşturuyoruz.

ile oluşturduğumuz dosyasıyı açıp rotate işlemi için gerekli parametreleri yazıp kaydediyoruz.

Eğer MongoDB için conf. dosyası varsa parametreleri istediğimiz gibi değiştirerek kullanabiliriz.
Ben aşağıdaki parametreleri kullandım.

Bu ayarlar ile

  • mongodb.log dosyası günlük olarak saklanacak
  • Eski log dosyaları varsayılan olarak gzip şeklinde tutulacak
  • rotate 7 ile son 7 güne ait log dosyaları saklanacak.Bunun için eski log dosyaları tarih sırasına göre silinecek.

Kullandığımız parametreleri açıklayalım.

  • daily: Rotate işlemini günlük olarak gerçeleştirir.
  • compress: Eski log dosyalarını varsayılan olarak gzip olarak sıkıştırır.
  • dateext: Arşivlenen log dosyalarına YYYYMMDD şeklinde tarih formatı ekler.
  • missingok: Eğer log dosyası yoksa hata mesajı vermeden bir sonrakine geçer.
  • copytruncate: Dosyanın kopyasını aldıktan sonra,dosyanın boyutunu sıfırlamak için silme işlemini gerçekleştirir.

Yapmak istediğimiz işlemlere göre copy, dateformat, create, ifempty, mail, maxsize gibi parametreleri de kullanabiliriz. Parametrelerle ilgili ayrıntılı bilgilere man logrotate komutu ile ulaşabiliriz.

Ayrıca postrotate/endscript ifadelerini kullanarak her rotate işleminden sonra yaptırmak istediğimiz işlemleri aşağıdaki gibi yazabiliriz. prerotate/endscript ise rotate yapmadan önce komutu çalıştırır.

sudo logrotate -f /etc/logrotate.d/mongodb

komutunu terminalde çalıştırınca /var/log/mongodb dizini altında tutulan log dosyasında işlemlerin gerçekleştiğini görüyoruz.

Bu komutu çalıştırmadan da bir sonraki gün rotate işleminin gerçekleştiğini gözlemleyebiliriz. Diğer programlar için de logrotate kullanarak log dosyalarını kontrol altına alabiliriz.

Yararlandığım Kaynaklar

Yasemin Gürcan

Yasemin Gürcan

Posts

Süleyman Demirel Üniversitesi Bilgisayar Mühendisliği 3. sınıf öğrencisiyim. Markafoni'de IT stajyeri olarak çalışıyorum.PostgreSQL, Linux konularına yoğunlaştım. Teknik yazılar yazarak Kadın Yazılımcı'nın yaygınlaşmasına çalışıyorum.

2 responses to Logrotate komutu ve kullanımı

  1. Kemalettin Yeşilkaya 6 Ağustos 2014 at 17:09

    Çok güzel olmuş, teşekkürler… 🙂

Yorum yapmak için