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).

#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

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.

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
                                                                     1,1           Top

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

-rw-r--r-- 1 mongodb nogroup 2638 Tem 19 12:07 mongodb.log

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.

-rw-r--r-- 1 root root 434 Mar 19 22:57 apache2
-rw-r--r-- 1 root root 126 Eki 11  2013 apport
-rw-r--r-- 1 root root 173 Eyl 11  2013 apt
-rw-r--r-- 1 root root 430 Eyl 27  2013 cups-daemon
-rw-r--r-- 1 root root 232 Eki  4  2013 dpkg
-rw-r--r-- 1 root root 164 Tem 20 12:11 mongodb-server *
-rw-r--r-- 1 root root 905 Nis 20 18:22 mysql-server
-rw-r--r-- 1 root root 173 Ağu 28  2013 postgresql-common
-rw-r--r-- 1 root root  94 Oca 23  2013 ppp
-rw-r--r-- 1 root root 515 Haz  5  2013 rsyslog
-rw-r--r-- 1 root root 513 Ağu 27  2013 speech-dispatcher

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

touch mongodb

komutu ile konfigurasyon dosyasını oluşturuyoruz.

sudo vim mongodb

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.

/var/log/mongodb/mongodb.log {   
   daily
   rotate 7
   delaycompress
   compress
   dateext
   missingok
   copytruncate

}

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.

postrotate
    kill <mongod process id>
endscript

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.

-rw-r--r-- 1 mongodb nogroup    0 Tem 19 12:25 mongodb.log
-rw-r--r-- 1 mongodb nogroup 2423 Tem 21 13.00 mongodb.log-20140721
-rw-r--r-- 1 mongodb nogroup 1395 Tem 20 11.56 mongodb.log-20140720.gz

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

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… 🙂

Kemalettin Yeşilkaya için bir cevap yazın Cevabı iptal et