アクセスログ解析備忘録


今日は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 同じものをまとめてカウントする