モジュール 8 · レッスン 2 / 4コース内の 30/32~12 min
モジュールのレッスン (2/4)
Apacheログパーサー
Apache ログ (結合形式) は正確な構造を持っています。
Code
127.0.0.1 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 1234名前付きグループ を使用したパターンでは、すべてのフィールドが 1 回のショットで抽出されます。
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+)巨大に見えますが、これは単純なパターンを連結したものです。
(?<ip>\d+\.\d+\.\d+\.\d+)-- ソース IPv4。\s+\S+\s+\S+-- ユーザー ID (通常は-)。\[[^\]]+\]-- 角括弧内の日付。"(?<metodo>\w+)\s+(?<path>\S+)\s+\S+"-- HTTP メソッド、パス、バージョンを含む引用符で囲まれたリクエスト。(?<status>\d+)\s+(?<size>\d+)-- ステータス コードと送信されたバイト数。
一般的な戦略
- 実際の行から開始し、区切り文字を固定します: スペース、引用符、括弧。
- 区切り文字の間で、トークンのタイプ (IP、単語、数値) を識別します。
- 抽出する必要があるものだけを 名前付きグループでラップします。
複雑なログの解析
ログ解析では、引用符で囲まれた文字列や括弧 (ユーザー エージェントなど) が含まれる場合を除き、フィールドは通常スペースで区切られます。ワイルドカード ドットの代わりに除外文字クラスを使用すると、複数の列が誤ってマージされるのを防ぐことができます。
試してみてください
運動#regex.m8.l2.e1
試行回数: 0読み込み中…
各ログ行の先頭にある IPv4 を名前付きグループ「ip」として抽出します。
エディターを読み込み中…
ヒントを表示
^ と m フラグを使用して行の先頭にアンカーし、IP を (?<ip>...) で囲みます。
3 回の試行後に解決策が利用可能になります
復習演習
運動#regex.m8.l2.e2
試行回数: 0読み込み中…
HTTP メソッドと引用符間のリクエストのパスをグループ「metodo」と「path」として抽出します。
エディターを読み込み中…
ヒントを表示
「」で開き、次に (?<metodo>\\w+)\\s+(?<パス>\\S+) を指定します。
3 回の試行後に解決策が利用可能になります
追加の課題
運動#regex.m8.l2.e3
試行回数: 0読み込み中…
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`.
エディターを読み込み中…
ヒントを表示
Use \[(?<timestamp>[^\]]+)\] to prevent the engine from matching past the closing bracket.
3 回の試行後に解決策が利用可能になります