Log İnceleme ve Filtreleme
Log dosyaları, sistemin işleyişi hakkında değerli bilgiler içerir, ancak genellikle çok büyük olabilirler. İhtiyaç duyulan bilgiyi bulmak için logları etkili bir şekilde incelemek ve filtrelemek önemlidir. Bu bölümde, hem geleneksel metin tabanlı log dosyaları hem de journald
günlükleri için yaygın kullanılan araçlar ve teknikler ele alınacaktır.
Geleneksel Log Dosyaları (/var/log
)
/var/log
)Bu dosyalar genellikle düz metin formatındadır ve standart komut satırı araçlarıyla işlenebilir.
1. Canlı Takip ve Basit Filtreleme (tail -f | grep
)
Bir log dosyasını gerçek zamanlı olarak takip etmek ve belirli anahtar kelimeleri içeren satırları anında görmek için tail -f
ve grep
kombinasyonu sıkça kullanılır:
# /var/log/syslog dosyasını takip et ve içinde "error" geçen satırları göster (büyük/küçük harf duyarsız)
tail -f /var/log/syslog | grep -i "error"
# /var/log/nginx/access.log dosyasını takip et ve 404 hata kodlarını içeren satırları göster
tail -f /var/log/nginx/access.log | grep ' 404 '
tail -f
: Dosyanın sonunu gösterir ve yeni eklenen satırları sürekli olarak ekrana basar.grep
: Standart girdiden gelen satırlar içinde belirtilen kalıbı arar.
2. Regex ile Gelişmiş Filtreleme (grep -E
)
Daha karmaşık kalıpları eşleştirmek için grep -E
(veya egrep
) ile düzenli ifadeler (regular expressions) kullanılır:
# Apache access_log dosyasında belirli bir IP adresinden gelen istekleri bul
grep -E '^192\.168\.1\.10 ' /var/log/apache2/access.log
# auth.log dosyasında başarısız SSH login denemelerini bul
grep -E 'sshd\[[0-9]+\]: Failed password for' /var/log/auth.log
# access_log dosyasından sadece GET isteklerini içeren satırları çıkar
grep -E '^(\S+) (\S+) (\S+) \[.*\] "GET ' /var/log/nginx/access.log
3. Alanlara Göre İşleme (awk
)
Log satırları genellikle boşluk veya başka bir ayırıcı ile ayrılmış alanlardan oluşur. awk
, bu alanlara göre işlem yapmak için çok güçlü bir araçtır:
# access_log dosyasındaki her satırın ilk alanını (IP adresi) yazdır
tail -n 50 /var/log/nginx/access.log | awk '{print $1}'
# Belirli bir IP adresinden gelen isteklerin sayısını bul
awk '$1 == "192.168.1.10" { count++ } END { print count }' /var/log/nginx/access.log
# 404 hatası veren isteklerin URL'lerini (7. alan) yazdır
awk '$9 == "404" { print $7 }' /var/log/nginx/access.log | head
4. Metin Değiştirme (sed
)
Loglar üzerinde basit metin değiştirme veya ayıklama işlemleri için sed
kullanılabilir:
# syslog dosyasındaki tüm "WARN" kelimelerini "UYARI" ile değiştir (sadece ekrana basar)
sed 's/WARN/UYARI/g' /var/log/syslog | less
# access_log dosyasından tarih/saat bilgisini çıkar
sed -E 's/^([^ ]+) ([^ ]+) ([^ ]+) \[.*\] (.*)/\1 \4/' /var/log/nginx/access.log | head
systemd-journald
Günlükleri (journalctl
)
systemd-journald
Günlükleri (journalctl
)journald
, logları yapılandırılmış bir formatta sakladığı için journalctl
komutu güçlü filtreleme yetenekleri sunar.
Canlı Takip:
# Tüm günlükleri canlı takip et
sudo journalctl -f
# Belirli bir servisin günlüklerini canlı takip et
sudo journalctl -f -u nginx.service
Filtreleme:
Servise Göre (
-u
):sudo journalctl -u sshd.service
Önem Derecesine Göre (
-p
):# Sadece hata ve daha kritik mesajları göster sudo journalctl -p err # Uyarı ve daha kritik mesajları göster sudo journalctl -p warning..alert
Zamana Göre (
--since
,--until
):sudo journalctl --since "1 hour ago" sudo journalctl --since "09:00" --until "10:30"
Çekirdek Mesajları (
-k
):sudo journalctl -k
Belirli Önyükleme (
-b
):sudo journalctl -b # Mevcut önyükleme sudo journalctl -b -1 # Bir önceki önyükleme sudo journalctl --list-boots # Tüm önyüklemeleri listele
Meta Veri Alanlarına Göre:
journald
logları birçok meta veri alanı ile saklar (_PID
,_UID
,_EXE
,_SYSTEMD_UNIT
,SYSLOG_FACILITY
vb.). Bu alanlara göre filtreleme yapılabilir:# Belirli bir PID'ye ait loglar sudo journalctl _PID=12345 # Belirli bir çalıştırılabilir dosyaya ait loglar sudo journalctl /usr/sbin/sshd # Belirli bir syslog facility koduna ait loglar sudo journalctl SYSLOG_FACILITY=10 # authpriv için
Metin Arama (
grep
ile):journalctl
çıktısı metin tabanlı olduğu içingrep
ile de filtrelenebilir:sudo journalctl -u nginx.service | grep "denied"
Logları etkili bir şekilde incelemek, sistem yönetimi ve sorun gidermenin önemli bir parçasıdır. Hem geleneksel araçları hem de journalctl
'i bilmek, farklı durumlarla başa çıkmanıza yardımcı olur.
Last updated