Autor del tema
#1
Giriş ve bağlam
Web veya API günlüklerini analiz ederken durum kodlarının dağılımını görmek, sistemin sağlığını hızlıca özetler. Özellikle 2xx başarı, 4xx istemci hataları ve 5xx sunucu hatlarının hangi sıklıkta olduğunu bilmek, kapasite planlaması ve olay müdahalesi için temel bir göstergedir. Bu yazıda, awk ile günlük dosyalarındaki durum kodlarını çıkarıp dağılımını özetleyen basit bir akış sunacağım. Örnekler genel log formatları için uyarlanabilir olacak; kendi log formatınıza göre görüntüyü düzeltmeniz gerekebilir.
Temel yaklaşım
1) Durum kodunu ayıklama: Çoğu HTTP sunucusu günlüklerinde durum kodu, genelde en son sütunlarda ya da belirli bir alan içinde bulunur. Örneğin Common Log Format’ında durum kodu 9. alan olarak bulunur. Kendi logunuzda uygun alanı seçin.
2) Kodları sayma: awk ile alanı seçip, durum kodlarını anahtar olarak kullanıp sayımlarını toplarsınız.
3) Dağılımı sunma: Sonuçları yüzdelik ya da sayısal olarak raporlayabilir, ardından en çok görülen kodları sıralayabilir veya sabit aralıklar için gruplama yapabilirsiniz.
Basit bir örnek
[code]# örnek log formatı: ... "GET /path HTTP/1.1" 200 1024 ...
durum kodu 9. sütundadır (space ile ayrılmış)
awk '{code=$NF; if (code ~ /^[0-9]+$/) counts
Geliştirilmiş analizlerin adımları
İpuçları ve uyarılar
Sonuç ve kapanış
Awk ile durum kodu dağılımını hızlıca çıkarıp temel göstergeleri elde etmek, operasyonel farkındalığı yükseltir ve derinlemesine analiz için sağlam bir başlangıç sağlar. Kendi loglarınızda hangi sütunların durum kodunu barındırdığını belirleyip bu yapıyı uyarlayabilirsiniz. Log formatınız ve ihtiyaçlarınız doğrultusunda farklı gruplama ve çıktıları deneyerek daha net bir tablo elde edin.
Web veya API günlüklerini analiz ederken durum kodlarının dağılımını görmek, sistemin sağlığını hızlıca özetler. Özellikle 2xx başarı, 4xx istemci hataları ve 5xx sunucu hatlarının hangi sıklıkta olduğunu bilmek, kapasite planlaması ve olay müdahalesi için temel bir göstergedir. Bu yazıda, awk ile günlük dosyalarındaki durum kodlarını çıkarıp dağılımını özetleyen basit bir akış sunacağım. Örnekler genel log formatları için uyarlanabilir olacak; kendi log formatınıza göre görüntüyü düzeltmeniz gerekebilir.
Temel yaklaşım
1) Durum kodunu ayıklama: Çoğu HTTP sunucusu günlüklerinde durum kodu, genelde en son sütunlarda ya da belirli bir alan içinde bulunur. Örneğin Common Log Format’ında durum kodu 9. alan olarak bulunur. Kendi logunuzda uygun alanı seçin.
2) Kodları sayma: awk ile alanı seçip, durum kodlarını anahtar olarak kullanıp sayımlarını toplarsınız.
3) Dağılımı sunma: Sonuçları yüzdelik ya da sayısal olarak raporlayabilir, ardından en çok görülen kodları sıralayabilir veya sabit aralıklar için gruplama yapabilirsiniz.
Basit bir örnek
[code]# örnek log formatı: ... "GET /path HTTP/1.1" 200 1024 ...
durum kodu 9. sütundadır (space ile ayrılmış)
awk '{code=$NF; if (code ~ /^[0-9]+$/) counts
CÓDIGO
1++} END {for (c in counts) printf "%s: %d\n", c, counts[c] | "sort -n"}' logfile.logGeliştirilmiş analizlerin adımları
- Alanı kesinleştirme: Log formatınızdan durum kodunun yerini tam olarak belirleyin. Örneğin nginx için resmi log formatında akış şu şekilde olabilir: log_format '{time_iso8601} ${remote_addr} - ${remote_user} "${request}" ${status} ${body_bytes_sent} "${http_referer}" "${http_user_agent}"'; Burada status alanı değişkendir ve genelde ikinci adet sabit sütundur.
- Gruplama yapma: 200, 201 gibi tam kodlar yerine genel grupları da görmek için kodu birinci basamağa göre yuvarlayabilirsiniz. Örneğin {code ~ /^[0-9][0-9][0-9]$/} ve codes like 2xx, 3xx, 4xx, 5xx:
CÓDIGO1
awk '{code=$NF; if (code ~ /^[0-9]+$/) grp=int(substr(code,1,1)); groups[grp]++} END {for (g in groups) printf "%dxx: %d\n", g, groups[g] | "sort -n"}' logfile.log - Yüzdelik hesaplama: Toplam istek sayısını da hesaplayıp paylar ile yüzdeler elde edin.
[code]awk '{code=$NF; if (code ~ /^[0-9]+$/) {total++; countsCÓDIGO1
++}} END {for (c in counts) printf "%s: %d (%.2f%%)\n", c, counts[c], (counts[c]/total)*100} ' logfile.log | sort -n - Zaman bazlı trendler: Zaman damgasını kullanarak saatlik veya günlük dağılım da çıkarabilirsiniz. Örneğin log içinden zaman damgasını çekip, akışını saatlere gruplayın ve awk ile toplu sonuç üretin.
- Raporlama ve çıktı formatı: Sonuçları CSV veya JSON benzeri bir formata dönüştürmek iş akışlarına entegre etmek için uygundur. Örneğin CSV için printf ile basit bir çıktı elde edin.
İpuçları ve uyarılar
- Log formatını doğru almak çok önemli; yanlış sütun seçimi hatalı sonuç verir.
- Çok büyük günlük dosyalarında işlem sırasında geçici dosyalar veya derin sıralama maliyetleri doğabilir. Gerekirse dosyayı parçalara bölüp sıralı birleştirme yapın.
- Gerçek dünya trafiğini etkileyebilecek sahte veya test kayıtlarını filtrelemek için ek koşullar ekleyin (ör. belirli kullanıcı ajanları, iç IP’ler).
Sonuç ve kapanış
Awk ile durum kodu dağılımını hızlıca çıkarıp temel göstergeleri elde etmek, operasyonel farkındalığı yükseltir ve derinlemesine analiz için sağlam bir başlangıç sağlar. Kendi loglarınızda hangi sütunların durum kodunu barındırdığını belirleyip bu yapıyı uyarlayabilirsiniz. Log formatınız ve ihtiyaçlarınız doğrultusunda farklı gruplama ve çıktıları deneyerek daha net bir tablo elde edin.
