Themenersteller
#1
IP bazlı istek sayımı için awk ile pratik yaklaşım
İlk adım: log yapısının anlaşılması ve hedefin netleşmesi
İlk teknik akış: temel bir awk çözümü
awk '{print $1}' access.log | sort | uniq -c | sort -nr
İkinci adım: zaman aralığına göre filtreleme
awk '$0 ~ /\[01\/Nov\/2024:12:/ {print $1}' access.log | sort | uniq -c | sort -nr
[list]
Burada direkt olarak saat dilimini hedefliyoruz. Daha dinamik bir yaklaşım için tarih değişkenlerini shell argümanı olarak almak veya awk'da değişken ile karşılaştırmalar kurmak mümkün.
[/list]
Üçüncü adım: belirli bir IP’nin istek sayısını bulmak
awk '$1 == "123.45.67.89" {count++} END {print "123.45.67.89:", count}' access.log
awk '$1 == "123.45.67.89" && $0 ~ /\[01\/Nov\/2024:12:/ {count++} END {print "123.45.67.89 (12:00-13:00):", count}' access.log
İleri düzey: çok IP’li özet ve çıktı formatı
[list]
Toplu özet için associative array kullanabiliriz:
[/list]
awk '{ip[$1]++} END {for (i in ip) print ip[i], i}' access.log | sort -nr
awk '$1 in ip && $0 ~ /\[01\/Nov\/2024:/ {count[$1]++} END {for (ipaddr in count) print count[ipaddr], ipaddr}' access.log
Ek ipuçları ve güvenlik farkındalıkları
Kapanış
Bu yaklaşımları kendi log yapınıza uyarlayarak test edin. Özellikle zaman aralıklarını ve hedef IP’leri netleştirmek, performans ve güvenlik analizi için kritik olacaktır. Siz hangi log formatında çalışıyorsunuz ve hangi aralıkta özet almak istiyorsunuz?
Günlüklerinde hangi IP’den hangi sayıda istek geldiğini hızlıca görmek, güvenlik ve performans için temel adımlardan biridir. Özellikle özgün log formatlarıyla nasıl çalışacağını adım adım ele alacağım; basitten başlayıp, gerektiğinde filtrelemeyi ve özetlemeyi nasıl yapacağını gösteren bir akışı paylaşacağım.
İlk adım: log yapısının anlaşılması ve hedefin netleşmesi
- Standart web sunucusu logları genelde her satırda bir isteği temsil eder ve IP adresi genellikle satırın başında bulunur. Örneğin, nginx veya apache loglarının Common veya Combined formatında başlık kısmı şu şekilde olabilir: 123.45.67.89 - - [01/Nov/2024:12:34:56 +0000] "GET /index.html HTTP/1.1" 200 1024.
- Amaç: belirli bir zaman aralığında IP başına istek sayısını hesaplamak. Buna, tüm loglar için bir özet veya belirli bir IP’yi filtreleyerek detay görmek dahil.
İlk teknik akış: temel bir awk çözümü
- Amaç: her IP için satır sayısını toplamak.
- Örnek temel komut:
awk '{print $1}' access.log | sort | uniq -c | sort -nr
- Bu basit yaklaşım, tüm IP’ler için toplam istek sayısını verir. Ancak zaman aralığı filtrelemesi veya belirli bir IP aralığıyla sınırlama gerektiğinde awk’un hesaplama gücü işe yarar.
İkinci adım: zaman aralığına göre filtreleme
- Örnek log formatında tarih kısmı satır içinde belirgin olduğundan, belirli gün veya saat aralığını seçmek için awk'ın koşullarını kullanabiliriz:
awk '$0 ~ /\[01\/Nov\/2024:12:/ {print $1}' access.log | sort | uniq -c | sort -nr
[list]
[/list]
Üçüncü adım: belirli bir IP’nin istek sayısını bulmak
- Söz konusu IP adresini saklayıp yalnızca o IP için sayım yapmak:
awk '$1 == "123.45.67.89" {count++} END {print "123.45.67.89:", count}' access.log
- Eğer zaman aralığıyla birlikte filtrelemek istersen:
awk '$1 == "123.45.67.89" && $0 ~ /\[01\/Nov\/2024:12:/ {count++} END {print "123.45.67.89 (12:00-13:00):", count}' access.log
İleri düzey: çok IP’li özet ve çıktı formatı
[list]
[/list]
awk '{ip[$1]++} END {for (i in ip) print ip[i], i}' access.log | sort -nr
- Zaman aralığı ve IP filtresi eklemek için:
awk '$1 in ip && $0 ~ /\[01\/Nov\/2024:/ {count[$1]++} END {for (ipaddr in count) print count[ipaddr], ipaddr}' access.log
Ek ipuçları ve güvenlik farkındalıkları
- Log formatını netleştirmek için sunucu konfigürasyonuna bakın; bazen alanlar farklı konumlarda olabilir.
- Büyük loglar için iş akışını günlük tespitine göre bölün; örneğin 1 saatlik dosyaları ayrı işler olarak işlemek bellek sorunlarını azaltır.
- Erişimi güvenlikle sınamak adına belirli IP blokları veya kullanıcı ajanı gibi ek kriterler ekleyebilirsiniz.
Kapanış
Bu yaklaşımları kendi log yapınıza uyarlayarak test edin. Özellikle zaman aralıklarını ve hedef IP’leri netleştirmek, performans ve güvenlik analizi için kritik olacaktır. Siz hangi log formatında çalışıyorsunuz ve hangi aralıkta özet almak istiyorsunuz?
