アクセスログを集計するコマンド

アクセスログの分析でアクセス数などを知りたい時、コマンドのみで簡易に集計する

環境

CentOS 7
Apache2.4.6

集計するファイル access_log

アクセスログの書式

123.☓☓☓.☓☓☓.☓☓☓ - - [1/Jan/2020:00:00:00 +0000] "GET / HTTP/1.1" 200 16 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/0.0.0.0 Safari/537.36"

リクエスト元IPアドレス - - [日時] "アクセスされたファイル" ステータスコード "-" "アクセスしてきたデバイスの情報"

これが何百個、何千個とずらーっと並んでる

集計

正常に応答しなかったログの抽出

# cat access_log | grep -v 200
☓☓☓.☓☓☓.☓☓☓.☓☓☓ - - [27/Feb/2020:00:00:00 +0000] "GET / HTTP/1.1" 404 13 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/0.0.0.0 Safari/537.36"
.
.

IPアドレスごとのアクセス数を求める

# cat access_log | cut -d ' ' -f 1 | sort | uniq -c
546 ☓☓☓.☓☓☓.☓☓☓.☓☓☓
134 ☓☓☓.☓☓☓.☓☓☓.☓☓☓
52  ☓☓☓.☓☓☓.☓☓☓.☓☓☓

特定のIPアドレスからのアクセス数を求める

# grep ☓☓☓.☓☓☓.☓☓☓.☓☓☓ access_log | wc -l
39

特定ファイルへのアクセス数を求める

# grep hoge.html access_log | wc -l
1234

特定の日の特定のIPアドレスからのアクセス数を求める

# cat access_log | grep 27/Feb | grep ☓☓☓.☓☓☓.☓☓☓.☓☓☓ | wc -l
11