ログ解析用Linuxコマンド

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。