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.