share facebook facebook twitter menu hatena pocket slack

2011.07.26 TUE

AWStatsでCloudFrontのログを解析

鈴木 宏康

WRITTEN BY 鈴木 宏康

前回、CloudFrontのログとAWStatsを使ったログのマージ&ソート(日付)について紹介しましたが、引き続き、AWStatsでの解析を試してみたいと思います。

まずはじめに、設定ファイルを作成して、

$ su -
Password:
# cd /opt/local/etc/awstats/
# cp awstats.model.conf awstats.cloudfront.conf

下記のように設定項目を指定します。

LogFile="/opt/local/www/awstats/tools/logresolvemerge.pl /Users/suzuki/Temp/*.gz |"
LogFormat="%time2 %cluster %bytesd %host %method %virtualname %url %code %referer %ua %query"
LogSeparator="t"
SiteDomain="dhisjetezncwd.cloudfront.net"
HostAliases="dhisjetezncwd.cloudfront.net"
DNSLookup=1
ShowClusterStats=1

そして実行すると解析され、結果がawstats.plと同じディレクトリ内にawstats042011.cloudfront.txtのようなファイルとして出力されます。

# /opt/local/www/awstats/cgi-bin/awstats.pl -config=cloudfront
Create/Update database for config "/opt/local/etc/awstats/awstats.cloudfront.conf" by AWStats version 6.9 (build 1.925)
From data in log file "/opt/local/www/awstats/tools/logresolvemerge.pl /Users/suzuki/Dropbox/suz-lab/common/tmp/log/*.gz |"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Phase 2 : Now process new records (Flush history on disk after 20000 hosts)...
Jumped lines in file: 0
Parsed lines in file: 135
 Found 0 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 135 new qualified records.

ここでは設定項目がポイントになるので、一つずつ説明していきます。

○LogFile

LogFile="/opt/local/www/awstats/tools/logresolvemerge.pl /Users/suzuki/Temp/*.gz |"

ログファイルを指定します。
ここでは下記のような複数のCloudFrontのログファイルをマージする必要があるので、
CloudFrontのログとAWStatsを使ったログのマージ&ソート(日付)の内容を反映した形にします。

○LogFormat

LogFormat="%time2 %cluster %bytesd %host %method %virtualname %url %code %referer %ua %query"

ログのフォーマットを指定します。
実際のCloudFrontのログファイルは、下記の通りです。
(詳しくはLog File Formatを参考にして下さい)

#Version: 1.0
#Fields: date time x-edge-location sc-bytes c-ip cs-method cs(Host) cs-uri-stem sc-status cs(Referer) cs(User-Agent) cs-uri-query
2010-07-20 10:05:00 NRT4 570 219.117.209.225 GET dhisjetezncwd.cloudfront.net /img/test.jpg 304 - Mozilla/5.0%20(Macintosh;%20U;%20Intel%20Mac%20OS%20X%2010_6_4;%20en-US)%20AppleWebKit/533.4%20(KHTML,%20like%20Gecko)%20Chrome/5.0.375.99%20Safari/533.4 -
2010-07-20 10:05:00 NRT4 872 219.117.209.225 GET dhisjetezncwd.cloudfront.net /favicon.ico 404 - Mozilla/5.0%20(Macintosh;%20U;%20Intel%20Mac%20OS%20X%2010_6_4;%20en-US)%20AppleWebKit/533.4%20(KHTML,%20like%20Gecko)%20Chrome/5.0.375.99%20Safari/533.4 -

そして次のようにマッピングする必要があります。

date time       : %time2       : タイムスタンプ (yyyy-mm-dd hh:mm:ss)
x-edge-location : %cluster     : 複数マシンを利用している場合のマシンID
sc-bytes        : %bytesd      : レスポンスのバイト数
c-ip            : %host        : クライアントのIP
cs-method       : %method      : HTTPメソッド (GET/POST/...)
cs(Host)        : %virtualname : バーチャルホスト名
cs-uri-stem     : %url         : アクセスパス
sc-status       : %code        : ステータスコード
cs(Referer)     : %referer     : リファラー
cs(User-Agent)  : %ua          : User Agent (IE/Firefox/...)
cs-uri-query    : %query       : Query String (アクセスパスの?の後ろ)

※ここでは、どのエッジサーバにアクセスされたかが記録される
x-edge-locationに%clusterを割り当ててみました。

○LogSeparator

LogSeparator="t"

CloudFrontのログはタブ区切りなので、上記のように指定します。

○SiteDomain / HostAliases

SiteDomain="dhisjetezncwd.cloudfront.net"
HostAliases="dhisjetezncwd.cloudfront.net"

解析対象のドメイン(ホスト)名を指定しています。

○DNSLookup

DNSLookup=1

IPアドレスの名前解決を行います。(行わない場合は0にします)

○ShowClusterStats

ShowClusterStats=1

クラスタ(%cluster)に関する統計情報を表示します。
実際に出力結果(awstats042011.cloudfront.txt)を確認すると、

# Cluster ID - Pages - Hits - Bandwidth
BEGIN_CLUSTER 7
JFK1 1 2 871
LAX1 4 4 5285
AMS1 2 2 3546
STL2 2 2 3546
MIA3 3 4 4417
FRA2 114 114 118076
NRT4 7 7 11556
END_CLUSTER
...

上記のように、エッジサーバごとの統計も確認できることがわかります。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら

鈴木 宏康

鈴木 宏康

愛知県生まれ。東京工業大学大学院修士課程修了。在学時より、ベンチャー企業でインターネットに関する業務に携わり、現在はクラウド(主にAmazon Web Services)上での開発・運用を軸とした事業の、業務の中心として活躍。