今日はWebサーバにおけるアクセス解析のお話です。
Webサーバ運用時に切っても切り離せないのが、
アクセスログの解析ですが、障害時にはさくさく調査して原因を解明しないといけないので、
ある程度テンプレを用意しているのですが、今回はそれの一部を公開したいと思います。
アクセス数集計
- 分単位での集計
ionice -c2 -n7 nice -n19 egrep 'TIME' log | egrep -v "除外したいIP" | awk '{print $4}'| cut -c 2-18 | sort | uniq -c
- 10分単位での集計
ionice -c2 -n7 nice -n19 egrep 'TIME' log | egrep -v "除外したいIP" | awk '{print $4}'| cut -c 2-17 | sort | uniq -c
- Apache %D(リクエスト処理時間ms)
ionice -c2 -n7 nice -n19 egrep 'TIME' log | egrep -v "除外したいIP" | awk '{print $NF,$0}'| sort -nr
- Apache %D 時間別統計
ionice -c2 -n7 nice -n19 egrep "TIME" log | egrep -v '除外したいIP' | awk '$NF >= 2000000{ print $4}' | cut -c2-18 | sort -n | uniq -c
- アクセス元IPを集計
ionice -c2 -n7 nice -n19 grep '時刻' log | egrep -v "除外したいIP" | awk '{print $1}' | sort -n | uniq -c | sort -nr
ionice -c2 -n7 nice -n19 grep '時刻' log | egrep -v "除外したいIP" | awk '{print $1}' | cut -d: -f2 | sort -n | uniq -c | sort -nr
- アクセス先のドメインを集計
ionice -c2 -n7 nice -n19 grep "時刻" log | egrep -v "除外したいIP" | awk '{print $1}' | cut -d: -f1 | sort -n | uniq -c | sort -nr
- アクセス先URIを集計
ionice -c2 -n7 nice -n19 grep '時刻' log | egrep -v "除外したいIP" | awk '{print $7}' | sort -n | uniq -c
- リファラーを集計
ionice -c2 -n7 nice -n19 grep '時刻' log | egrep -v "除外したいIP" | cut -d\" -f4 | sort | uniq -c
- User-Agentを集計
ionice -c2 -n7 nice -n19 egrep '時刻' log | egrep -v "除外したいIP" |awk -F\" '{print $6}' | sort | uniq -c | sort -nr
- UAを集計
ionice -c2 -n7 nice -n19 grep '時刻' log | egrep -v "除外したいIP" | cut -d\" -f6 | sort | uniq -c
おまけ
基本的には上記のワンライナーを使えば集計できるのですが、サービスや設定によっては使えない場合があります。
なので、そういった場合は随時コードを調整する必要があります。 そういった時に使えるのが下記のコマンドです。
cut 指定した文字で切り取る
-d '区切り文字' 区切り文字の指定
-f 数値 フィールド(場所)の指定
awk 空白単位でログを分割
'{print $数値}' 何番目の空白か
sort 並べ替え
-n 整数順に並べる
-r 順序を反転する
uniq 集計したログをまとめる
-c 同じものをまとめてカウントする