先日、自分のサイトのアクセスログ解析をしてみました。
アクセスログはレンタルサーバ上の管理ツールで確認できるので、それをコピーしてローカル PC にテキストで保存します。
アクセスログは半月分で約 43000 行。
この中には画像ファイルやテキストファイルなどのアクセスも含まれるので、それらは除外したい。
また、各サーチエンジンのロボットも除外しないと、本当の一般ユーザーのアクセスがわかりにくい。
そんな格闘のある日・・・。
grepで必要な情報の抽出
今回、ログ解析には grep コマンドを利用します。
Perl で 1 行ずつ見ていった方が早いのかな?なんて悩んだりもしたけど grep で事足りるならそれでよし。
下記のコマンドで「.gif」を含む文字列の行を除外することができます。(grep の -v オプション)
1 | $ grep -v '.gif' [ファイル名] |
これをパイプで繋げば、複数の単語を除外できますが、それだとダサダサですね。
1 | $ grep -v '.gif' [ファイル名] | grep -v '.jpg' | grep -v '.png' |
除外リストの使用
grep の拡張版の egrep を使う方法もありますが、これも除外するワードの量次第といったところなので今回は却下。
ってことで、grep の -f オプションを利用して、マッチさせたくない単語をファイルに 1 行ずつ書いておきます。
1 2 3 4 5 6 7 8 9 10 11 12 | $ cat unmatch.txt (一部だけ表示) .jpg .jpeg .gif .ico .css .txt .rdf Googlebot Slurp msnbot |
あとは、このファイルを利用して抜き出します。
1 | $ grep -v -f unmatch.txt [ファイル名] |
さらに、この中から、各コンテンツごとにアクセス数を算出する場合は、Perl などのスクリプトでやった方が効率がいいですね。
とりあえず、ざっとログを解析するにはシェルの grep や awk で十分可能です。