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.

Nginx Log Dosyalarını Yönetme: Access ve Error Log Formatını Özelleştirme ve Logrotate ile Döndürme

byteon

Üye
Katılım
14 Mart 2026
Mesajlar
20
Merhaba arkadaşlar, bugün sizlere Nginx sunucularımızın göz bebeği olan log dosyalarını nasıl daha verimli yönetebileceğimizi anlatacağım. Loglar, sorun gidermenin yanı sıra trafik analizi ve güvenlik izleme için de altın değerindedir. Ancak kontrolsüz büyürlerse disk alanını tüketir ve analizi zorlaştırır. Bu rehberde, log formatını ihtiyaçlarımıza göre özelleştirip, logrotate ile otomatik olarak döndürerek hem diskimizi hem de zihnimizi rahatlatacağız.

📝 Nginx Log Formatını Özelleştirme

Varsayılan log formatı genelde yeterli olsa da, bazen daha fazla bilgiye (örneğin, kullanıcı agent'ı, özel başlıklar, cache durumu) ihtiyaç duyarız. İlk olarak, ana Nginx yapılandırma dosyasında veya bir snippet dosyasında özel bir log formatı tanımlayalım.

NGINX:
http {
    log_format main_ext '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for" '
                        '"$host" "sn=$server_name" '
                        'rt=$request_time ua="$upstream_addr" '
                        'us="$upstream_status" ut="$upstream_response_time" '
                        'ul="$upstream_cache_status" cs=$connection $connection_requests';

    access_log /var/log/nginx/access.log main_ext;
}

Bu main_ext formatı, upstream sunucu bilgileri, cache durumu ve istek süresi gibi detayları da loglar. Benim sunucularda genelde kullandığım yöntem budur. Error log formatı ise genelde özelleştirilmez, ancak log seviyesini ayarlayabilirsiniz.

⚙️ Logrotate ile Otomatik Döndürme

Log dosyalarının sürekli büyümesini engellemek için logrotate kullanırız. Nginx genelde kendi logrotate konfigürasyonu ile gelir (/etc/logrotate.d/nginx), ancak biz kendi ihtiyaçlarımıza göre ayarlayalım. Şu ayara çok dikkat etmelisiniz: Nginx logları yeniden açabilmek için sinyal göndermeliyiz, aksi halde log yazmaya devam etmez.

Öncelikle mevcut ayar dosyasını yedekleyip düzenleyelim:

Bash:
sudo cp /etc/logrotate.d/nginx /etc/logrotate.d/nginx.backup
sudo nano /etc/logrotate.d/nginx

Aşağıdaki gibi, daha sıkı ve kontrollü bir yapılandırma kullanmanızı tavsiye ederim. Bu ayarlar, logları günlük döndürür, 30 gün saklar ve sıkıştırır.

NGINX:
/var/log/nginx/.log {
        daily
        missingok
        rotate 30
        compress
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        postrotate
                [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
        endscript
}

Buradaki kritik parametreler:
- daily: Logları her gün döndürür.
- rotate 30: 30 eski log dosyasını saklar, sonrasında siler.
- compress: Döndürülen logları gzip ile sıkıştırır (disk alanından büyük tasarruf!).
- delaycompress: En son döndürülen logu bir sonraki döndürmeye kadar sıkıştırmaz, canlı log analizi yapıyorsanız faydalıdır.
- postrotate: Döndürme işleminden sonra Nginx'e yeni log dosyasına yazmaya başlaması için USR1 sinyali gönderir.

✅ Test ve Manuel Çalıştırma

Konfigürasyonun doğru çalışıp çalışmadığını test etmek için logrotate'ın debug modunu kullanabilirsiniz. Bu komut, yapılacak işlemleri gösterir ama gerçekte bir şey yapmaz.

Bash:
sudo logrotate -d /etc/logrotate.d/nginx

Her şey yolunda görünüyorsa, logrotate'ı manuel olarak çalıştırarak işlemi hemen başlatabilirsiniz:

Bash:
sudo logrotate -vf /etc/logrotate.d/nginx

Bu komuttan sonra /var/log/nginx/ dizininize bakarsanız, access.log.1, error.log.1 gibi yeni dosyalar ve muhtemelen sıkıştırılmış eski dosyalar (.gz uzantılı) göreceksiniz. Ana log dosyalarının (access.log, error.log) boyutunun sıfırlandığını gözlemleyin.

⚠️ Dikkat Edilmesi Gerekenler

1. Disk Alanı Takibi: rotate değerini ve saklama süresini, disk alanınıza göre ayarlayın. 30 gün makul bir süredir.
2. İzinler (Permissions): create satırında belirttiğimiz kullanıcı/grup (www-data adm) sizin sisteminizdeki Nginx kullanıcısı ve log dizini izinleriyle uyumlu olmalı. Aksi halde "permission denied" hatası alırsınız.
3. Sinyal Gönderme: postrotate script'i olmazsa olmazdır. Nginx, log dosyasının inode'unun değiştiğini anlamaz ve eski (döndürülmüş) dosyaya yazmaya devam edebilir.
4. Monitoring: Error loglarında bir patlama olup olmadığını düzenli kontrol edin. Anormal artışlar bir sorunun habercisi olabilir.

Bu ayarları yaptıktan sonra artık log dosyalarınız otomatik olarak yönetilecek, disk alanınız korunacak ve daha anlamlı log kayıtlarınız olacak. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı log formatları veya logrotate taktikleriniz varsa paylaşın. Konuyla ilgili sorusu olan aşağıya yazsın, elimden geldiğince yardımcı olurum.
 

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