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: 重複している行を数えるコマンド

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

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

 
応用編として、sortuniq -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 サイトの不正アクセス防止