Takip et

Logrotate ile Ubuntu 12.10 Üzerinde Log Dosyalarını Yönetme

Logrotate ile Ubuntu 12.10 Üzerinde Log Dosyalarını Yönetme Giriş Bilgisayar sistemleri ve üzerinde çalışan uygulamalar, faaliyetlerini ve k

Logrotate ile Ubuntu 12.10 Üzerinde Log Dosyalarını Yönetme

Giriş

Bilgisayar sistemleri ve üzerinde çalışan uygulamalar, faaliyetlerini ve karşılaştıkları olayları kaydetmek için log (günlük) dosyaları oluşturur. Bu log dosyaları, sistem yöneticileri ve geliştiriciler için paha biçilmez birer bilgi kaynağıdır. Sistem sağlığını izlemek, performans sorunlarını gidermek, güvenlik ihlallerini tespit etmek ve uygulama hatalarını ayıklamak gibi birçok kritik görevde loglara başvurulur. Ancak, zamanla bu log dosyaları büyüyerek disk alanını tüketebilir, sistem performansını etkileyebilir ve okunması zor devasa metin yığınlarına dönüşebilir. İşte tam bu noktada, log yönetimi devreye girer. Log yönetimi, log dosyalarının düzenli olarak arşivlenmesi, sıkıştırılması, döndürülmesi (rotasyon) ve eski dosyaların silinmesi işlemlerini kapsar. Ubuntu 12.10 gibi sunucu işletim sistemlerinde bu görevi üstlenen en güçlü ve yaygın araçlardan biri Logrotate’tir. Bu makalede, Ubuntu 12.10 özelinde Logrotate’ın ne olduğunu, nasıl çalıştığını, nasıl yapılandırılacağını ve log dosyalarını etkin bir şekilde yönetmek için nasıl kullanılacağını ayrıntılı olarak inceleyeceğiz.

Log Dosyaları Neden Önemlidir?

Log dosyaları, bir sistemin ve uygulamaların “kara kutusu” gibidir. Sistemde olup biten her şeyin yazılı bir kaydını tutarlar. Bu kayıtlar, çeşitli nedenlerle hayati öneme sahiptir:

* Sistem Sağlığı ve Performans İzleme: Loglar, CPU kullanımı, bellek tüketimi, disk G/Ç işlemleri gibi sistem kaynaklarının nasıl kullanıldığına dair ipuçları verir. Kritik servislerin başlatılıp başlatılamadığı, veritabanı bağlantı hataları gibi durumlar loglarda görülebilir. Bu sayede, potansiyel performans darboğazları veya sistem arızaları önceden tespit edilebilir.
* Hata Ayıklama ve Sorun Giderme: Bir uygulama çöktüğünde veya beklenen şekilde çalışmadığında, log dosyaları hatanın kök nedenini bulmak için ilk bakılması gereken yerdir. Hata mesajları, yığın izleri (stack traces) ve diğer hata bilgileri, geliştiricilerin sorunları hızlıca teşhis etmesine yardımcı olur.
* Güvenlik Denetimi ve İhlallerini Tespit Etme: Başarısız oturum açma girişimleri, yetkisiz erişim denemeleri, güvenlik duvarı reddetmeleri gibi olaylar güvenlik loglarına kaydedilir. Bu loglar, potansiyel güvenlik tehditlerini veya gerçekleşmiş bir saldırıyı tespit etmek ve analiz etmek için kullanılır. Yasal uyumluluk gereksinimleri (örneğin, GDPR, HIPAA) genellikle belirli bir süre boyunca güvenlik loglarının saklanmasını zorunlu kılar.
* Yasal Uyumluluk: Birçok sektörde ve ülkede, şirketlerin belirli türdeki verileri (işlem logları, kullanıcı erişim logları vb.) belirli bir süre boyunca saklaması yasal bir zorunluluktur. Logrotate, bu uyumluluk gereksinimlerini karşılamak için log dosyalarının düzenli olarak arşivlenmesini ve saklanmasını kolaylaştırır.
* Uygulama Davranışını Anlama: Geliştiriciler, kullanıcıların uygulamalarıyla nasıl etkileşim kurduğunu, hangi özelliklerin daha sık kullanıldığını veya hangi işlevlerin sorunlara yol açtığını anlamak için uygulama loglarını analiz edebilir. Bu bilgiler, ürün geliştirme ve iyileştirme süreçlerinde değerli geri bildirimler sağlar.

Ancak, bu kadar önemli bilgilere ev sahipliği yapan log dosyaları, kontrolsüz bırakıldığında hızlıca büyüyebilir. Gigabaytlarca hatta terabaytlarca log verisi, disk alanını doldurabilir, dosya sistemi performansını düşürebilir ve log dosyalarını açma, okuma ve işleme sürelerini uzatarak sistem yöneticileri için sorun teşkil edebilir. Bu nedenle, log dosyalarının düzenli ve otomatik bir şekilde yönetilmesi zorunludur.

Logrotate Nedir?

Logrotate, Unix benzeri işletim sistemlerinde log dosyalarını otomatik olarak yönetmek için tasarlanmış bir yardımcı programdır. Temel amacı, log dosyalarının aşırı büyümesini önlemek ve sistem kaynaklarını (özellikle disk alanını) verimli kullanmaktır. Logrotate bunu, log dosyalarını belirli aralıklarla döndürerek (rotate), sıkıştırarak, eski sürümlerini silerek veya e-posta ile göndererek yapar.

Logrotate’ın Çalışma Prensibi:
Logrotate, genellikle bir cron işi (cron job) aracılığıyla düzenli olarak çalıştırılır. Ubuntu 12.10’da bu genellikle /etc/cron.daily/logrotate betiği tarafından gerçekleştirilir. Bu betik, /etc/logrotate.conf ana yapılandırma dosyasını ve /etc/logrotate.d/ dizinindeki uygulama özel yapılandırma dosyalarını okur. Bu dosyalarda tanımlanan kurallara göre, Logrotate ilgili log dosyalarını bulur ve aşağıdaki işlemleri gerçekleştirir:

1. Döndürme (Rotation): Mevcut log dosyasının adını değiştirir (örneğin, access.log -> access.log.1). Yeni log kayıtları için aynı ada sahip yeni, boş bir log dosyası oluşturur.
2. Sıkıştırma (Compression): Döndürülen eski log dosyalarını (örneğin, access.log.1) sıkıştırır (örneğin, access.log.1.gz) disk alanından tasarruf etmek için.
3. Saklama (Retention): Belirli sayıda döndürülmüş log dosyasını saklar (örneğin, son 4 hafta). Daha eski dosyaları otomatik olarak siler.
4. Özel İşlemler (Post-rotation Scripts): Log dosyası döndürüldükten sonra, ilgili uygulamanın log dosyasını yeniden açmasını veya başka özel işlemler yapmasını tetiklemek için betikler çalıştırabilir. Bu, uygulamanın hala eski log dosyasına yazmaya devam etmesini engellemek için önemlidir.

Logrotate’ın Avantajları:

* Disk Alanı Tasarrufu: Log dosyalarını sıkıştırarak ve eski sürümlerini silerek disk alanını önemli ölçüde boşaltır.
* Sistem Stabilitesi: Log dosyalarının aşırı büyümesini engelleyerek dosya sistemi performansının düşmesini ve sistemin kararsız hale gelmesini önler.
* Düzenli Log Yönetimi: Log yönetimi görevlerini otomatikleştirir, böylece yöneticilerin manuel müdahalesine gerek kalmaz.
* Kolay Analiz: Daha küçük, yönetilebilir log dosyaları, sorun giderme ve analiz süreçlerini kolaylaştırır.
* Esneklik: Çok çeşitli yapılandırma seçenekleri sunarak farklı uygulamaların ve sistemlerin özel ihtiyaçlarına göre uyarlanabilir.

Ubuntu 12.10 Üzerinde Logrotate Kurulumu ve Temelleri

Ubuntu 12.10 gibi çoğu modern Linux dağıtımında Logrotate, varsayılan olarak kurulu gelir. Ancak, kurulu olup olmadığını veya bir güncellemeye ihtiyacı olup olmadığını kontrol etmek her zaman iyi bir uygulamadır.

Kurulum Kontrolü:
Logrotate’ın sisteminizde yüklü olup olmadığını kontrol etmek için terminalde aşağıdaki komutları kullanabilirsiniz:

dpkg -l logrotate

Bu komut, Logrotate paketinin kurulu olup olmadığını ve sürümünü gösterecektir. Eğer kuruluysa, çıktıda ii logrotate ile başlayan bir satır göreceksiniz.

Alternatif olarak, Logrotate yürütülebilir dosyasının sistem PATH’inizde olup olmadığını kontrol edebilirsiniz:

which logrotate

Eğer kuruluysa, genellikle /usr/sbin/logrotate gibi bir yol döndürecektir.

Kurulum Gerekirse:
Eğer Logrotate kurulu değilse veya bir nedenle kaldırılmışsa, aşağıdaki komutlarla kolayca kurabilirsiniz:

sudo apt-get update
sudo apt-get install logrotate

Bu komutlar, paket listesini güncelleyecek ve Logrotate paketini sisteminize yükleyecektir.

Logrotate Nasıl Çalışır?

Logrotate’ın çalışma mekanizması, üç ana bileşenin etkileşimiyle gerçekleşir:

1. Ana Yapılandırma Dosyası (/etc/logrotate.conf): Bu dosya, Logrotate’ın global davranışını tanımlayan varsayılan ayarları içerir. Ayrıca, /etc/logrotate.d/ dizinindeki uygulama özel yapılandırma dosyalarının dahil edilmesini sağlar.
2. Uygulama Özel Yapılandırma Dosyaları (/etc/logrotate.d/): Bu dizin, Apache, Nginx, MySQL, syslog gibi farklı uygulamalar için özel logrotate kurallarını içeren ayrı yapılandırma dosyalarını barındırır. Bu modüler yapı, her uygulamanın loglama gereksinimlerini ayrı ayrı yönetmeyi kolaylaştırır.
3. Cron Entegrasyonu (/etc/cron.daily/logrotate): Logrotate’ın düzenli olarak çalışmasını sağlayan bir cron betiğidir. Ubuntu 12.10’da, /etc/cron.daily/logrotate betiği, sistem tarafından her gün otomatik olarak çalıştırılır. Bu betik, /usr/sbin/logrotate /etc/logrotate.conf komutunu çalıştırarak Logrotate’ı tetikler.

Çalışma Akışı Özetle:

* Her gün, cron servisi /etc/cron.daily/logrotate betiğini çalıştırır.
* Bu betik, logrotate /etc/logrotate.conf komutunu yürütür.
* logrotate programı, /etc/logrotate.conf dosyasını okur.
* logrotate.conf dosyasındaki include /etc/logrotate.d direktifi sayesinde, Logrotate /etc/logrotate.d/ dizinindeki tüm yapılandırma dosyalarını da okur.
* Logrotate, okuduğu tüm yapılandırma dosyalarındaki kurallara göre log dosyalarının döndürülmesi gerekip gerekmediğini kontrol eder (son döndürme zamanı, dosya boyutu vb. kriterlere göre).
* Döndürülmesi gereken log dosyaları için tanımlanan işlemleri (döndürme, sıkıştırma, silme, betik çalıştırma) gerçekleştirir.
* Logrotate, her bir log dosyasının son döndürme zamanını ve durumunu /var/lib/logrotate/status dosyasında tutar. Bu dosya, Logrotate’ın bir sonraki çalıştığında hangi logların döndürülmesi gerektiğini bilmesini sağlar.

/etc/logrotate.conf Dosyasının İncelenmesi

/etc/logrotate.conf dosyası, Logrotate’ın genel davranışını ve tüm log dosyaları için geçerli olabilecek varsayılan ayarları tanımlar. Bu dosyanın içeriği genellikle aşağıdaki gibi bir yapıya sahiptir:

# See "man logrotate" for details

rotate log files weekly

weekly

use the syslog group by default, since this is the owning group

of /var/log/syslog.

su root syslog

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

RPM packages drop logrotate configuration into this directory

include /etc/logrotate.d

Yukarıdaki örnekte yer alan temel direktifleri ve anlamlarını inceleyelim:

* weekly: Log dosyalarının haftalık olarak döndürüleceğini belirtir. Diğer seçenekler daily, monthly ve yearly‘dir.
* su root syslog: Logrotate’ın log dosyalarını döndürme ve yeni dosyaları oluşturma işlemlerini root kullanıcısı ve syslog grubu altında yapmasını sağlar. Bu, özellikle postrotate veya prerotate betiklerinin belirli izinlere ihtiyaç duyduğu durumlarda faydalıdır.
* rotate 4: En fazla 4 adet döndürülmüş log dosyasının saklanacağını belirtir. Örneğin, access.log.1, access.log.2, access.log.3, access.log.4. Beşinci bir döndürme gerçekleştiğinde, access.log.4 silinir ve diğerleri birer sıra kayar.
* create: Eski log dosyası döndürüldükten sonra aynı isimde yeni, boş bir log dosyası oluşturulmasını sağlar. Bu, uygulamanın yeni logları yazmaya devam etmesi için gereklidir.
* compress: Döndürülen log dosyalarının sıkıştırılmasını sağlar (genellikle gzip kullanarak .gz uzantısıyla). Bu, disk alanından tasarruf etmenin ana yollarından biridir.
* include /etc/logrotate.d: Bu direktif, Logrotate’a /etc/logrotate.d/ dizinindeki tüm yapılandırma dosyalarını okumasını söyler. Bu, modüler yapılandırmanın temelidir.

Diğer yaygın global direktifler şunlardır:

* delaycompress: Log dosyası ilk döndürüldüğünde sıkıştırmaz, bir sonraki döndürmede sıkıştırır. Bu, uygulamanın hala önceki log dosyasına yazıyor olabileceği durumlarda faydalıdır.
* missingok: Log dosyası bulunamazsa hata vermemesini sağlar.
* notifempty: Log dosyası boşsa döndürme işlemi yapmamasını sağlar.
* dateext: Döndürülen log dosyalarına tarih uzantısı ekler (örneğin, access.log-20230101.gz). Bu, sıralı numaralar yerine tarihe göre logları takip etmeyi kolaylaştırır.
* errors user@example.com: Logrotate çalışırken bir hata oluşursa, belirtilen e-posta adresine hata raporu gönderir.

Bu global ayarlar, /etc/logrotate.d/ dizinindeki uygulama özel yapılandırma dosyalarında belirtilen özel ayarlar tarafından geçersiz kılınabilir.

Uygulama Özel Yapılandırmaları: /etc/logrotate.d/

Logrotate’ın gücünün büyük bir kısmı, her uygulama için özelleştirilmiş yapılandırma dosyaları oluşturma yeteneğinden gelir. Bu dosyalar /etc/logrotate.d/ dizininde bulunur ve genellikle uygulamanın adıyla anılır (örneğin, apache2, mysql, nginx, syslog).

Neden Ayrı Dosyalar Kullanılır?
* Modülerlik: Her uygulamanın loglama gereksinimleri farklı olabilir. Ayrı dosyalar, her bir uygulamanın log yönetimi politikalarını bağımsız olarak tanımlamayı ve yönetmeyi sağlar.
* Kolay Yönetim: Yeni bir uygulama yüklendiğinde veya mevcut bir uygulamanın loglama davranışı değiştiğinde, sadece ilgili yapılandırma dosyasını düzenlemek yeterlidir.
* Çakışmaları Önleme: Farklı uygulamaların logrotate ayarlarının birbirini etkilemesini engeller.

Örnek Bir Yapılandırma Dosyası İçeriği:
Şimdi, yaygın bir senaryo olan Nginx web sunucusu için bir örnek yapılandırma dosyası (/etc/logrotate.d/nginx) üzerinden Logrotate direktiflerini daha detaylı inceleyelim:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        invoke-rc.d nginx rotate > /dev/null 2>&1
    endscript
}

Bu yapılandırma bloğu, /var/log/nginx/ dizini altındaki tüm .log uzantılı dosyalar için geçerli olacaktır. Her bir direktifin anlamı şunlardır:

/var/log/nginx/.log: Bu, log dosyalarının yolunu ve adlandırma desenini belirtir. Logrotate bu desenle eşleşen tüm dosyaları yönetir. Birden fazla dosya yolu virgülle ayrılabilir.
* daily: Log dosyalarının günlük olarak döndürüleceğini belirtir.
* missingok: Eğer belirtilen log dosyaları bulunamazsa, Logrotate hata vermeden bir sonraki log dosyasına geçecektir. Bu, özellikle bazı log dosyalarının her zaman var olmayabileceği durumlarda kullanışlıdır.
* rotate 14: En fazla 14 adet döndürülmüş log dosyasının saklanacağını belirtir. Daha eski dosyalar silinecektir.
* compress: Döndürülen log dosyalarını sıkıştırır (genellikle gzip ile .gz uzantılı).
* delaycompress: Sıkıştırma işlemini bir sonraki döndürmeye erteler. Yani, nginx.log.1 döndürüldüğünde sıkıştırılmaz, ancak bir sonraki döndürmede nginx.log.2 olduğunda sıkıştırılır. Bu, postrotate betiğinin çalışması sırasında uygulamanın hala nginx.log.1‘e yazma ihtimaline karşı bir önlemdir.
* notifempty: Log dosyası boşsa, döndürme işlemi gerçekleştirilmez.
* create 0640 www-data adm: Eski log dosyası döndürüldükten sonra, yeni ve boş bir log dosyası oluşturulur. Bu direktif, yeni dosyanın izinlerini (0640), sahibini (www-data) ve grubunu (adm) belirtir. Bu, uygulamanın (Nginx) yeni log dosyasına doğru izinlerle yazabilmesi için kritik öneme sahiptir.
sharedscripts: Bu, /var/log/nginx/.log desenine uyan birden fazla log dosyası olsa bile, prerotate ve postrotate betiklerinin yalnızca bir kez çalıştırılmasını sağlar. Bu direktif kullanılmazsa, her log dosyası için ayrı ayrı betikler çalıştırılır ki bu genellikle istenmez.
* postrotate / endscript: Bu blok, log dosyası döndürüldükten ve sıkıştırıldıktan sonra çalıştırılacak betikleri tanımlar. Nginx örneğinde, invoke-rc.d nginx rotate komutu, Nginx servisine log dosyalarını yeniden açması gerektiğini bildirir. Bu, Nginx’in eski log dosyasına yazmaya devam etmesini engeller ve yeni, boş log dosyasına yazmaya başlamasını sağlar. > /dev/null 2>&1 çıktıyı susturur.
* prerotate / endscript: Log dosyası döndürülmeden önce çalıştırılacak betikleri tanımlar. Genellikle, log dosyası yazımını geçici olarak durdurmak için kullanılır.

Diğer Önemli Direktifler:

* copytruncate: Bu direktif, log dosyasını döndürmek yerine, mevcut log dosyasının bir kopyasını oluşturur ve ardından orijinal dosyayı sıfırlar (truncate eder). Bu, uygulamanın log dosyasını kapatıp yeniden açmasına gerek kalmadan log döndürmeyi sağlar. Ancak, log kayıplarına yol açabilir, çünkü kopyalama ve sıfırlama arasında geçen sürede yazılan loglar kaybolabilir. Genellikle postrotate betikleriyle birlikte create kullanmak daha güvenli bir yaklaşımdır.
* ifempty: Log dosyası boş olsa bile döndürme işlemi yapar. notifempty‘nin tersidir.
* olddir : Döndürülen log dosyalarının belirtilen bir dizine taşınmasını sağlar. Örneğin, olddir /var/log/nginx/old.
* mail : Döndürülen log dosyalarını belirtilen e-posta adresine gönderir.
* nomail: Döndürülen log dosyalarını e-posta ile göndermez (varsayılan davranıştır).
* firstaction / lastaction: Tüm yapılandırma dosyaları işlenmeden önce veya sonra bir kez çalıştırılacak betikleri tanımlar. prerotate ve postrotate‘ten farklı olarak, bunlar belirli bir log dosyasıyla ilişkili değildir.

Logrotate Yapılandırmalarını Test Etme

Logrotate yapılandırmalarını gerçek log dosyaları üzerinde çalıştırmadan önce test etmek çok önemlidir. Yanlış yapılandırılmış bir Logrotate, önemli logların kaybolmasına veya sistemin beklenmedik şekilde davranmasına neden olabilir.

1. Hata Ayıklama (Debug) Modu:
Hata ayıklama modu, Logrotate’ın ne yapacağını gösterir, ancak gerçekte hiçbir işlem gerçekleştirmez. Bu, yapılandırma dosyanızdaki hataları veya beklenmedik davranışları tespit etmek için en güvenli yoldur.

sudo logrotate -d /etc/logrotate.conf

Bu komut, Logrotate’ın tüm yapılandırma dosyalarını okuyacak ve her bir log dosyası için hangi işlemlerin yapılacağını adım adım açıklayan ayrıntılı bir çıktı verecektir. Çıktıyı dikkatlice inceleyin ve beklentilerinizle uyuşup uyuşmadığını kontrol edin. Özellikle running postrotate script gibi betiklerin doğru zamanda ve doğru komutlarla çalışıp çalışmadığına dikkat edin.

2. Ayrıntılı (Verbose) Mod:
Ayrıntılı mod, Logrotate’ın gerçekten gerçekleştirdiği işlemleri gösterir, ancak hata ayıklama modu kadar detaylı değildir. Bu mod, Logrotate’ın normal bir çalıştırmasının çıktısını görmek istediğinizde kullanışlıdır.

sudo logrotate -v /etc/logrotate.conf

Bu, Logrotate’ın hangi log dosyalarını işlediğini ve hangi eylemleri gerçekleştirdiğini özetleyecektir.

3. Zorla (Force) Modu (Dikkatli Kullanın!):
Zorla modu (-f), Logrotate’ın koşullara bakmaksızın (örneğin, döndürme süresi dolmamış olsa bile) tüm log dosyalarını döndürmesini sağlar. Bu, özellikle yeni bir yapılandırma dosyasını test ederken veya bir sorunu hızlıca gidermek için bir kerelik döndürme yapmak istediğinizde kullanışlıdır. Ancak, önemli logların beklenenden daha erken silinmesine neden olabileceği için dikkatli kullanılmalıdır.

sudo logrotate -f /etc/logrotate.conf

Bu komutu kullanmadan önce her zaman yedekleme yapmanız veya test ortamında denemeniz önerilir.

Test Senaryoları ve Çıktıların Yorumlanması:
* Logrotate durum dosyası: logrotate‘ın durumunu izlediği dosya /var/lib/logrotate/status‘tur. Bu dosya, her bir log dosyasının en son ne zaman döndürüldüğünü kaydeder. Test sonrası bu dosyanın güncellendiğini kontrol edin.
* Dosya izinleri: create direktifi ile oluşturulan yeni log dosyalarının doğru izinlere, sahibine ve grubuna sahip olduğundan emin olun.
* Sıkıştırma: Döndürülen log dosyalarının sıkıştırılıp sıkıştırılmadığını (.gz uzantısı) kontrol edin.
* Betik çalıştırma: postrotate veya prerotate betiklerinin doğru şekilde çalışıp çalışmadığını kontrol edin. Örneğin, Nginx için invoke-rc.d nginx rotate komutunun Nginx’i yeniden yükleyip yüklemediğini (veya logları yeniden açıp açmadığını) doğrulayın.
* Disk alanı: Logrotate’ın çalışmasından sonra disk alanında beklenen bir azalma olup olmadığını kontrol edin.

Örnek Uygulama: Apache Loglarını Yönetme

Apache HTTP Sunucusu, web sunucuları arasında en yaygın kullanılanlardan biridir ve doğal olarak çok sayıda log dosyası üretir. Ubuntu 12.10’da Apache2 için Logrotate yapılandırması genellikle /etc/logrotate.d/apache2 dosyasında bulunur.

Tipik /etc/logrotate.d/apache2 içeriği:

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 0640 root adm
    sharedscripts
    postrotate
        if /etc/init.d/apache2 status > /dev/null ; then \
            invoke-rc.d apache2 rotate > /dev/null 2>&1; \
        fi;
    endscript
}

Bu yapılandırmayı inceleyelim:

/var/log/apache2/.log: Apache’nin erişim (access.log) ve hata (error.log) logları dahil olmak üzere tüm log dosyalarını kapsar.
* weekly: Log dosyaları haftalık olarak döndürülür.
* rotate 52: Bir yıllık log dosyasını (52 hafta) saklar. Bu, uzun süreli analiz ve yasal uyumluluk için faydalıdır.
* create 0640 root adm: Yeni Apache log dosyaları root sahibi ve adm grubu ile 0640 izinleriyle oluşturulur. Apache genellikle www-data kullanıcısı altında çalıştığından, adm grubunun www-data kullanıcısının yeni log dosyasına yazabilmesi için gerekli izinlere sahip olduğundan emin olunmalıdır.
* postrotate betiği:
* if /etc/init.d/apache2 status > /dev/null: Bu kısım, Apache servisi çalışıyorsa betiğin geri kalanını çalıştırmayı garanti eder. Eğer Apache çalışmıyorsa, rotate komutunu çalıştırmanın bir anlamı yoktur ve hata verebilir.
* invoke-rc.d apache2 rotate > /dev/null 2>&1: Bu komut, Apache servisine log dosyalarını yeniden açması gerektiğini bildirir. Apache, bu sinyali aldığında, mevcut log dosyalarını kapatır ve yeni oluşturulan boş log dosyalarına yazmaya başlar. Bu, logların kesintisiz bir şekilde kaydedilmeye devam etmesini sağlar.

Özelleştirme Senaryoları:
* Daha sık döndürme: Yoğun trafik alan bir web sitesi için daily veya hatta size 100M (dosya boyutu 100MB’a ulaştığında döndürme) gibi daha sık döndürme politikaları belirleyebilirsiniz.
* Daha kısa saklama süresi: Eğer disk alanı kısıtlıysa veya yasal gereksinimler daha az log saklamanıza izin veriyorsa, rotate 7 (bir haftalık log) gibi daha kısa bir süre belirleyebilirsiniz.
* Farklı sıkıştırma: Varsayılan gzip yerine bzip2 gibi farklı bir sıkıştırma algoritması kullanmak isterseniz, compresscmd bzip2 ve uncompresscmd bunzip2 direktiflerini kullanabilirsiniz (ancak bu genellikle gerekli değildir).

Örnek Uygulama: Özel Bir Uygulamanın Loglarını Yönetme

Kendi geliştirdiğiniz veya üçüncü taraf bir özel uygulamanın log dosyalarını yönetmek de Logrotate ile mümkündür. Diyelim ki uygulamanız /var/log/myapp/ dizini altında myapp.log adında bir log dosyası oluşturuyor.

/etc/logrotate.d/myapp dosyası oluşturma:

sudo nano /etc/logrotate.d/myapp

Dosyanın içine aşağıdaki içeriği ekleyin:

/var/log/myapp/myapp.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 myappuser myappgroup
    postrotate
        # Uygulamanızın log dosyasını yeniden açmasını sağlayacak komutu buraya ekleyin
        # Örneğin, bir sinyal göndermek veya servisi yeniden başlatmak
        # kill -USR1 $(cat /var/run/myapp.pid)
        # service myapp reload
        # veya eğer uygulamanızın özel bir komutu varsa:
        # /usr/bin/myapp --reload-logs
    endscript
}

Açıklamalar:

* create 0640 myappuser myappgroup: Bu, yeni myapp.log dosyasının uygulamanızın çalıştığı kullanıcı ve grup izinleriyle oluşturulmasını sağlar. Bu, uygulamanızın yeni log dosyasına sorunsuz bir şekilde yazabilmesi için çok önemlidir. myappuser ve myappgroup değerlerini uygulamanızın gerçek kullanıcı ve grup adlarıyla değiştirmeniz gerekir.
* postrotate betiği: Buradaki en kritik nokta, uygulamanızın log dosyasını döndürüldükten sonra yeniden açmasını sağlamaktır. Eğer uygulamanız myapp.log dosyasına yazmaya devam ederken Logrotate bu dosyayı myapp.log.1 olarak yeniden adlandırır ve yeni bir boş myapp.log oluşturursa, uygulamanız eski myapp.log.1 dosyasına yazmaya devam edecektir. Bu nedenle, uygulamanıza log dosyalarını yeniden açması gerektiğini bildirmeniz gerekir. Bu genellikle şu yöntemlerden biriyle yapılır:
* Sinyal Gönderme: Birçok uygulama (özellikle sunucu uygulamaları), belirli bir sinyal (örneğin, USR1 veya HUP) aldığında log dosyalarını yeniden açacak şekilde tasarlanmıştır. Uygulamanızın PID’sini (Process ID) bulup bu sinyali gönderebilirsiniz: kill -USR1 $(cat /var/run/myapp.pid). Uygulamanızın PID’sini bir dosyaya yazması gerekir (/var/run/myapp.pid).
* Servisi Yeniden Yükleme/Başlatma: Eğer uygulamanız bir sistem servisi olarak çalışıyorsa, servisi yeniden yüklemek (service myapp reload) veya yeniden başlatmak (service myapp restart) da log dosyalarını yeniden açmasını sağlayabilir. Ancak yeniden başlatma, uygulamanızın kısa bir süre için kullanılamamasına neden olabilir, bu nedenle reload tercih edilir.
* Özel Komut: Bazı uygulamaların log dosyalarını yeniden açmak için kendi özel komutları olabilir. Uygulamanızın belgelerini kontrol edin.

Bu postrotate betiği, özel uygulamanızın log yönetiminin anahtarıdır. Doğru komutu bulmak için uygulamanızın belgelerine veya kaynak koduna bakmanız gerekebilir.

Gelişmiş Logrotate Özellikleri ve İpuçları

Logrotate, basit log döndürmenin ötesinde birçok gelişmiş özellik sunar.

* su user group Direktifi: Bu direktif, Logrotate’ın belirli bir log dosyası bloğu için prerotate ve postrotate betiklerini belirtilen kullanıcı ve grup hakları altında çalıştırmasını sağlar. Bu, root ayrıcalıkları gerektirmeyen veya belirli bir kullanıcıya ait dosyalarla etkileşime giren betikler için güvenlik açısından önemlidir. Örneğin, bir kullanıcının kendi ev dizinindeki loglarını yönetiyorsanız:

/home/kullanici/logs/app.log {
        daily
        rotate 7
        su kullanici kullanicigrubu
        postrotate
            /home/kullanici/bin/reload_app_logs.sh
        endscript
    }

* copytruncate vs. create + postrotate:
* copytruncate: Mevcut log dosyasının bir kopyasını yapar, ardından orijinal dosyayı sıfırlar. Avantajı, uygulamanın log dosyasını kapatıp açmasına gerek kalmamasıdır. Dezavantajı, kopyalama ve sıfırlama arasında geçen çok kısa sürede yazılan log verilerinin kaybolma riskidir. Yüksek hacimli loglama yapan uygulamalar için önerilmez.
* create + postrotate: Log dosyasını yeniden adlandırır (.log.1), yeni boş bir dosya oluşturur (.log), ve ardından uygulamanın log dosyasını yeniden açmasını tetikler. Bu yöntem, log kaybı riskini minimize eder ve genellikle daha güvenli ve tercih edilen yöntemdir. Ancak, uygulamanın postrotate betiği aracılığıyla log dosyasını yeniden açma yeteneğine sahip olması gerekir.
* dateext ile Tarihli Dosya Adları: dateext direktifi, döndürülen log dosyalarına sıralı numaralar (.1, .2) yerine tarih uzantıları ekler (-YYYYMMDD). Bu, log dosyalarını tarihe göre takip etmeyi çok daha kolay hale getirir ve uzun süre saklanan loglar için daha anlamlı bir adlandırma sağlar.

/var/log/myapp/myapp.log {
        daily
        rotate 30
        dateext  # myapp.log-20230101.gz şeklinde adlandırılır
        compress
        # ... diğer direktifler ...
    }

* Hata Ayıklama ve Sorun Giderme İpuçları:
* Logrotate Durum Dosyası (/var/lib/logrotate/status): Bu dosya, Logrotate’ın her bir log dosyası için en son ne zaman döndürme işlemi yaptığını kaydeder. Eğer bir log dosyasının neden döndürülmediğini merak ediyorsanız, bu dosyayı kontrol edin.
* Cron Logları: Logrotate genellikle /etc/cron.daily/logrotate betiği aracılığıyla çalıştığı için, cron işlerinin çıktısını kontrol etmek faydalı olabilir. Ubuntu 12.10’da, bu loglar genellikle /var/log/syslog veya /var/log/auth.log gibi sistem loglarında bulunur. grep logrotate /var/log/syslog komutuyla ilgili girdileri arayabilirsiniz.
* Logrotate’ın Kendi Logları: Logrotate’ın kendisi varsayılan olarak ayrı bir log dosyası oluşturmaz. Ancak, --verbose (-v) ve --debug (-d) bayraklarını kullanarak çıktısını inceleyebilirsiniz.
* İzin Sorunları: Log dosyalarının veya Logrotate yapılandırma dosyalarının yanlış izinlere sahip olması, Logrotate’ın çalışmasını engelleyebilir. Dosya ve dizin izinlerini kontrol edin.
* Disk Alanı Takibi: Logrotate, disk alanını yönetmek için harika bir araç olsa da, disk kullanımını düzenli olarak izlemek (örneğin, df -h komutuyla) her zaman iyi bir uygulamadır. Logrotate’ın yapılandırmasının beklendiği gibi çalıştığından ve disk alanının dolmadığından emin olun.
* Logrotate’ın Performans Üzerindeki Etkisi: Özellikle çok büyük log dosyaları veya çok sayıda log dosyası için Logrotate’ın sıkıştırma ve döndürme işlemleri CPU ve disk G/Ç kaynaklarını tüketebilir. Bu durum, yoğun saatlerde sistem performansını etkileyebilir. Bu tür durumlarda:
* delaycompress kullanmak, sıkıştırma işlemini daha az yoğun bir zamana erteleyebilir.
* Döndürme sıklığını azaltmak (örneğin, günlük yerine haftalık).
* Logrotate’ı daha az yoğun saatlerde çalışacak şekilde ayarlamak (örneğin, /etc/cron.d/logrotate içine özel bir cron tanımı ekleyerek).

Logrotate Güvenliği

Logrotate yapılandırmaları, sistemin kritik log dosyalarını yönettiği için güvenlik açısından önemlidir.

* Yapılandırma Dosyalarının İzinleri: /etc/logrotate.conf ve /etc/logrotate.d/ dizinindeki tüm yapılandırma dosyaları yalnızca root kullanıcısı tarafından yazılabilir olmalıdır. Genellikle root:root sahipliği ve 0644 veya 0600 izinleri önerilir. Yanlış izinler, kötü niyetli kullanıcıların log yönetimi politikalarını değiştirerek logları manipüle etmesine veya hassas bilgileri gizlemesine olanak tanıyabilir.
* postrotate Script’lerinde Komut Güvenliği: postrotate, prerotate gibi betik bloklarında çalıştırılan komutlar dikkatlice seçilmelidir. Bu betikler genellikle root ayrıcalıklarıyla çalışır. Güvenilmeyen veya iyi test edilmemiş komutları çalıştırmaktan kaçının. Komutların tam yollarını belirtmek (/usr/bin/kill yerine kill) güvenlik risklerini azaltabilir.
* Log Dosyalarının Erişim İzinleri: Logrotate tarafından oluşturulan veya döndürülen log dosyalarının doğru izinlere sahip olduğundan emin olun (create direktifi). Hassas bilgiler içeren log dosyaları, yalnızca yetkili kullanıcılar veya gruplar tarafından okunabilir olmalıdır.

Ubuntu 12.10’dan Sonraki Sürümlerdeki Farklar (Kısa Bir Not)

Bu makale özellikle Ubuntu 12.10’a odaklanmış olsa da, Logrotate’ın temel prensipleri ve direktifleri Linux dağıtımları arasında genellikle aynı kalır. Ancak, 12.10 sürümünden sonraki Ubuntu sürümlerinde (ve genel olarak Linux ekosisteminde) bazı önemli değişiklikler olmuştur:

* systemd‘nin Ortaya Çıkışı: Ubuntu 15.04’ten itibaren upstart yerine systemd varsayılan init sistemi haline geldi. Bu, postrotate betiklerinde servisleri yeniden yükleme komutlarını etkiledi. Ubuntu 12.10’da invoke-rc.d service_name rotate veya service service_name reload kullanılırken, systemd tabanlı sistemlerde systemctl reload service_name komutu tercih edilir.
* Varsayılan Yapılandırmalar: Bazı uygulamaların varsayılan Logrotate yapılandırmaları zamanla değişebilir veya yeni direktifler eklenebilir.
* Logrotate Sürümleri: Logrotate’ın kendisi de zamanla güncellemeler alarak yeni özellikler veya hata düzeltmeleri içerebilir.

Bu farklılıklar, bu makalede açıklanan temel Logrotate direktiflerinin ve kavramlarının hala geçerli olduğu gerçeğini değiştirmez. Ubuntu 12.10’da öğrendiğiniz bilgiler, daha yeni sistemlerde Logrotate’ı anlamanız ve yapılandırmanız için sağlam bir temel oluşturacaktır.

Sonuç

Logrotate, Linux tabanlı sistemlerde log dosyası yönetimini otomatikleştirmenin ve kolaylaştırmanın vazgeçilmez bir aracıdır. Ubuntu 12.10 gibi sunucu işletim sistemlerinde, sistemin sağlığını, performansını ve güvenliğini sürdürmek için log dosyalarının etkin bir şekilde yönetilmesi kritik öneme sahiptir. Logrotate’ın sunduğu esneklik sayesinde, her uygulamanın özel loglama gereksinimlerine göre özelleştirilmiş politikalar oluşturmak mümkündür.

Bu makalede, Logrotate’ın temel çalışma prensiplerinden, ana yapılandırma dosyası /etc/logrotate.conf‘un incelenmesine, uygulama özel yapılandırmaları /etc/logrotate.d/ içindeki direktiflerin ayrıntılı açıklamasına, test etme yöntemlerine ve Apache ile özel uygulamalar için örnek uygulamalara kadar geniş bir yelpazeyi ele aldık. Ayrıca, copytruncate vs. create + postrotate farkı, dateext kullanımı gibi gelişmiş özellikler ve güvenlik ipuçları üzerinde durduk.

Logrotate’ı doğru bir şekilde yapılandırmak ve düzenli olarak izlemek, disk alanı sorunlarını önler, sistem performansını artırır, sorun giderme süreçlerini hızlandırır ve yasal uyumluluk gereksinimlerini karşılamaya yardımcı olur. Her sistem yöneticisinin araç kutusunda bulunması gereken bu güçlü aracı anlamak ve etkin bir şekilde kullanmak, daha istikrarlı ve yönetilebilir bir sunucu ortamı sağlamanın anahtarıdır. Unutmayın, iyi yönetilen loglar, bir sistemin sessizce çalışan, ancak kritik derecede önemli hafızasıdır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.