Lompati ke konten utama
Modul 8 · Pelajaran 2 dari 430/32 dalam kursus~12 min
Pelajaran modul (2/4)

Pengurai log Apache

Log Apache (format gabungan) memiliki struktur yang tepat:

Code
127.0.0.1 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1234

Pola dengan grup bernama mengekstrak setiap bidang dalam satu kesempatan:

Code
^(?<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

  1. Mulai dari garis sebenarnya dan sematkan pembatas: spasi, tanda kutip, tanda kurung.
  2. Antara pembatas, identifikasi jenis token (IP, kata, angka).
  3. 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

Latihan#regex.m8.l2.e1
Upaya: 0Memuat…

Ekstrak IPv4 di awal setiap baris log sebagai grup bernama `ip`.

Memuat editor…
Tunjukkan petunjuk

Jangkar ke awal baris dengan ^ dan tanda m, dan gabungkan IP dengan (?<ip>...).

Solusi tersedia setelah 3 upaya

Tinjau latihan

Latihan#regex.m8.l2.e2
Upaya: 0Memuat…

Ekstrak metode HTTP dan jalur permintaan di antara tanda kutip, sebagai grup `metodo` dan `path`.

Memuat editor…
Tunjukkan petunjuk

Buka dengan ", lalu (?<metodo>\\w+)\\s+(?<path>\\S+).

Solusi tersedia setelah 3 upaya

Tantangan tambahan

Latihan#regex.m8.l2.e3
Upaya: 0Memuat…

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`.

Memuat editor…
Tunjukkan petunjuk

Use \[(?<timestamp>[^\]]+)\] to prevent the engine from matching past the closing bracket.

Solusi tersedia setelah 3 upaya