Linux sistemlerde hata ayıklama ve sorun gidermenin temeli log dosyalarıdır. Sistem ne yaptı, hangi hata oluştu, kim ne zaman giriş yaptı - tüm bu bilgiler log kayıtlarında tutulur. Log dosyalarını okumak ve yorumlamak her sistem yöneticisinin bilmesi gereken temel beceridir.
Log Dosyaları Nedir?
Log (günlük) dosyaları, sistemin ve uygulamaların etkinliklerini kronolojik sırayla kaydettiği dosyalardır. Her önemli olay - servis başlangıcı, hata mesajı, kullanıcı girişi - bu dosyalara yazılır.
Log dosyaları sorun gidermede kritik rol oynar. Bir şey çalışmadığında ilk bakılacak yer log dosyalarıdır.
/var/log Dizini
Linux'ta log dosyalarının büyük çoğunluğu /var/log dizininde bulunur. Bu dizin sistemin hafızasıdır.
ls -la /var/log
Temel Log Dosyaları
/var/log/syslog veya /var/log/messages: Genel sistem mesajları. Dağıtıma göre isim değişir; Debian/Ubuntu'da syslog, RHEL/CentOS'ta messages kullanılır.
/var/log/auth.log veya /var/log/secure: Kimlik doğrulama kayıtları. Giriş denemeleri, sudo kullanımı, SSH bağlantıları burada kayıtlıdır.
/var/log/kern.log: Çekirdek mesajları. Donanım sorunları ve sürücü hataları burada görünür.
/var/log/dmesg: Önyükleme sırasındaki çekirdek mesajları. Donanım algılama sorunlarında faydalıdır.
/var/log/boot.log: Sistem başlangıç mesajları.
/var/log/cron: Zamanlanmış görev kayıtları.
/var/log/mail.log: E-posta sunucusu kayıtları.
/var/log/apache2/ veya /var/log/httpd/: Web sunucusu kayıtları.
/var/log/mysql/: Veritabanı kayıtları.
Uygulama Logları
Uygulamalar genellikle /var/log altında kendi dizinlerini oluşturur:
/var/log/nginx/ /var/log/postgresql/ /var/log/apt/
Log Dosyası Okuma
tail Komutu
En sık kullanılan log okuma aracı. Dosyanın son satırlarını gösterir.
Son 20 satır:
tail -20 /var/log/syslog
Canlı takip (yeni satırlar anlık görünür):
tail -f /var/log/syslog
Birden fazla dosyayı takip:
tail -f /var/log/syslog /var/log/auth.log
head ve cat
Dosyanın başını okuma:
head -50 /var/log/syslog
Tüm dosyayı okuma (büyük dosyalarda dikkatli):
cat /var/log/syslog
less ile Sayfalama
Büyük dosyalarda gezinme:
less /var/log/syslog
less içinde:
- Boşluk: Sonraki sayfa
- b: Önceki sayfa
- /kelime: Arama
- n: Sonraki sonuç
- q: Çıkış
grep ile Filtreleme
Belirli kalıpları arama:
grep "error" /var/log/syslog grep -i "failed" /var/log/auth.log
-i: Büyük/küçük harf duyarsız -v: Eşleşmeyenleri göster -c: Eşleşme sayısı
Birden fazla dosyada arama:
grep -r "ssh" /var/log/
Systemd ve Journald
Modern Linux dağıtımları systemd kullanır. Systemd'nin log sistemi journald'dir. Debian 12'den itibaren geleneksel syslog yerine journald varsayılan oldu.
Journald Özellikleri
Binary format: Daha hızlı arama ve filtreleme. Metadata: Her mesajla birlikte kaynak, öncelik, zaman damgası saklanır. Boot takibi: Her önyükleme ayrı izlenebilir.
Log dosyaları iki konumda saklanır:
/var/log/journal/: Kalıcı depolama (persistent). Sistem yeniden başlasa da loglar korunur.
/run/log/journal/: Geçici depolama (volatile). Yeniden başlatmada silinir.
journalctl Komutu
Systemd loglarını okumak için journalctl kullanılır.
Temel Kullanım
Tüm loglar:
journalctl
Son satırlardan başla:
journalctl -e
Sayfalama olmadan:
journalctl --no-pager
Zaman Filtresi
Bugünkü loglar:
journalctl --since today
Belirli tarih aralığı:
journalctl --since "2025-01-15 10:00" --until "2025-01-15 12:00"
Son bir saat:
journalctl --since "1 hour ago"
Dün:
journalctl --since yesterday --until today
Boot Filtreleme
Mevcut önyükleme:
journalctl -b
Önceki önyükleme:
journalctl -b -1
Tüm boot oturumlarını listele:
journalctl --list-boots
Servis Filtreleme
Belirli servisin logları:
journalctl -u nginx.service journalctl -u sshd.service
Birden fazla servis:
journalctl -u nginx -u php-fpm
Öncelik Filtreleme
Öncelik seviyeleri 0-7 arasında:
0 (emerg): Sistem kullanılamaz 1 (alert): Acil müdahale gerekli 2 (crit): Kritik durumlar 3 (err): Hatalar 4 (warning): Uyarılar 5 (notice): Normal ama önemli 6 (info): Bilgilendirme 7 (debug): Hata ayıklama
Hata ve üzeri:
journalctl -p err
Uyarı ve üzeri:
journalctl -p warning
Çekirdek Mesajları
Sadece kernel logları:
journalctl -k
Canlı Takip
Yeni mesajları anlık göster:
journalctl -f
Belirli servis için:
journalctl -u nginx -f
Çıktı Formatı
JSON formatı:
journalctl -o json-pretty
Kısa format:
journalctl -o short
Detaylı format:
journalctl -o verbose
rsyslog
Geleneksel log sistemi rsyslog hala yaygın kullanılır. Journald ile birlikte çalışabilir.
Yapılandırma
Ana dosya: /etc/rsyslog.conf
Uygulama ayarları: /etc/rsyslog.d/ dizini
rsyslog kuralları facility (kaynak) ve severity (önem) kombinasyonuna göre mesajları yönlendirir.
Örnek kural:
auth,authpriv. /var/log/auth.log .;auth,authpriv.none /var/log/syslog kern. /var/log/kern.log
Log Rotation
Log dosyaları sürekli büyür. Disk dolmasını önlemek için düzenli döndürme (rotation) yapılır. logrotate bu işi otomatik yapar.
logrotate Yapılandırması
Ana dosya: /etc/logrotate.conf
Uygulama ayarları: /etc/logrotate.d/ dizini
Örnek Yapılandırma
/var/log/myapp/*.log { daily rotate 7 compress delaycompress missingok notifempty dateext create 640 root adm postrotate /usr/bin/systemctl reload myapp endscript }
Direktifler
daily/weekly/monthly: Döndürme sıklığı. rotate 7: Kaç eski kopya tutulacak. compress: Eski logları sıkıştır. delaycompress: Son döndürülen dosyayı sıkıştırma (sorun giderme için). missingok: Dosya yoksa hata verme. notifempty: Boş dosyayı döndürme. dateext: Dosya adına tarih ekle. create: Yeni dosya izinleri. postrotate: Döndürme sonrası çalışacak komut.
Test
Yapılandırmayı test etme (değişiklik yapmaz):
sudo logrotate -d /etc/logrotate.conf
Manuel çalıştırma:
sudo logrotate -f /etc/logrotate.conf
Durum dosyası:
cat /var/lib/logrotate/status
Pratik Örnekler
SSH Başarısız Girişleri Bulma
grep "Failed password" /var/log/auth.log journalctl -u sshd | grep "Failed"
Belirli IP'den girişler:
grep "192.168.1.100" /var/log/auth.log
Sistem Hatalarını Bulma
Son 24 saatteki hatalar:
journalctl -p err --since "24 hours ago"
Servis hatası:
journalctl -u nginx -p err
Disk Dolan Sunucuda Log Temizleme
En büyük log dosyalarını bul:
du -sh /var/log/* | sort -rh | head -10
Eski journal loglarını temizle:
sudo journalctl --vacuum-time=7d sudo journalctl --vacuum-size=500M
Önyükleme Sorunlarını İnceleme
dmesg | grep -i error journalctl -b -1 -p err
Web Sunucu Logları
Apache erişim logları:
tail -f /var/log/apache2/access.log
404 hatalarını bul:
grep " 404 " /var/log/nginx/access.log
En çok istek yapan IP'ler:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
Log İzleme İpuçları
Düzenli kontrol edin: Her gün en azından auth.log ve syslog'a göz atın.
Alertler kurun: Belirli hata kalıpları için bildirim sistemleri oluşturun.
Merkezi log toplama: Birden fazla sunucu varsa logları merkezi sisteme gönderin (ELK Stack, Graylog, Loki).
Disk alanını izleyin: Log dosyaları disk doldurabilir, rotation düzgün çalışmalı.
Zaman damgalarına dikkat: Farklı sistemlerde saat farkı sorun gidermeyi zorlaştırır.
Güvenlik
Log dosyaları hassas bilgi içerebilir. Erişim izinlerini kontrol edin:
ls -la /var/log/auth.log
Loglar genellikle root veya adm grubuna ait olmalı. Normal kullanıcılar auth.log'u okuyamamalı.
Sonuç
Log dosyaları Linux sistem yönetiminin vazgeçilmez parçasıdır. Sorun gidermenin ilk adımı her zaman log kontrolüdür.
Modern sistemlerde journalctl kullanımı öne çıkıyor. Güçlü filtreleme özellikleri ve metadata desteğiyle sorun tespiti kolaylaşıyor.
tail -f ile canlı takip, grep ile filtreleme, journalctl ile sistemd logları - bu üç araç günlük işlerin çoğunu karşılar. Log rotation ayarlarını ihmal etmeyin, disk dolan sunucu baş ağrısıdır.
0 Yorum
Yorum Yaz