# Linux'ta logrotate ile günlük dosyalarının büyümesini önleme

https://kervanhosting.com/bilgi-bankasi/makale/linux-logrotate-ile-log-dosyalarini-yonetme

Bir sabah sunucunun diskinin dolu olduğunu görüyorsunuz ve suçlu `/var/log` altındaki tek bir dosyadır. Günlükler yararlıdır ama sınırsız büyürlerse diski bitirirler. **logrotate** bu işi otomatik halleder: dosyayı belli aralıkla yeniler (döndürür), eskileri sıkıştırır ve belirli sayıdan fazlasını siler.

## Suçlu hangi dosya?

```
sudo du -ah /var/log | sort -rh | head -10
sudo journalctl --disk-usage
```

İlk komut `/var/log` içindeki en büyük dosyaları, ikincisi systemd günlüğünün (journal) kapladığı alanı gösterir.

## systemd günlüğünü sınırlamak

Ubuntu ve Debian'da sistem günlüğü journal'dadır ve kendi sınırı vardır. Hemen yer açmak için:

```
sudo journalctl --vacuum-size=200M
sudo journalctl --vacuum-time=14d
```

Kalıcı sınır için `/etc/systemd/journald.conf` içinde `SystemMaxUse=200M` yazıp `sudo systemctl restart systemd-journald` çalıştırın.

## logrotate nasıl çalışır?

Paketlerle gelen çoğu servisin (Nginx, Apache, MySQL, rsyslog) kuralı `/etc/logrotate.d/` klasöründe hazırdır ve logrotate günde bir kez kendiliğinden çalışır. Mevcut bir kurala bakın:

```
cat /etc/logrotate.d/nginx
```

Genellikle şunu görürsünüz: `daily` (her gün), `rotate 14` (14 eski kopya sakla), `compress` (sıkıştır), `missingok` (dosya yoksa hata verme) ve `postrotate` bölümü (döndürmeden sonra servise "günlüğü yeniden aç" demek için).

## Kendi uygulamanız için kural yazmak

Örneğin `/var/log/uygulamam/*.log` dosyalarını haftalık döndürmek için `/etc/logrotate.d/uygulamam` dosyası oluşturun:

```
/var/log/uygulamam/*.log {
    weekly
    rotate 8
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
}
```

- `notifempty`: Dosya boşsa döndürme.
- `delaycompress`: En son kopyayı bir tur sıkıştırma, programın yazmaya devam etmesi için.
- `copytruncate`: Uygulama günlük dosyasını açık tutuyor ve yeniden açmayı bilmiyorsa dosyayı kopyalayıp sıfırlar (kısa bir yazma kaybı riskiyle).

## Deneme ve zorlama

```
sudo logrotate -d /etc/logrotate.d/uygulamam    # sadece ne yapacağını göster
sudo logrotate -f /etc/logrotate.d/uygulamam    # hemen çalıştır
```

Hatalar genelde yazım ya da izin kaynaklıdır; `-d` çıktısı nedeni gösterir.

## Önemli: günlükleri tamamen kapatmayın

Disk dolmasın diye günlükleri tümden kapatmak, bir sorun çıktığında neyin yanlış gittiğini görememenize yol açar. Saklama süresini kısaltın, kapatmayın. Disk dolduysa genel temizlik için [disk doldu](https://kervanhosting.com/bilgi-bankasi/makale/disk-doldu-sunucumda-nasil-yer-acarim), "boş ama dolu" hatası için [inode](https://kervanhosting.com/bilgi-bankasi/makale/no-space-left-on-device-inode-doldu-df-i) makalesine bakın.

## Sık sorulanlar

### Dosyayı silsem olmaz mı?

Çalışan bir uygulamanın açık tuttuğu günlüğü silerseniz alan geri verilmez (süreç yazmaya devam eder). Boşaltmak için `sudo truncate -s 0 dosya.log` kullanın ya da logrotate'e bırakın.

### logrotate günde kaçta çalışır?

Ubuntu ve Debian'da bir systemd zamanlayıcısı ya da cron günde bir kez (genellikle sabaha karşı) çalıştırır.

### Nginx günlükleri çok büyük, ne yapayım?

Erişim günlüğünü kısıtlamak için gerekmiyorsa `access_log off;` kullanabilirsiniz; ya da `rotate` sayısını düşürün. Yanıt vermeyen botları [fail2ban](https://kervanhosting.com/bilgi-bankasi/makale/bilinmeyen-girisleri-brute-force-nasil-engellerim) ile engellemek de günlüğü azaltır.

**İlgili makaleler**

- [Disk doldu, sunucumda nasıl yer açarım?](https://kervanhosting.com/bilgi-bankasi/makale/disk-doldu-sunucumda-nasil-yer-acarim)
- ["No space left on device" ama disk boş görünüyor: inode dolmuş olabilir](https://kervanhosting.com/bilgi-bankasi/makale/no-space-left-on-device-inode-doldu-df-i)
- [Zamanlanmış görev (cron) nasıl eklenir?](https://kervanhosting.com/bilgi-bankasi/makale/zamanlanmis-gorev-cron-nasil-eklenir)

*Sorununuz çözülmediyse [destek talebi açın](https://kervanhosting.com/destek-taleplerim). Hangi adımı denediğinizi ve ekranda ne gördüğünüzü yazarsanız çözüm çok daha hızlı olur.*
