Pelajaran modul (2/4)
Pengurai log Apache
Log Apache (format gabungan) memiliki struktur yang tepat:
127.0.0.1 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1234Pola dengan grup bernama mengekstrak setiap bidang dalam satu kesempatan:
^(?<ip>\d+\.\d+\.\d+\.\d+)\s+\S+\s+\S+\s+\[[^\]]+\]\s+"(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"\s+(?<status>\d+)\s+(?<size>\d+)Kelihatannya mengerikan, tapi ini adalah rangkaian pola sederhana:
(?<ip>\d+\.\d+\.\d+\.\d+)-- sumber IPv4.\s+\S+\s+\S+-- ID pengguna (biasanya-).\[[^\]]+\]-- tanggal dalam tanda kurung siku."(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"-- permintaan dalam tanda kutip, dengan metode HTTP, jalur, dan versi.(?<status>\d+)\s+(?<size>\d+)-- kode status dan byte terkirim.
Strategi umum
- Mulai dari garis sebenarnya dan sematkan pembatas: spasi, tanda kutip, tanda kurung.
- Antara pembatas, identifikasi jenis token (IP, kata, angka).
- Masukkan ke dalam grup bernama hanya yang perlu Anda ekstrak.
Mengurai log yang kompleks
Dalam penguraian log, bidang biasanya dipisahkan dengan spasi kecuali jika bidang tersebut berisi string atau tanda kurung yang dikutip (misalnya agen pengguna). Menggunakan pengecualian kelas karakter alih-alih titik wildcard mencegah penggabungan beberapa kolom secara salah.
Cobalah
Ekstrak IPv4 di awal setiap baris log sebagai grup bernama `ip`.
Tunjukkan petunjuk
Jangkar ke awal baris dengan ^ dan tanda m, dan gabungkan IP dengan (?<ip>...).
Solusi tersedia setelah 3 upaya
Tinjau latihan
Ekstrak metode HTTP dan jalur permintaan di antara tanda kutip, sebagai grup `metodo` dan `path`.
Tunjukkan petunjuk
Buka dengan ", lalu (?<metodo>\\w+)\\s+(?<path>\\S+).
Solusi tersedia setelah 3 upaya
Tantangan tambahan
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`.
Tunjukkan petunjuk
Use \[(?<timestamp>[^\]]+)\] to prevent the engine from matching past the closing bracket.
Solusi tersedia setelah 3 upaya