Ana içeriğe geç
Kategoriye Dön

Log Yönetimi: logrotate ile Disk Dolmasını Önleme

Önemli log konumları, logrotate yapılandırması, journald boyut sınırları, büyük log dosyalarını bulma ve log analizi temelleri. Linux sunucularda disk dolmasını önleme rehberi.

Okuma süresi: 11 dk Sunucu Yönetimi
logrotatelog yönetimijournalddisk alanısysloglinuxlog analizi

İçindekiler

Log Yönetimi: logrotate ile Disk Dolmasını Önleme

Log dosyaları, sistem sorunlarını teşhis etmek ve güvenlik olaylarını izlemek için vazgeçilmezdir. Ancak yönetilmezlerse disk alanını doldurarak sistem çökmelerine neden olabilirler. Bu rehberde önemli log konumlarını, logrotate yapılandırmasını, journald boyut yönetimini ve büyük log dosyalarını nasıl bulacağınızı öğreneceksiniz.

Önemli Log Konumları

Sistem Log Dosyaları

hljs bash
# Ana sistem log dizini
ls -lh /var/log/

# Önemli log dosyaları:
# /var/log/syslog          — Genel sistem mesajları (Debian/Ubuntu)
# /var/log/messages        — Genel sistem mesajları (RHEL/CentOS)
# /var/log/auth.log        — Kimlik doğrulama logları (Debian/Ubuntu)
# /var/log/secure          — Kimlik doğrulama logları (RHEL/CentOS)
# /var/log/kern.log        — Kernel mesajları
# /var/log/dmesg           — Boot mesajları
# /var/log/boot.log        — Sistem başlangıç logları
# /var/log/cron            — Cron job logları
# /var/log/mail.log        — Mail sunucu logları
# /var/log/dpkg.log        — Paket kurulum logları (Debian/Ubuntu)
# /var/log/apt/            — APT işlem logları

Uygulama Log Dosyaları

hljs bash
# Web sunucusu logları
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/apache2/access.log
/var/log/apache2/error.log

# Veritabanı logları
/var/log/mysql/error.log
/var/log/postgresql/

# Systemd journal
journalctl  # Tüm journal logları

Log Dosyalarını İzleme

hljs bash
# Gerçek zamanlı log takibi
tail -f /var/log/syslog
tail -f /var/log/nginx/access.log

# Son 100 satır
tail -n 100 /var/log/auth.log

# Belirli kelimeyi ara
grep "ERROR" /var/log/nginx/error.log
grep "Failed password" /var/log/auth.log

# Tarih aralığında ara
grep "Jan 15" /var/log/syslog

# Birden fazla dosyada ara
grep -r "error" /var/log/nginx/

Disk Alanı Analizi

Büyük Log Dosyalarını Bulma

hljs bash
# /var/log altındaki en büyük dosyaları bul
du -sh /var/log/* | sort -rh | head -20

# Tüm sistemde büyük dosyaları bul (100MB+)
find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null

# /var/log altında 50MB'dan büyük dosyalar
find /var/log -type f -size +50M -exec ls -lh {} \;

# Disk kullanımını kontrol et
df -h

# Dizin boyutlarını görüntüle
du -sh /var/log/
du -sh /var/log/* | sort -rh

Anlık Log Boyutu Kontrolü

hljs bash
# Tüm log dosyalarının toplam boyutu
du -sh /var/log/

# Journald disk kullanımı
journalctl --disk-usage

# Nginx log boyutları
ls -lh /var/log/nginx/

logrotate Yapılandırması

logrotate, log dosyalarını otomatik olarak döndüren (rotate), sıkıştıran ve silen bir araçtır.

logrotate Nasıl Çalışır?

hljs bash
# logrotate genellikle cron ile günlük çalışır
cat /etc/cron.daily/logrotate

# Manuel çalıştırma
sudo logrotate /etc/logrotate.conf

# Belirli bir yapılandırma dosyası ile
sudo logrotate /etc/logrotate.d/nginx

# Simülasyon modu (gerçek işlem yapmaz)
sudo logrotate --debug /etc/logrotate.conf

# Zorla döndür (son döndürmeden bu yana süre dolmamış olsa bile)
sudo logrotate --force /etc/logrotate.d/nginx

Ana logrotate Yapılandırması

hljs bash
# Ana yapılandırma dosyası
sudo nano /etc/logrotate.conf
hljs bash
# Varsayılan ayarlar
weekly          # Haftalık döndür
rotate 4        # 4 eski sürüm tut
create          # Döndürmeden sonra yeni dosya oluştur
compress        # Eski logları sıkıştır
delaycompress   # Son döndürülen logu sıkıştırma
include /etc/logrotate.d  # Uygulama yapılandırmalarını dahil et

Uygulama Özel logrotate Yapılandırması

hljs bash
# Nginx için logrotate yapılandırması
sudo nano /etc/logrotate.d/nginx
hljs bash
/var/log/nginx/*.log {
    daily           # Günlük döndür
    missingok       # Dosya yoksa hata verme
    rotate 14       # 14 günlük log tut
    compress        # Sıkıştır
    delaycompress   # Son logu sıkıştırma (nginx hâlâ yazıyor olabilir)
    notifempty      # Boş dosyayı döndürme
    create 0640 www-data adm  # Yeni dosya izinleri
    sharedscripts   # Tüm dosyalar için bir kez çalıştır
    postrotate
        # Nginx'e yeni log dosyasını kullanmasını söyle
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}
hljs bash
# MySQL için logrotate
sudo nano /etc/logrotate.d/mysql-server
hljs bash
/var/log/mysql/*.log {
    daily
    rotate 7
    missingok
    compress
    delaycompress
    notifempty
    create 640 mysql adm
    postrotate
        test -x /usr/bin/mysqladmin || exit 0
        MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
        if [ -z "`$MYADMIN ping 2>/dev/null`" ]; then
            exit 0
        fi
        $MYADMIN flush-logs
    endscript
}

Özel Uygulama için logrotate

hljs bash
# Kendi uygulamanız için logrotate yapılandırması
sudo nano /etc/logrotate.d/myapp
hljs bash
/var/log/myapp/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 0644 www-data www-data
    dateext         # Tarih uzantısı kullan (myapp.log-20240115.gz)
    dateformat -%Y%m%d
    postrotate
        systemctl reload myapp 2>/dev/null || true
    endscript
}

journald Boyut Yönetimi

Systemd journald, tüm sistem loglarını merkezi olarak toplar ve disk alanı yönetimi gerektirir.

hljs bash
# Mevcut journal boyutunu kontrol et
journalctl --disk-usage

# Eski logları temizle (2 haftadan eski)
sudo journalctl --vacuum-time=2weeks

# Boyut sınırı ile temizle (500MB'dan fazlasını sil)
sudo journalctl --vacuum-size=500M

# Belirli sayıda dosya tut
sudo journalctl --vacuum-files=5

journald Kalıcı Yapılandırması

hljs bash
# journald yapılandırma dosyasını düzenle
sudo nano /etc/systemd/journald.conf
hljs ini
[Journal]
# Maksimum disk kullanımı
SystemMaxUse=500M

# Minimum boş disk alanı
SystemKeepFree=1G

# Maksimum dosya boyutu
SystemMaxFileSize=50M

# Log saklama süresi
MaxRetentionSec=2weeks

# Sıkıştırma
Compress=yes

# Kalıcı depolama (disk)
Storage=persistent
hljs bash
# Yapılandırmayı uygula
sudo systemctl restart systemd-journald

Log Analizi Temelleri

Hata ve Uyarı Analizi

hljs bash
# Nginx hata loglarını analiz et
grep -c "error" /var/log/nginx/error.log  # Hata sayısı
grep "error" /var/log/nginx/error.log | tail -20  # Son hatalar

# SSH brute force girişimlerini tespit et
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -10

# En çok istek yapan IP'leri bul
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# HTTP durum kodlarını say
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -rn

# Systemd journal'dan hataları filtrele
journalctl -p err --since "1 hour ago"

Log Boyutu İzleme Scripti

hljs bash
# Log boyutlarını izleyen basit script
cat > /usr/local/bin/check-logs.sh << 'EOF'
#!/bin/bash
LOG_DIR="/var/log"
THRESHOLD=1073741824  # 1GB in bytes

echo "=== Log Boyutu Raporu ==="
echo "Tarih: $(date)"
echo ""

# Büyük log dosyalarını bul
find $LOG_DIR -type f -size +100M -exec ls -lh {} \; 2>/dev/null

# Toplam boyut
echo ""
echo "Toplam /var/log boyutu: $(du -sh $LOG_DIR | cut -f1)"
echo "Disk kullanımı:"
df -h /
EOF

chmod +x /usr/local/bin/check-logs.sh

# Cron ile günlük çalıştır
echo "0 8 * * * root /usr/local/bin/check-logs.sh | mail -s 'Log Raporu' admin@example.com" >> /etc/crontab

Log yönetimini otomatikleştirin: logrotate yapılandırmasını düzenli gözden geçirin, journald boyut sınırlarını ayarlayın ve disk kullanımını izleyen alertler kurun.

Acil Durum: Disk Doldu

hljs bash
# Disk dolduğunda hızlı müdahale

# 1. Disk durumunu kontrol et
df -h

# 2. En büyük dosyaları bul
du -sh /var/log/* | sort -rh | head -10

# 3. Eski journal loglarını temizle
sudo journalctl --vacuum-time=3days

# 4. Sıkıştırılmamış eski logları sıkıştır
find /var/log -name "*.log.*" ! -name "*.gz" -exec gzip {} \;

# 5. Logrotate'i zorla çalıştır
sudo logrotate --force /etc/logrotate.conf

# 6. Geçici dosyaları temizle
sudo apt clean  # Ubuntu/Debian
sudo dnf clean all  # RHEL/CentOS

Sonuç

Etkili log yönetimi, disk dolması sorunlarını önler ve sistem güvenilirliğini artırır. logrotate ile otomatik döndürme, journald boyut sınırları ve düzenli log analizi ile REXE sunucularınızı sağlıklı tutabilirsiniz. Disk kullanımını düzenli izleyerek sorunları önceden tespit edin.