Linux'ta Logrotate Kullanarak Günlük Döndürmeyi Kurma ve Yönetme


Linux sistemindeki en ilginç (ve belki de en önemli) dizinlerden biri /var/log'dur. Dosya Sistemi Hiyerarşi Standardına göre, sistemde çalışan çoğu hizmetin etkinliği, bu dizin veya alt dizinlerinden birinin içindeki bir dosyaya yazılır.

Bu tür dosyalar günlükler olarak bilinir ve sistemin nasıl çalıştığını (ve geçmişte nasıl davrandığını) incelemenin anahtarıdır. Günlükler aynı zamanda yöneticilerin ve mühendislerin sorun giderme sırasında baktıkları ilk bilgi kaynağıdır.

CentOS/RHEL/Fedora ve Debian/Ubuntu'da (çeşitlilik için) /var/log içeriğine bakarsak şunu görürüz: aşağıdaki günlük dosyaları ve alt dizinleri.

Sisteminizde/sistemlerinizde çalışan hizmetlere ve çalıştıkları süreye bağlı olarak sonucun sizin durumunuzda biraz farklı olabileceğini lütfen unutmayın.

RHEL/CentOS ve Fedora'da

ls /var/log

Debian ve Ubuntu'da

ls /var/log

Her iki durumda da, bazı günlük adlarının beklendiği gibi “log ” ile bittiğini, bazılarının ise tarih kullanılarak yeniden adlandırıldığını (örneğin, maillog-20160822) gözlemleyebiliriz. CentOS'ta) veya sıkıştırılmış (Debian'da auth.log.2.gz ve mysql.log.1.gz'yi düşünün) güçlü>).

Bu, seçilen dağıtıma bağlı olarak varsayılan bir davranış değildir ancak bu makalede göreceğimiz gibi, yapılandırma dosyalarındaki yönergeler kullanılarak istenildiği zaman değiştirilebilir.

Günlükler sonsuza kadar tutulursa, sonunda /var/log'un bulunduğu dosya sistemini doldururlar. Bunu önlemek için sistem yöneticisi, günlükleri periyodik olarak temizlemek için logrotate adlı güzel bir yardımcı program kullanabilir.

Birkaç kelimeyle söylemek gerekirse, logrotate, bir koşul karşılandığında ana günlüğü yeniden adlandıracak veya sıkıştıracaktır (bir dakika içinde bu konuda daha fazla bilgi vereceğiz), böylece bir sonraki olay boş bir dosyaya kaydedilecektir.

Ayrıca “eski” günlük dosyalarını kaldıracak ve en güncel olanları saklayacak. Elbette "eski"'nin ne anlama geldiğine ve logrotate'in bizim için günlükleri ne sıklıkla temizlemesini istediğimize biz karar vereceğiz.

Linux'ta Logrotate Kurulumu

logrotate'i yüklemek için paket yöneticinizi kullanmanız yeterlidir:

---------- On Debian and Ubuntu ---------- 
aptitude update && aptitude install logrotate 

---------- On CentOS, RHEL and Fedora ---------- 
yum update && yum install logrotate

Yapılandırma dosyasının (/etc/logrotate.conf), içindeki ayrı ayrı .conf dosyalarına başka, daha spesifik ayarların yerleştirilebileceğini belirtebileceğini unutmamak gerekir. /etc/logrotate.d.

Bu, yalnızca aşağıdaki satırın mevcut olması ve yorumlanmaması durumunda geçerli olacaktır:

include /etc/logrotate.d

İşleri düzenli tutmamıza yardımcı olacağı için bu yaklaşıma sadık kalacağız ve aşağıdaki örnekler için Debian kutusunu kullanacağız.

Linux'ta Logrotate'i Yapılandırma

Çok yönlü bir araç olan logrotate, günlüklerin ne zaman ve nasıl döndürüleceğini ve hemen sonrasında ne olması gerektiğini yapılandırmamıza yardımcı olacak birçok yönerge sağlar.

Aşağıdaki içerikleri /etc/logrotate.d/apache2.conf dosyasına ekleyelim (büyük olasılıkla bu dosyayı oluşturmanız gerekeceğini unutmayın) ve amacını belirtmek için her satırı inceleyelim:

/var/log/apache2/* {
    weekly
    rotate 3
    size 10M
    compress
    delaycompress
}

İlk satır, bloğun içindeki yönergelerin /var/log/apache2 içindeki tüm günlüklere uygulandığını gösterir:

  • haftalık, aracın günlükleri haftalık olarak döndürmeye çalışacağı anlamına gelir. Diğer olası değerler günlük ve aylıktır.
  • 3 döndür, yalnızca 3 döndürülmüş günlüğün tutulması gerektiğini belirtir. Böylece, en eski dosya sonraki dördüncü çalıştırmada kaldırılacaktır.
  • size=10M, rotasyonun gerçekleşeceği minimum boyutu 10M olarak ayarlar. Yani her log 10 MB'a ulaşana kadar döndürülmeyecektir.
  • sıkıştır ve delaycompress, en yenisi hariç, döndürülen tüm günlüklerin sıkıştırılması gerektiğini belirtmek için kullanılır.

Logrotate'in gerçekten şimdi çalıştırılması durumunda ne yapacağını görmek için bir prova gerçekleştirelim. -d seçeneğini ve ardından yapılandırma dosyasını kullanın (bu seçeneği atlayarak aslında logrotate'i çalıştırabilirsiniz):

logrotate -d /etc/logrotate.d/apache2.conf

Sonuçlar aşağıda gösterilmektedir:

Günlükleri sıkıştırmak yerine, onları döndürüldükleri tarihten sonra yeniden adlandırabiliriz. Bunu yapmak için dateext direktifini kullanacağız. Tarih biçimimiz varsayılan yyyyaagg dışındaysa, bunu dateformat kullanarak belirtebiliriz.

notifempty ile günlüğün boş olması durumunda bile rotasyonun gerçekleşmesini engelleyebileceğimizi unutmayın. Ek olarak logrotate'e, döndürülen günlüğü sistem yöneticisine (bu durumda [e-posta korumalı]) referans olarak göndermesini söyleyelim (bu, bir posta sunucusunun kurulmasını gerektirir; bu, bu makalenin kapsamı dışındadır).

Logrotate ile ilgili e-posta almak istiyorsanız Postfix posta sunucusunu burada gösterildiği gibi kurabilirsiniz: Postfix Posta Sunucusunu Yükle

Bu sefer yalnızca /var/log/squid/access.log'u döndürmek için /etc/logrotate.d/squid.conf'u kullanacağız:

/var/log/squid/access.log {
    monthly
    create 0644 root root
    rotate 5
    size=1M
    dateext
    dateformat -%d%m%Y
    notifempty
    mail [email 
}

Aşağıdaki resimde de görebileceğimiz gibi bu günlüğün döndürülmesine gerek yoktu. Ancak boyut koşulu karşılandığında (size=1M), döndürülen günlük access.log-25082020 olarak yeniden adlandırılacaktır (günlük Ağustos ayında döndürüldüyse) 25, 2020) ve ana günlük (access.log), 0644 olarak ayarlanan erişim izinleri ve root ile yeniden oluşturulacak güçlü> sahip ve grup sahibi olarak.

Son olarak, günlük sayısı 6'ya ulaştığında, en eski günlük [e-posta korumalı] adresine gönderilecek.

Şimdi döndürme gerçekleştiğinde özel bir komut çalıştırmak istediğinizi varsayalım. Bunu yapmak için, postrotate ve endscript direktifleri arasına böyle bir komutun bulunduğu satırı yerleştirin.

Örneğin, /var/log/myservice içindeki günlüklerden herhangi biri döndürüldüğünde root'a bir e-posta göndermek istediğimizi varsayalım. /etc/logrotate.d/squid.conf dosyasına kırmızı çizgileri ekleyelim:

/var/log/myservice/* {
	monthly
	create 0644 root root
	rotate 5
	size=1M
    	postrotate
   		echo "A rotation just took place." | mail root
    	endscript
}

Son fakat bir o kadar da önemlisi, /etc/logrotate.d/*.conf dosyasında bulunan seçeneklerin çakışma durumunda ana yapılandırma dosyasındaki seçenekleri geçersiz kıldığını unutmamak önemlidir.

Logrotate ve Cron

Varsayılan olarak logrotate kurulumu, /etc/cron.daily içinde logrotate adında bir crontab dosyası oluşturur. Bu dizindeki diğer crontab dosyalarında olduğu gibi, eğer anacron kurulu değilse, sabah 6:25'ten itibaren her gün çalıştırılacaktır.

Aksi takdirde infaz 7:35 civarında başlayacak. Doğrulamak için /etc/crontab veya /etc/anacrontab dosyasında cron.daily içeren satırı izleyin.

Özet

Birkaç günlük oluşturan bir sistemde, bu tür dosyaların yönetimi logrotate kullanılarak büyük ölçüde basitleştirilebilir. Bu makalede açıkladığımız gibi, periyodik olarak veya dosya belirli bir boyuta ulaştığında günlükleri otomatik olarak döndürecek, sıkıştıracak, kaldıracak ve postayla gönderecektir.

Sadece bir cron işi olarak çalışacak şekilde ayarlandığından emin olun; logrotate işleri sizin için çok daha kolaylaştıracaktır. Daha fazla ayrıntı için man sayfasına bakın.

Bu makaleyle ilgili herhangi bir sorunuz veya öneriniz var mı? Aşağıdaki yorum formunu kullanarak bize bildirmekten çekinmeyin.