Bash でログ集計: grep・awk・sort で Web サーバーのアクセスログを分析する

nginx 形式のアクセスログ 500 行を、ターミナルのコマンド(awk・sort・uniq・grep)だけでステータス別件数・アクセス上位 IP・404 の多いパス・転送量に集計し、再実行できるシェル スクリプトにまとめます。運用・障害対応で毎日使う基本技術です。

入門約 45 分Azure 実環境

ラボ概要

このラボでは、「昨夜サイトが重かった原因を調べてほしい」と頼まれた運用担当の想定で、Web サーバーのアクセスログをコマンドラインだけで集計します。

ブラウザで開く IDE のターミナル(Linux)に、nginx 形式のアクセスログ access.log(500 行)が置いてあります。GUI ツールや Excel に持ち込まず、awk で列を取り出し、sort | uniq -c で数え、sort -rn で並べ替える、という定番の組み合わせを手に覚えさせます。最後に一連の処理をシェル スクリプトにまとめ、誰でも同じ結果を再現できるようにします。

学習目標:

  • パイプ(|)でコマンドをつなぎ、awk で特定の列だけを取り出す
  • sort | uniq -c | sort -rn で「値ごとの件数を多い順に」数える
  • awk の条件式($9 == 404)と集計(s += $10)を使う
  • 結果をファイルに保存し、再実行できるスクリプト report.sh にまとめる
前提知識:
  • ターミナルで ls / cat / cd を使ったことがある
完了条件:
  • status_counts.txt / top_ips.txt / not_found_paths.txt / bytes_total.txt が期待どおりの内容で作成されていること
  • report.sh を実行し直すと 3 つの集計ファイルが同じ内容で再生成されること

ラボの構成

  1. 1ブラウザ IDE を開いてログを眺める
  2. 2ステータスコード別の件数を数える
  3. 3アクセスの多い IP 上位 5 件を出す
  4. 4404 になったパスを数える
  5. 5転送バイト数の合計を出す
  6. 6スクリプトにまとめる
  7. 7判定を実行する
  8. 8発展(任意)と考察

詳細な手順は、ラボ開始後に画面内のガイドとして表示されます。

手順のプレビュー(最初のステップ)

1. ブラウザ IDE を開いてログを眺める

  • ラボ画面の ブラウザ IDE を開く をクリックし、表示されているパスワードでサインインする
  • README.md を開いて課題を読み、Terminal → New Terminal でターミナルを開く
  • ログの行数と先頭 3 行を確認する
wc -l access.log
head -3 access.log
  • 1 行が IP - - [日時] "メソッド パス HTTP/1.1" ステータス バイト数 "-" "ユーザーエージェント" の形であることを確認する
> 注: 空白区切りで数えると、1 列目が IP、7 列目がパス、9 列目がステータスコード、10 列目が転送バイト数です。awk '{print $9}' access.log | head のように「列を取り出して先頭だけ見る」を繰り返して当たりを付けます。
残り 7 セクションの手順は、ラボを開始すると画面内に表示されます

構成図

構成図

参考リソース

このラボが対応する試験の模擬問題集

本番形式の問題で理解度を確認できます。各試験とも先頭 15 問は無料です。

AZ-104Azure Administrator練習テスト 2 回・全 160 問