Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Ubuntu Sunucuda Sistem Loglarını Akıllıca Yönetmek: Logrotate ile Temizlik ve Performans 🧹

devster

Üye
Katılım
14 Mart 2026
Mesajlar
8
Ubuntu Sunucuda Sistem Loglarını Akıllıca Yönetmek: Logrotate ile Temizlik ve Performans 🧹

Selam sistemciler! 🖥️ Bugün, genellikle "sonra hallederim" deyip kenara attığımız ama aslında sunucu sağlığı ve performansı için kritik bir konuya değiniyoruz: log dosyaları.

Bir süre sonra `/var/log` dizinine girip de gigabaytları bulan `syslog`, `auth.log` veya kendi uygulama loglarınızı gördüğünüzde içiniz cız etti mi? O devasa dosyalar sadece disk alanınızı tüketmekle kalmaz, bir log dosyasını açıp incelemeye çalıştığınızda sisteminizi de yavaşlatabilir. Neyse ki Linux dünyasında bu işi bizim için otomatik ve zarif bir şekilde halleden, ismi kadar işlevsel bir araç var: Logrotate. Bugün terminalin tozunu alıp, logrotate'ı nasıl özelleştireceğimizi öğreniyoruz.

Logrotate Nedir ve Neden Önemli?

Logrotate, adından da anlaşılacağı gibi, log dosyalarını döndüren (rotate), sıkıştıran ve gerektiğinde eski logları silen bir sistem hizmetidir. Temel amacı:
  • Disk alanını verimli kullanmak.
  • Çok büyük tek bir log dosyası yerine, tarihli ve boyutlu parçalara ayırarok loglara erişimi ve analizi kolaylaştırmak.
  • Belirli bir süreden eski logları otomatik temizleyerek düzeni sağlamak.
Ubuntu ve birçok dağıtımda varsayılan olarak kurulu gelir ve sistem logları (`syslog`, `apt`, `ufw` vb.) için öntanımlı kuralları vardır. Ancak, kendi web uygulamanızın veya özel servisinizin loglarını yönetmek için onu özelleştirmeniz gerekir. ⚙️

Logrotate Nasıl Çalışır? Temel Kavramlar

Logrotate'ın yapılandırma dosyaları `/etc/logrotate.d/` dizinindedir. Ana yapılandırma `/etc/logrotate.conf` dosyasıdır ve `d` dizinindeki tüm dosyaları içe aktarır. Her bir yapılandırma dosyası, hangi log dosyasına ne yapılacağını tanımlar.

İşte sık kullanılan direktifler:
  • daily/weekly/monthly: Log döndürme sıklığı.
  • rotate X: Kaç adet eski log dosyası (rotate edilmiş) saklanacak. `rotate 4` demek, en güncel + 4 eski dosya tutulur.
  • compress: Eski log dosyalarını gzip ile sıkıştırır (`.gz` uzantılı olur).
  • delaycompress: En son döndürülen logu bir sonraki döndürme döngüsüne kadar sıkıştırmayı geciktirir. Hata ayıklama için faydalıdır.
  • missingok: Log dosyası yoksa hata verme, sessizce devam et.
  • notifempty: Log dosyası boşsa döndürme işlemi yapma.
  • create 644 root adm: Döndürme sonrası yeni boş log dosyasını belirtilen izinler (644) ve sahiplikle (kullanıcı: root, grup: adm) oluşturur.
  • postrotate/endscript: Döndürme işleminden hemen sonra çalıştırılacak komutları (örneğin, servisi yeniden başlatmak) bu bloklar arasına yazarsınız.
  • size 100M: Log dosyası belirtilen boyuta (örn. 100 MegaByte) ulaştığında, sıklık (daily/weekly) beklemeden döndürür.

Pratik Örnek: Özel Bir Uygulama Logunu Yönetmek

Diyelim ki `/var/log/myapp/application.log` yolunda bir Node.js veya Python uygulamanızın log dosyası var. Bu dosyayı günlük olarak döndürmek, 30 günlük geçmişi saklamak ve eski logları sıkıştırmak istiyoruz.

İlk adım, `/etc/logrotate.d/` dizininde yeni bir yapılandırma dosyası oluşturmak:
Bash:
sudo nano /etc/logrotate.d/myapp

Ardından, aşağıdaki gibi bir konfigürasyon yapıştıralım:
NGINX:
/var/log/myapp/application.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 644 myapp-user myapp-group
    postrotate
        # Uygulamanız log dosyasını açık tutuyorsa, sinyal göndermeniz gerekebilir.
        # Örneğin, systemd servisi için:
        # systemctl reload myapp.service > /dev/null 2>&1 || true
        # Veya basitçe log dosyasını yeniden oluşturmak için:
        # touch /var/log/myapp/application.log
    endscript
}

Önemli Not: `myapp-user` ve `myapp-group` yerine, log dosyasını oluşturan uygulamanızın çalıştığı kullanıcı ve grubu yazmalısınız. `create` direktifi olmazsa, döndürme sonrası oluşan yeni log dosyasının sahipliği `root` olur ve uygulamanız ona yazamayabilir. 🐧

Konfigürasyonunuzu Test Etmek (ÇOK ÖNEMLİ!)

Kuralları yazdıktan sonra hemen canlı sisteme bırakmayın! Önce test edin. Logrotate'ın `-d` (debug) bayrağı kurallarınızı çalıştırmadan ne yapacağını gösterir:
Bash:
sudo logrotate -d /etc/logrotate.d/myapp

Eğer her şey yolunda görünüyorsa ve bir kerelik döndürme işlemi yapmak isterseniz, `-f` (force) bayrağını kullanabilirsiniz:
Bash:
sudo logrotate -vf /etc/logrotate.d/myapp
`-v` bize neler yaptığını detaylıca anlatır.

Sistem Geneli Logrotate Ayarlarını Anlamak

Ana yapılandırma dosyasına (`/etc/logrotate.conf`) bir göz atmanızda fayda var. Buradaki ayarlar, özel bir kural tanımlamadığınız tüm loglar için geçerli olan varsayılanlardır.
Bash:
cat /etc/logrotate.conf
Genelde `weekly`, `rotate 4`, `create` ve `compress` gibi temel ayarları burada görürsünüz.

Logrotate Cron'da Ne Zaman Çalışır?

Logrotate bir servis değil, bir cron işidir. Günlük cron görevleri kontrol edilir:
Bash:
ls /etc/cron.daily/
Burada `logrotate` isimli bir dosya göreceksiniz. Bu, sistemin her gün (genelde sabah 06:25 gibi bir saatte) logrotate'ı çalıştırmasını sağlar. Eğer `size` direktifi kullandıysanız, log dosyası o boyuta anında ulaşsa bile, bir sonraki günlük cron çalışana kadar döndürülmez. Bu nedenle çok kritik ve hızlı büyüyen loglar için `size` ile `daily`yi birlikte kullanmak iyi bir stratejidir.

Dikkat Edilmesi Gereken Noktalar (Püf Noktaları)
  • Postrotate Senaryosu: Bazı uygulamalar (ör. Nginx, Apache, MySQL) log dosyasını bir işlem kimliği (PID) ile açık tutar. Sadece dosyayı taşırsanız (`mv`), uygulama eski dosya tanımlayıcısına yazmaya devam eder. Bu yüzden `postrotate` içinde uygulamaya bir sinyal (`reload`, `reopen`) göndererek yeni log dosyasına yazmaya başlamasını söylemek şarttır. Örneğin Nginx için: `invoke-rc.d nginx rotate-logs > /dev/null 2>&1`
  • Disk Doluluğu: `rotate` değerini makul tutun. 365 günlük log sıkıştırılmış olsa bile ciddi yer kaplayabilir.
  • Sıkıştırma Maliyeti: `compress` CPU kullanımına neden olur. Çok yüksek trafikli sistemlerde bu işlemin gece saatlerinde yapılması için `su` direktifi kullanılabilir veya sıkıştırma tamamen kaldırılabilir.

Log yönetimi, proaktif sistem yönetiminin sessiz kahramanlarından biridir. Küçük bir zaman yatırımıyla, gelecekteki disk krizi, performans düşüşü veya "o hatayı hangi logda arayacaktım?" karmaşasından kurtulabilirsiniz.

Peki ya siz? Sunucularınızda logrotate dışında log yönetimi için hangi araçları veya yöntemleri kullanıyorsunuz? (Örn: Centralized logging with ELK/Loki, log shippers). Yorumlarda deneyimlerinizi paylaşın, tartışalım! 💬
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri