Apacheのアクセスログを解析するにあたって、便利なコマンドとその例文。
使うときは急ぐ場合が多いのに、たまにしか使わないからすぐ忘れる…。
Windowsで使う場合はCygwin必須。
1.ログの“何か”を基準に並べ替えて出力する。
【コマンド例】
$ cat /opt/nginx/logs/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
【出力結果】
1900401 10.21.11.21
64325 10.21.62.40
11434 101.155.17.53
518 101.155.17.78
【補足】
awk'{print $1}’の部分で、並べ替え対象のフィールドを指定している。
$1の数字はログに含まれる行の何番目のフィールド(半角スペース区切りで)かを指定している。
Apacheのログでよく対象にすると思われるフィールドは以下の通り。
・1 = アクセス元のIP
・4 = アクセス日時
・8 = アクセス対象
・12 = リファラ
ちなみに$0は行全体を指す。
2.Grepいろいろ
・「検索文字列」を含む行を抽出
grep -i "検索文字列" hogehoge.log | less
・「検索文字列」を含まない行を抽出
grep -v "検索文字列" hogehoge.log | less
・-c オプションで結果の件数を出力
grep -c "検索文字列" hogehoge.log
・パイプでつなげて複数条件を指定
(検索文字列を含んだ行のうち、hoge.htmlを含まない結果を出力)
grep -i "検索文字列" hogehoge.log | grep -v "hoge.html" | less
パイプでlessに渡すと結果を表示。
リダイレクタでファイルを指定すればファイルに書き出す。
なお、Cygwinなどでファイルパスを指定する場合、パスのセパレータはwindowsでも\ではなく/でOK。