アクセスログの分析でアクセス数などを知りたい時、コマンドのみで簡易に集計する
環境
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