Linux Log Dosyaları Nasıl Temizlenir? Güvenli Log Temizleme Rehberi
Linux sunucuda log dosyalarını temizlemek için önce hangi logların disk alanını tükettiğini tespit etmek, ardından ilgili servise uygun temizleme veya log rotation yöntemini kullanmak gerekir. /var/log klasörünü topluca silmek doğru bir yöntem değildir ve hata ayıklama ile güvenlik açısından önemli kayıtların kaybolmasına neden olabilir.
İlk olarak disk durumunu kontrol edin:
df -hArdından log klasörünün boyutuna bakın:
du -sh /var/logAlt klasörleri boyutlarına göre incelemek için:
sudo du -h --max-depth=1 /var/log | sort -hrkullanabilirsiniz.
Linux log dosyaları nerede bulunur?
Birçok Linux dağıtımında sistem ve servis loglarının önemli bir bölümü:
/var/logaltında bulunur.
Burada sisteme göre:
- Nginx logları
- SSH ve authentication kayıtları
- Paket yöneticisi logları
- Sistem logları
- Uygulama logları
- Döndürülmüş eski loglar
bulunabilir.
systemd kullanan sistemlerde bazı kayıtlar ayrıca
journald tarafından binary journal formatında tutulur.En büyük log dosyaları nasıl bulunur?
Örneğin
/var/log içerisinde 100 MB'den büyük normal dosyaları aramak için:sudo find /var/log -type f -size +100M -print 2>/dev/nullkullanılabilir.
Dosyaların boyutlarını görmek için:
sudo du -ah /var/log 2>/dev/null | sort -hr | head -30komutu da faydalı olabilir.
Bu aşamada yalnızca hangi logların büyüdüğünü tespit edin.
Log dosyasını doğrudan silmek doğru mu?
Her zaman değil.
Çalışan bir servis log dosyasını açık tutuyor olabilir. Dosyayı
rm ile silmek servis açısından beklenmeyen davranışlara yol açabilir ve bazı durumlarda disk alanı process dosyayı kapatana kadar geri kazanılmayabilir.Bu nedenle aktif loglarda çoğunlukla:
- Log rotation
- Servisin kendi log yönetimi
- Kontrollü truncate
- Journal temizleme araçları
tercih edilmelidir.
Log dosyasını boşaltmak için truncate kullanılabilir mi?
Belirli bir düz metin log dosyasının içeriğini silmeden dosyanın kendisini korumak gerekiyorsa uygun yetkilerle:
sudo truncate -s 0 /dosya/yolu.logkullanılabilir.
Örneğin özel bir uygulamanın log dosyası için bu yöntem kullanılabilir.
Ancak dosyanın gerçekten temizlenmesinin güvenli olduğundan emin olun.
Önemli hata veya güvenlik kayıtlarını temizlemeden önce gerekiyorsa yedeğini alın.
Nginx logları nasıl kontrol edilir?
Nginx logları çoğunlukla:
/var/log/nginxaltında bulunur.
Boyut kontrolü:
du -sh /var/log/nginxDosyaları görmek için:
ls -lh /var/log/nginxkullanabilirsiniz.
Genellikle:
access.logve:
error.loggibi dosyalar bulunur.
Bu dosyaların sürekli büyümesi yoğun trafik veya tekrarlanan uygulama hatalarının işareti olabilir.
Nginx loglarını direkt silmek gerekir mi?
Genellikle log rotation mekanizmasının kullanılması daha doğru yaklaşımdır.
Birçok Linux kurulumunda Nginx için
logrotate yapılandırması bulunur.Kontrol etmek için:
ls /etc/logrotate.d/ve uygun sistemlerde:
cat /etc/logrotate.d/nginxkullanılabilir.
Bu yapılandırma eski logların belirli aralıklarla döndürülmesini ve gerektiğinde sıkıştırılmasını sağlar.
logrotate nedir?
logrotate, büyüyen log dosyalarını otomatik olarak yönetmek için kullanılan araçtır.Örneğin:
access.logbelirli bir zamanda döndürülerek:
access.log.1haline gelebilir.
Daha eski kayıtlar sıkıştırılarak:
access.log.2.gzgibi saklanabilir.
Belirli bir süre veya sayı sonrasında eski loglar kaldırılabilir.
Bu sayede tek bir log dosyasının sınırsız büyümesi engellenir.
logrotate yapılandırması nasıl test edilir?
Genel yapılandırmanın ne yapacağını debug modunda incelemek için:
sudo logrotate -d /etc/logrotate.confkullanılabilir.
Bu yöntem gerçek rotasyonu uygulamadan yapılandırmayı değerlendirmeye yardımcı olur.
Üretim sunucusunda
logrotate işlemlerini zorla çalıştırmadan önce yapılandırmayı kontrol etmek daha güvenlidir.systemd journal ne kadar alan kullanıyor?
Journal kullanımını görmek için:
journalctl --disk-usagekomutunu çalıştırabilirsiniz.
Örneğin journal kayıtları birkaç GB alan kullanıyorsa saklama politikasını gözden geçirmek isteyebilirsiniz.
Eski journal kayıtları nasıl temizlenir?
Örneğin yedi günden eski arşivlenmiş journal kayıtlarını temizlemek için:
sudo journalctl --vacuum-time=7dkullanılabilir.
Boyuta göre sınırlandırmak için örneğin:
sudo journalctl --vacuum-size=500Mkullanılabilir.
Buradaki değerleri kendi sunucunuzun log saklama ihtiyacına göre belirlemelisiniz.
Üretim ve güvenlik incelemelerinde geçmiş loglara ihtiyaç duyulabileceğini unutmayın.
Journal loglarının sürekli büyümesi nasıl önlenir?
Kalıcı çözüm yalnızca belirli aralıklarla manuel temizlik yapmak değildir.
journald yapılandırmasında saklanabilecek maksimum disk alanı gibi sınırlar tanımlanabilir.Yapılandırma dağıtıma göre değerlendirilmelidir.
Değişiklik yapmadan önce mevcut ayarları ve sunucunun log gereksinimlerini kontrol edin.
PM2 logları nasıl temizlenir?
Node.js uygulamalarında PM2 logları da ciddi alan kullanabilir.
Boyut kontrolü:
du -sh ~/.pm2/logsPM2'nin mevcut loglarını boşaltmak için:
pm2 flushkullanılabilir.
Ancak önce:
pm2 logsile sürekli tekrarlanan bir hata olup olmadığını kontrol etmek önemlidir.
Örneğin uygulama saniyede onlarca kez aynı hatayı yazıyorsa
pm2 flush yalnızca geçici olarak alan açacaktır.PM2 loglarının tekrar büyümesi nasıl engellenir?
PM2 log rotation yapılandırması kullanılabilir.
Amaç:
- Log dosyasının maksimum boyutunu sınırlamak
- Eski logları döndürmek
- Belirli sayıda eski kayıt saklamak
- Gereksiz logların sonsuza kadar büyümesini engellemek
olmalıdır.
Ayrıca uygulamanın production ortamında gereksiz debug mesajlarını sürekli yazmadığından emin olun.
Uygulama logları proje klasöründe olabilir
Her log
/var/log altında bulunmaz.Örneğin uygulamanız:
/var/www/site/logsgibi kendi klasörüne log yazıyor olabilir.
Proje dizininin kullanımını:
du -h --max-depth=1 /var/www/site | sort -hrile kontrol edebilirsiniz.
Log klasörü büyük görünüyorsa içerisindeki dosyalar ayrıca incelenmelidir.
Eski sıkıştırılmış loglar silinebilir mi?
Örneğin:
access.log.5.gzgibi dosyalar eski log kayıtları olabilir.
Bunların ne kadar süre saklanacağı:
- Hata araştırma ihtiyacı
- Güvenlik politikası
- Yasal gereksinimler
- Disk kapasitesi
gibi faktörlere bağlıdır.
Gerekmeyen eski logların kontrollü olarak kaldırılması mümkündür ancak bunun otomatik olarak
logrotate gibi bir sistemle yönetilmesi daha sağlıklıdır.Silinen log neden hâlâ disk alanı kullanıyor?
Bir servis dosyayı açık tutarken logu silerseniz dosya dizinden kaybolduğu halde process tarafından açık tutulabilir.
Bunu kontrol etmek için:
sudo lsof +L1kullanabilirsiniz.
Büyük bir silinmiş dosya görünüyorsa hangi servisin tuttuğunu belirleyin.
Gerekliyse ilgili servisi kontrollü şekilde yeniden yüklemek veya yeniden başlatmak gerekebilir.
Sunucuyu yalnızca disk alanı geri gelsin diye doğrudan reboot etmek genellikle ilk tercih olmamalıdır.
Logları temizledikten sonra disk nasıl kontrol edilir?
İşlem sonrasında:
df -hkomutunu tekrar çalıştırın.
Ardından:
du -sh /var/logile log dizininin yeni boyutunu kontrol edin.
Beklenen alan açılmadıysa:
sudo lsof +L1kontrolü yapılabilir.
Logların aşırı büyümesinin nedeni bulunmalı
Örneğin Nginx
error.log birkaç saat içerisinde gigabaytlarca büyüyorsa sorun log dosyasının kendisi değildir.Asıl problem:
- Uygulama sürekli hata veriyor olabilir.
- Backend'e bağlantı kurulamıyor olabilir.
- Bot trafiği olabilir.
- Yanlış yapılandırma bulunabilir.
- Uygulama aynı hatayı döngü halinde yazıyor olabilir.
Sadece log dosyasını temizlemek sorunu geçici olarak gizler.
Log temizlerken neden dikkatli olunmalı?
Loglar yalnızca gereksiz dosyalar değildir.
Bir sunucuda:
- Uygulama hatalarının bulunması
- Yetkisiz erişim girişimlerinin araştırılması
- SSH girişlerinin incelenmesi
- Sunucu problemlerinin teşhis edilmesi
- Olay sonrası güvenlik analizi
için kritik olabilirler.
Bu nedenle önemli bir olay araştırılırken logları temizlemek değerli kanıtların kaybolmasına neden olabilir.
Linux log temizliği için güvenli sıra
Genel olarak şu sıra kullanılabilir:
1.
df -h ile disk kullanımını kontrol edin.2.
du -sh /var/log ile log boyutuna bakın.3. Büyük logları tespit edin.
4. Logun hangi servise ait olduğunu belirleyin.
5. Gerekli kayıtları yedekleyin.
6. Servisin kendi log yönetimini kontrol edin.
7.
logrotate yapılandırmasını inceleyin.8. Journal kullanımı için
journalctl --disk-usage çalıştırın.9. PM2 kullanıyorsanız PM2 loglarını kontrol edin.
10. Temizlikten sonra
df -h ile sonucu doğrulayın.11. Logların neden aşırı büyüdüğünü araştırın.
Kaçınılması gereken yöntemler
Özellikle:
rm -rf /var/log/*gibi toplu silme komutları kullanılmamalıdır.
Benzer şekilde yalnızca disk dolduğu için ne olduğunu bilmediğiniz sistem kayıtlarını silmek doğru değildir.
Log temizliğinin amacı bütün kayıtları yok etmek değil, gereksiz büyümeyi kontrollü şekilde yönetmektir.
Özetle, Linux sunucuda log temizlerken önce hangi kayıtların alan kullandığını belirlemek gerekir. Nginx ve diğer servislerde logrotate, systemd kayıtlarında journalctl, PM2 uygulamalarında ise PM2'nin kendi log yönetimi kullanılabilir.
Kalıcı çözüm ise sürekli manuel log silmek değil, log rotation ve saklama politikası oluşturmak ve aşırı log üreten asıl hatayı düzeltmektir.
