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 サイトの不正アクセス防止