Skip to content
Back to blog
Kariyer Linux log analizi journalctl awk sed sistem yönetimi komut satırı veri madenciliği Mistral

Linux Komut Satırında Log Analizi: journalctl, awk ve sed ile Veri Madenciliği

Linux sistemlerinde log analizi yapmanın en etkili yollarını, journalctl, awk ve sed komutlarıyla nasıl gerçekleştireceğinizi öğrenin. Sistem hatalarını hızlıca tespit edin ve verimli log yönetimi için pratik teknikler keşfedin.

Caner Serbest

Sistem ve Altyapı

5 min read

Linux Komut Satırında Log Analizi: journalctl, awk ve sed ile Veri Madenciliği

Sistem yöneticileri için log analizi, sorunları tespit etmek ve sistem performansını optimize etmek adına kritik bir yetkinliktir. Linux sistemlerinde üretilen loglar, sistemin sağlığı hakkında değerli bilgiler içerir. Ancak, bu logların içinden anlamlı verileri çıkarmak ve analiz etmek, doğru araçlar ve teknikler gerektirir. Bu yazıda, Linux komut satırında log analizi yapmanın en etkili yollarını, journalctl, awk ve sed komutlarıyla nasıl gerçekleştireceğinizi adım adım öğreneceksiniz.


1. Sistem Loglarının Temelleri: journalctl ile Sistematik Analiz

Modern Linux dağıtımlarında (örneğin, Ubuntu 22.04, Debian 12, Fedora 38), sistem logları genellikle systemd tarafından yönetilir. Bu sistemde, loglar journald adı verilen bir servis tarafından toplanır ve saklanır. journalctl komutu, bu loglara erişmek ve analiz etmek için kullanılan temel araçtır.

journalctl Temel Kullanımı

Aşağıdaki komutlar, farklı senaryolarda loglara nasıl erişeceğinizi gösterir:

# Tüm sistem loglarını görüntüle
journalctl

# Son 100 log girişini göster
journalctl -n 100

# Belirli bir süre içindeki logları filtrele (örneğin, son 1 saat)
journalctl --since "1 hour ago"

# Belirli bir hizmetin loglarını görüntüle (örneğin, nginx)
journalctl -u nginx

# Kritik hata loglarını filtrele
journalctl -p err

# JSON formatında logları görüntüle (makine tarafından okunabilir)
journalctl -o json

journalctl ile Özel Filtrelemeler

Logları daha verimli analiz etmek için aşağıdaki filtreleme seçeneklerini kullanabilirsiniz:

# Belirli bir tarih aralığındaki logları görüntüle
journalctl --since "2023-10-01" --until "2023-10-07"

# Belirli bir süreç ID'sine (PID) ait logları görüntüle
journalctl _PID=1234

# Belirli bir kullanıcı tarafından oluşturulan logları görüntüle
journalctl _UID=1000

# Belirli bir önyükleme (boot) oturumuna ait logları görüntüle
journalctl -b

2. Metin İşleme Araçları: awk ve sed ile Log Dönüşümü

Log dosyaları genellikle düz metin formatındadır ve bu dosyalardan anlamlı veriler çıkarmak için awk ve sed gibi araçlar kullanılır. Bu araçlar, log dosyalarını filtrelemek, dönüştürmek ve analiz etmek için oldukça güçlüdür.

awk ile Log Dosyalarını Analiz Etme

awk, metin dosyalarını satır satır işlemek ve belirli sütunları çıkarmak için kullanılır. Örneğin, /var/log/auth.log dosyasından başarısız giriş denemelerini tespit etmek için aşağıdaki komutu kullanabilirsiniz:

awk '/Failed password/ {print $1, $2, $3, $14}' /var/log/auth.log

Bu komut, Failed password ifadesini içeren satırlardan 1., 2., 3. ve 14. sütunları çıkarır. Örneğin:

Oct 10 12:34:56 server sshd[1234]: Failed password for root from 192.168.1.100 port 22 ssh2

Çıktı:

Oct 10 12:34:56 root

sed ile Log Dosyalarını Dönüştürme

sed, metin dosyalarında yer değiştirme (substitution), silme ve filtreleme işlemleri yapmak için kullanılır. Örneğin, /var/log/syslog dosyasından belirli bir tarih aralığındaki logları çıkarmak için:

sed -n '/Oct 10 12:00:00/,/Oct 10 13:00:00/p' /var/log/syslog

Bu komut, Oct 10 12:00:00 ile Oct 10 13:00:00 arasındaki tüm logları görüntüler.

awk ve sed Kombinasyonu ile Gelişmiş Log Analizi

Aşağıdaki örnek, /var/log/nginx/access.log dosyasından IP adreslerini ve erişim sayılarını çıkarmak için awk ve sed kombinasyonunu kullanır:

sed 's/" / /g' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr

Bu komutun çalışma adımları:

  1. sed komutu, tırnak işaretlerini boşlukla değiştirir.
  2. awk komutu, her satırın ilk sütununu (IP adresi) çıkarır.
  3. sort komutu, IP adreslerini sıralar.
  4. uniq -c komutu, aynı IP adreslerini sayar.
  5. sort -nr komutu, sonuçları sayısal olarak ters sırada sıralar.

Çıktı:

42 192.168.1.100
25 192.168.1.101
18 192.168.1.102

3. Gerçek Dünya Senaryosu: SSH Brute Force Saldırılarını Tespit Etme

SSH brute force saldırıları, sistem yöneticilerinin en sık karşılaştığı tehditlerden biridir. Bu saldırıları tespit etmek ve engellemek için log analizi yapmak kritik önem taşır. Aşağıda, journalctl ve awk kullanarak SSH brute force saldırılarını nasıl tespit edeceğinizi gösteren bir örnek bulunmaktadır.

Adım 1: SSH Loglarını Filtreleme

journalctl -u sshd --since "1 hour ago" | grep "Failed password"

Bu komut, son 1 saatteki SSH hizmetinden gelen Failed password loglarını görüntüler.

Adım 2: IP Adreslerini ve Saldırı Sayısını Çıkarma

journalctl -u sshd --since "1 hour ago" | grep "Failed password" | awk '{print $14}' | sort | uniq -c | sort -nr

Bu komut, başarısız giriş denemelerini yapan IP adreslerini ve saldırı sayısını çıkarır. Örneğin:

15 192.168.1.100
8  192.168.1.101
5  192.168.1.102

Adım 3: Saldırgan IP’lerini Engelleme

Saldırgan IP’lerini tespit ettikten sonra, bunları engellemek için ufw (Uncomplicated Firewall) kullanabilirsiniz:

# IP adresini engelle
sudo ufw deny from 192.168.1.100

# Engellenen IP'leri listele
sudo ufw status numbered

4. Log Dosyalarını Otomatikleştirme: cronjob ile Düzenli Analiz

Log analizi işlemlerini otomatikleştirmek, sistem yöneticilerinin zamanını önemli ölçüde kurtarır. cronjob kullanarak, belirli aralıklarla log analizleri yapabilir ve sonuçları e-posta yoluyla alabilirsiniz.

Örnek cronjob Kurulumu

Aşağıdaki komut, her gün saat 03:00’te /var/log/auth.log dosyasını analiz eder ve başarısız giriş denemelerini e-posta yoluyla gönderir:

0 3 * * * /bin/bash -c 'grep "Failed password" /var/log/auth.log | awk "{print \$14}" | sort | uniq -c | sort -nr > /tmp/failed_logins.txt && mail -s "SSH Brute Force Saldırıları Raporu" [email protected] < /tmp/failed_logins.txt'

Bu komutun çalışma adımları:

  1. grep komutu, /var/log/auth.log dosyasından Failed password ifadesini içeren satırları filtreler.
  2. awk komutu, IP adreslerini çıkarır.
  3. sort ve uniq -c komutları, IP adreslerini sayar.
  4. Sonuçlar, /tmp/failed_logins.txt dosyasına kaydedilir.
  5. mail komutu, sonuçları e-posta yoluyla gönderir.

5. Log Analizi için En İyi Uygulamalar

  1. Log Dosyalarını Düzenli Olarak Yedekleyin: Log dosyaları büyüdükçe sistem performansını olumsuz etkileyebilir. Düzenli olarak log dosyalarını yedekleyin ve eski logları arşivleyin.

  2. Log Dosyalarını Sıkıştırın: Log dosyalarını gzip veya bzip2 ile sıkıştırarak disk alanından tasarruf edin.

  3. Log Dosyalarını Farklı Sunuculara Aktarın: Kritik log dosyalarını merkezi bir log sunucusuna aktarın ve analiz edin.

  4. Log Dosyalarını Görselleştirin: Log dosyalarını Grafana, ELK Stack (Elasticsearch, Logstash, Kibana) veya Graylog gibi araçlarla görselleştirin.

  5. Log Dosyalarını Güvenli Hale Getirin: Log dosyaları hassas bilgiler içerebilir. Log dosyalarını güvenli bir şekilde saklayın ve erişim kontrollerini uygulayın.


6. Sonuç: Log Analizi ile Sistem Güvenliğini Artırın

Linux sistemlerinde log analizi yapmak, sistem güvenliğini artırmak ve performansı optimize etmek için kritik bir adımdır. journalctl, awk ve sed gibi araçlar, log dosyalarını analiz etmek ve anlamlı veriler çıkarmak için güçlü seçenekler sunar. Bu araçları kullanarak, sistem hatalarını hızlıca tespit edebilir, güvenlik tehditlerini engelleyebilir ve sistem performansını iyileştirebilirsiniz.

Unutmayın, log analizi sadece bir araçtır. Sistem yöneticisi olarak, logları düzenli olarak analiz etmek ve sisteminizin sağlığı hakkında sürekli olarak bilgi sahibi olmak önemlidir. Bu sayede, sistemlerinizi daha güvenli ve verimli hale getirebilirsiniz.


Kaynaklar ve İleri Okuma


Bu yazıda ele alınan teknikler, Linux sistemlerinde log analizi yapmak için temel bir rehber niteliğindedir. Uygulamaya geçmeden önce, sisteminizde bu komutları test etmeyi ve sonuçlarını incelemeyi unutmayın. İyi analizler! 🚀


Bu yazı Mistral ile otomatik oluşturulmuştur.