Apacheのcombinedログの解析
Apacheのアクセスログといえばcombinedログがメジャーなのかな?殺風景なログからも、見方を工夫すれば色々と情報を収集できたりする。
Contents
combinedログとは
まず、combinedログは次のような形式のログです。
config的に書くとこんな感じ。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
- %h:リモートホスト
- %l:リモートログ名(基本”-“になる)
- %u:リモートユーザ(Basic認証のユーザ)
- %t:リクエスト受付時刻
- %r:リクエストの最初の行
- %s:ステータス
- %{Referer}i:リファラ
- %{User-Agent}i:ユーザエージェント
1リクエストの処理時間を調べたければ最後に「%D」とか入れておくと良い。
実際のログはこんな感じで出力される。
118.86.194.71 - - [17/Aug/2011:23:04:03 +0900] "GET /home/name/category/web HTTP/1.1" 200 11815 "http://naoberry.com/home/name/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1"
ログの加工方法
ログフォーマットが決まっているので、工夫次第で目的に応じた情報が収集できます。
◆アクセスが多いリモートホストTOP10
awk '{print $1}' access_log | sort | uniq -c | sort -n | tail -5
◆時間ごとのアクセス数(時分)
awk '{print $4}' access_log|cut -f2,3 -d:|sort|uniq -c
◆時間ごとのアクセス数(時)
awk '{print $4}' access_log|cut -f2 -d:|sort|uniq -c
◆URLごとのアクセス数(URLパラメータは除外する)
awk '{print $7}' access_log | cut -f1 -d? | sort | uniq -c
◆500(Internal Server Error)が発生したURL
awk '$9==500{print $7}' access_log | cut -f1 -d? | sort | uniq -c
◆500(Internal Server Error)が発生した時間
awk '$9==500{print $4}' access_log | cut -f2,3 -d: | sort | uniq -c
ちなみにこのHPのここ3日間の時間ごとのアクセス数はこんな感じ。(すくなっ)※アクセス数 時刻 の順に並びます
# awk '{print $4}' access_log|cut -f2 -d:|sort|uniq -c 81 00 96 01 85 02 91 03 72 04 100 05 114 06 171 07 98 08 125 09 153 10 184 11 128 12 109 13 112 14 105 15 149 16 123 17 162 18 104 19 88 20 154 21
この記事へのコメントはこちら