Autor del tema
#1
awk ile işlem geçmişini inceleme
1) Log dosyalarını anlamak ve hangi sütunların önemli olduğunu belirlemek
Birçok sistem kaydı, zaman damgası, kullanıcı, işlem komutu ve çıktı gibi alanlar içerir. Örneğin /var/log/auth.log veya /var/log/syslog gibi dosyalarda, belirli kalıpları aramak için awk ile temel alanlar üzerinden çalışmak işe yarar. Basit bir örnekle, her satırın ilk alanını zaman damgası olarak ele almak ve belirli bir anahtar kelimeyi (ör. LOGIN) içeren satırları filtrelemek mümkün:
2) Zaman aralıklarını hesaplamak
Bir dizi olayın toplam süresini veya ortalama arasını görmek için tarih-saat alanlarını parse etmek gerekir. GNU awk (gawk) ile strftime ve mktime kullanımıyla zaman farklarını hesaplamak pratik:
Not: bu örnekler, log formatına göre özelleştirilmelidir.
3) İşlem geçmişindeki kullanıcı etkinlikleri
Kullanıcı bazında toplam komut sayısını, en sık çalıştırılan komutları veya belirli bir kullanıcının başarısız girişlerini özetlemek için alanları ayırıp gruplamak gerekir. Örneğin, kullanıcı ve komut sütunları biliniyorsa:
4) Olay yoğunluğunu zaman içinde görselleştirmek için basit özetler
Bir günlük aralığında satır sayısını dakikalık ya da saatlik olarak toplamak, trafik anomalisini tespit etmeyi kolaylaştırır.
5) Güvenlik için kritik kalıpları yakalamak
Belirli hatalı kimlik doğrulama girişleri, yetkisiz erişim denemeleri veya komut enjeksiyonu gibi riskleri hızlıca tespit etmek adına, kalıpla eşleşen satırları öne çıkarmak gerekir. Örnek olarak SSH başarısız girişlerini şu şekilde filtreleyebiliriz:
Sonuç ve ipuçları
Bu konudaki deneyiminiz veya kullandığınız özel kalıplar var mı? Özellikle hangi loglarda hangi awk yaklaşımları sizin için en değerli çalıştı?
Bir sistem yöneticisi olarak, günlük dosyalarının ve işlem geçmişinin güvenlik ve performans açısından ne kadar değerli olduğunu sık sık gördünüz. Bu yazıda, awk kullanarak basit fakat etkili bir şekilde işlem geçmişini incelemenin temel yollarını derinleştireceğiz. Amaç, veriyi yapılandırılmış hâle getirip anahtar olayları hızlıca çıkarmak ve uzun trendleri fark etmek.
1) Log dosyalarını anlamak ve hangi sütunların önemli olduğunu belirlemek
Birçok sistem kaydı, zaman damgası, kullanıcı, işlem komutu ve çıktı gibi alanlar içerir. Örneğin /var/log/auth.log veya /var/log/syslog gibi dosyalarda, belirli kalıpları aramak için awk ile temel alanlar üzerinden çalışmak işe yarar. Basit bir örnekle, her satırın ilk alanını zaman damgası olarak ele almak ve belirli bir anahtar kelimeyi (ör. LOGIN) içeren satırları filtrelemek mümkün:
CÓDIGO
1awk '/LOGIN/ { print $1\" \"$2\" - \"$0 }' /var/log/auth.log2) Zaman aralıklarını hesaplamak
Bir dizi olayın toplam süresini veya ortalama arasını görmek için tarih-saat alanlarını parse etmek gerekir. GNU awk (gawk) ile strftime ve mktime kullanımıyla zaman farklarını hesaplamak pratik:
CÓDIGO
1awk '{ t=mktime($1\" \"$2\" \"$3\" \"$4\" \"$5\" \"\"$6)); if (prev) diff=t-prev; prev=t; print strftime(\"%F %T\", t)\" +\"diff }' /var/log/syslogNot: bu örnekler, log formatına göre özelleştirilmelidir.
3) İşlem geçmişindeki kullanıcı etkinlikleri
Kullanıcı bazında toplam komut sayısını, en sık çalıştırılan komutları veya belirli bir kullanıcının başarısız girişlerini özetlemek için alanları ayırıp gruplamak gerekir. Örneğin, kullanıcı ve komut sütunları biliniyorsa:
CÓDIGO
1awk '{user=$9; cmd=$11; if ($0 ~ /sudo/) sudo_count++; print user\"|\"cmd }' /var/log/auth.log | sort | uniq -c | sort -nr | head -n 204) Olay yoğunluğunu zaman içinde görselleştirmek için basit özetler
Bir günlük aralığında satır sayısını dakikalık ya da saatlik olarak toplamak, trafik anomalisini tespit etmeyi kolaylaştırır.
CÓDIGO
1awk '{ ts=$1\" \"$2; count[ts]++ } END { for (t in count) print t\" -> \"count[t] }' /var/log/syslog | sort5) Güvenlik için kritik kalıpları yakalamak
Belirli hatalı kimlik doğrulama girişleri, yetkisiz erişim denemeleri veya komut enjeksiyonu gibi riskleri hızlıca tespit etmek adına, kalıpla eşleşen satırları öne çıkarmak gerekir. Örnek olarak SSH başarısız girişlerini şu şekilde filtreleyebiliriz:
CÓDIGO
1awk '/Failed password/ {print $0}' /var/log/auth.logSonuç ve ipuçları
- Log formatınıza uygun alan ayırıcıyı belirleyin (spaces, tabs, veya özel karakterler).
- Büyük loglar için chunk okuma, awk ile satır başına işleme performansını korur.
- Ayrıca, awk ile çıktı dosyasını CSV veya JSON’a dönüştürerek başka araçlarda analiz etmek de mümkündür.
Bu konudaki deneyiminiz veya kullandığınız özel kalıplar var mı? Özellikle hangi loglarda hangi awk yaklaşımları sizin için en değerli çalıştı?
