Apache アクセスログの解析手順と便利コマンド

サーバー設定

Apacheのアクセスログを解析する際に便利なコマンドを解説します。
CentOS や Ubuntu であれば、次のような操作がコマンドだけで可能です。

  • 特定の条件で絞り込む
  • 必要なカラムのみを抜き出す
  • 並べ替えや集計を行う



grep でアクセスログを検索

ログを検索する際の基本となるコマンドです。
指定したキーワードが含まれる行 だけをピックアップすることができます。

例えば 404 エラーとなったログだけを抽出する場合は、以下のコマンドとなります。
アクセスログの格納場所はサーバーによって異なるため、適宜修正してください。

$ grep "404" /var/log/httpd/access_log

 
特定のIPアドレスを抽出したい場合も、grep コマンドで絞り込めます。

$ grep "11.22.33.44" /var/log/httpd/access_log

awk でアクセスログの切り取り

アクセスログ1行の中から、必要な部分だけを切り出せるコマンドです。
以下のアクセスログを例として説明します。

123.45.67.89 - - [25/Jul/2018:20:26:04 +0900] "GET /hoge HTTP/1.1" 200 103 "-" "Mozilla/5.0"
111.22.33.44 - - [25/Jul/2018:20:29:31 +0900] "GET /fuga HTTP/1.1" 301 103 "-" "Mozilla/5.0"

 
IP アドレスだけを抽出する場合は以下のコマンドです。
分かりづらいですが $1 で1番目の列を指定して表示しています。

$ awk '{print $1}' access_log
123.45.67.89
111.22.33.44

 
同様に、レスポンスコードだけを抽出したい場合は以下のコマンドです。
スペース区切りで数えるため、9列目を指定すれば OK です。

$ awk '{print $9}'
200
301

sort, uniq, wc でアクセスログを集計

最後は、集計に便利な3つのコマンドを紹介します。

  • wc -l: 行数を数えるコマンド
  • sort: テキストを並べ替えるコマンド
  • uniq -c: 重複している行を数えるコマンド

 
grep や awk で抽出したログと組み合わせると、容易に集計できます。
以下は、特定IPアドレスからのアクセスを数える例です。(結果: 31行)

$ grep "11.22.33.44" /var/log/httpd/access_log | wc -l
31

 
応用編として、sort と uniq -c を組み合わせると更に便利になります。
以下のコマンドは、ステータスコードごとに回数を集計しています。

$ awk '{print $9}' /var/log/access_log | sort | uniq -c
422 200
 35 301
 19 404

まとめ

Apacheのアクセスログを集計する方法とコマンドを解説しました。
grep, awk, sort, uniq, wc は使う機会も多く、覚えておいて損はないコマンドです。

Linux のコマンド操作を活用し、便利で楽にアクセスログを集計してみてください。

【関連記事】
⇒ curl の便利なオプションを解説
⇒ JSON の整形や加工に便利な jq コマンド
⇒ Apache でパスワードによるアクセス制限
⇒ file, strings, zipinfo でファイルを調査する
⇒ AWS WAF で DoS 攻撃をブロックする
⇒ Web サイトの不正アクセス防止