[Shell] 最近よく使うApacheログのワンライナー解析

このところ、ログファイルの解析をよくやる場面が増えてます。

以前から、元々テキストファイルを扱うことが多いのですが、年末ってこともあるので、備忘として何個か載せておきます。

特定の IP からのアクセスだけを抽出

grep “^127.0.0.1” /var/log/httpd/access_log

上記から画像やら CSS やらへのアクセスを除外

grep “^127.0.0.1” /var/log/httpd/access_log | grep -ive “GET /.*\.\(css\|js\|jpg\|gif\|png\|swf\|ico\)\ HTTP”

tail と組み合わせる事で特定の IP からのアクセスをリアルタイムに監視

tail -f /var/log/httpd/access_log | grep “^127.0.0.1” | grep -ive “GET /.*\.\(css\|js\|jpg\|gif\|png\|swf\|ico\)\ HTTP”

アクセス元 IP の一覧

cat /var/log/httpd/access_log | cut -d ” ” -f 1 | sort | uniq

ユーザエージェントの一覧

cat /var/log/httpd/access_log | awk -F ‘”‘ ‘{ print $6 }’ | sort | uniq

主要なブラウザ毎のアクセス数

for UA in MSIE Firefox Chrome; do COUNT=`grep “$UA” /var/log/httpd/access_log | wc -l`; echo “$UA : $COUNT”; done

特定ファイルへのアクセス数を抽出

$ cat /var/log/httpd/access.log | grep favicon.ico | wc -l

特定のIPアドレスからのアクセスを抽出し CSS やらへのアクセスを除外し、さらにはbotも除外

grep “^127.0.0.1” access_log | grep -ive “GET /.*\.\(css\|js\|jpg\|gif\|png\|swf\|ico\|Baiduspider|server-status|Ask Jeeves|Yeti|Yahoo!Slurp|Mediapartners-Google|Googlebot|Plagger|Twiceler|Y!J-BSC|Feedfetcher-Google|AMZNKAssocBot|livedoor HttpClient|Fastladder FeedFetche|FreshReader)\ HTTP”

他にも多くのコマンドを使いますが、ワンライナーで出来ると便利なことが多く、即席での解析力を上げるという意味でも、ぜひ活用ください。

あとは…

主に、grepとawk中心なのですが。他には、sed、cut、sort、uniq、辺りもよく使ってます。その他の場面だと、Shell化してしまって、ループや日付でごにょごにょとやることも多いです。

恐らく、正規表現中心になると思うんですが、表記が割とバラバラなところもあるので、正規表現を使う場合は、それぞれの関数・環境でマニュアルはザッと目を通してくださいね!