Modül dersleri (2/4)
Apache günlük ayrıştırıcısı
Apache günlükleri (birleşik format) kesin bir yapıya sahiptir:
127.0.0.1 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1234Adlandırılmış gruplara sahip bir model, her alanı tek seferde çıkarır:
^(?<ip>\d+\.\d+\.\d+\.\d+)\s+\S+\s+\S+\s+\[[^\]]+\]\s+"(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"\s+(?<status>\d+)\s+(?<size>\d+)Korkunç görünüyor ama basit kalıpların birleştirilmesi:
(?<ip>\d+\.\d+\.\d+\.\d+)-- kaynak IPv4.\s+\S+\s+\S+-- kullanıcı kimlikleri (genellikle-).\[[^\]]+\]-- köşeli parantez içindeki tarih."(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"-- HTTP yöntemi, yolu ve sürümüyle tırnak içindeki istek.(?<status>\d+)\s+(?<size>\d+)-- durum kodu ve gönderilen bayt sayısı.
Genel strateji
- Gerçek çizgiden başlayın ve sınırlayıcıları sabitleyin: boşluklar, tırnak işaretleri, köşeli parantezler.
- Sınırlayıcılar arasında, belirtecin türünü tanımlayın (IP, kelime, sayı).
- Adlandırılmış gruplara sarın Yalnızca çıkarmanız gerekenleri.
Karmaşık günlükleri ayrıştırma
Günlük ayrıştırmada alanlar, tırnak içine alınmış dizeler veya köşeli parantezler (örneğin, kullanıcı aracısı) içermeleri dışında genellikle boşlukla ayrılır. Joker karakter noktası yerine hariç tutulan karakter sınıflarının kullanılması, birden çok sütunun hatalı şekilde birleştirilmesini önler.
Deneyin
Her günlük satırının başlangıcındaki IPv4'ü adlandırılmış bir grup "ip" olarak çıkarın.
İpucu göster
^ ve m bayrağıyla satırın başlangıcına sabitleyin ve IP'yi (?<ip>...) içine sarın.
3 denemeden sonra çözüm mevcut
Alıştırmayı gözden geçirin
İsteğin HTTP yöntemini ve yolunu tırnak işaretleri arasında "metodo" ve "yol" grupları olarak çıkarın.
İpucu göster
" ile açın, ardından (?<metodo>\\w+)\\s+(?<path>\\S+).
3 denemeden sonra çözüm mevcut
Ek zorluk
Extract only the date and time part enclosed in brackets in logs, e.g. `10/Oct/2024:13:55:36 +0000`, as a named group `timestamp`.
İpucu göster
Use \[(?<timestamp>[^\]]+)\] to prevent the engine from matching past the closing bracket.
3 denemeden sonra çözüm mevcut