CloudFrontのログに迫る!

記事タイトルとURLをコピーする

こんにちは、営業部の中嶋(@mnakajima18)です。

みなさん、AWSにはCloudFrontというCDNのサービスがあることをご存じでしょうか。
世界中のエッジロケーションに静的なオリジナルコンテンツのキャッシュを置くことで、コンテンツを高速に配信させたり、アクセス負荷を分散させたりするときに非常に活用できます。
先日、2012/2/2(木)には新しい2つのエッジロケーション、ミラノ(イタリア)と大阪が追加され、合計26ヶ所の地域にエッジロケーションが配置されました。
今回は、ますます熱くなっているCloudFrontのログについて詳しく説明していきたいと思います。

今回のアジェンダ

  1. CloudFrontのログ
  2. CloudFrontのログフォーマットの詳細
  3. エッジロケーションの略称
  4. まとめ

1. CloudFrontのログ

CloudFrontのログの取得は、簡単に説明しますと以下の流れで設定できます。

(1) S3にログを取得できるバケットを用意する
(2) CloudFrontにログを取得するよう設定する
(3) ログの保存場所は1.で作成したS3のバケットを指定する

これで完了です。

しばらくするとログがS3に取得されます。

では、どのようにログは取得されるのかというと、以下のように1アクセス毎に取得されています。

#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
2012-02-08 10:00:54 SFO5 356 134.180.242.21 GET xxxxxxxxxxxxxxx.cloudfront.net /nakajimacf/test/nyaozane.gif 304 http://mnakjima18.com/test/testmn
Mozilla/4.0%20(compatible;%20MSIE%207.0;%20Windows%20NT%206.0;%20SLCC1;%20.NET%20CLR%202.0.50727;%20Media%20Center%20PC%205.0;%20eSobiSubscriber%202.0.4.16;%20.NET%20CLR%203.0.30729;%20InfoPath.1;%20.NET%20CLR%203.5.30729) -

1つのgzipファイルに複数のアクセスログが書き込まれています。
さらに複数のgzipファイルに分割されるのですが、分割には特に明確な基準はないそうです。

2. CloudFrontのログフォーマットの詳細

CloudFrontのログにはフィールド名も記載されていますので、まとめてみました。

詳しくは以下の内容となっています。

項目 ログ 説明
date 2012/2/8 日付
time 10:00:54 時刻
x-edge-location SFO5 エッジロケーションの略称 (3文字コード+数字)
sc-bytes 356 サーバから送られたバイト数
c-ip 134.180.242.21 クライアントのIP
cs-method GET HTTPアクセスのメソッド (クライアントが実行した処理)
cs(Host) xxxxxxxxxxxxxxx.cloudfront.net CloudFrontのドメイン名
cs-uri-stem /nakajimacf/test/nyaozane.gif アクセスされたリソース (コンテンツURI)
sc-status 200 HTTP関連の処理の状態
cs(Referer) http://mnakjima18.com/test/testmn リファラ。ユーザが利用した直前のページ
cs(User-Agent) Mozilla/5.0%20(Windows;%20U;%20 Windows%20NT%206.0;%20ja;%20rv :1.9.2.26)%20Gecko/20120128%20 Firefox/3.6.26 ユーザーエージェント (クライアントが利用したブラウザ)
cs-uri-query - クライアントが実行しようとしたクエリ

項目の頭に記載されているsやcは以下のような意味です。

プレフィックス 意味
s- サーバの処理
c- クライアントの処理
cs- クライアントからサーバへの処理
sc- サーバからクライアントへの処理

3. エッジロケーションの略称

ログフォーマットにありましたエッジロケーションは3文字の英字+数字で表現されています。
これだけではどの表現がどの地域かわかりません。
確認しましたところ、こちらのフォーラムに回答がありました。(2011/10現在)

https://forums.aws.amazon.com/message.jspa?messageID=184630

まとめてみますと、以下のようになっています。

<アメリカ>

略称 地域
DFW3 テキサス州ダラス/フォートワース(Dallas/Fort Worth, TX)
EWR2 ニュージャージー州ニューアーク(Newark, NJ)
IAD2 バージニア州アッシュバーン(Ashburn, VA)
JAX1 フロリダ州ジャクソンビル(Jacksonville, FL)
JFK1 ニューヨーク州ニューヨーク1(New York, NY)
不明 ニューヨーク州ニューヨーク2(New York, NY)
LAX1 カリフォルニア州ロサンゼルス(Los Angeles, CA)
MIA3 フロリダ州マイアミ(Miami, FL)
SEA4 ワシントン州シアトル(Seattle, WA)
SFO4 カリフォルニア州パロアルト1(Palo Alto, CA)
不明 カリフォルニア州パロアルト2(Palo Alto, CA)
STL2 ミズーリ州セントルイス(St. Louis, MO)
不明 カリフォルニア州サンノゼ(San Jose, CA)
不明 インディアナ州サウスベンド(South Bend, IN)

<ヨーロッパ>

略称 地域
AMS1 アムステルダム(Amsterdam)
ARN1 ストックホルム(Stockholm)
CDG3 パリ(Paris)
DUB2 ダブリン(Dublin)
FRA2 フランクフルト(Frankfurt)
LHR3 ロンドン(London)
不明 ミラノ(Milano)

<アジア>

略称 地域
HKG1 香港(Hongkong)
NRT4 東京(Tokyo)
SIN2 シンガポール(Singapore)
不明 大阪(Osaka)

<サンパウロ>

略称 地域
GRU1 サンパウロ(Sao Paulo)

ところどころ不明となっているのは2011/10までは20ヶ所でしたので、あとから追加された地域はまだ略称一覧にありませんでした。

ところが、当社で取得しましたログの中に一覧にはないエッジロケーションの略称が見つかりました。

SFO5、JFK5、IND6、MXP4、NRT52

これらはあとから追加された地域かと思います。

エッジロケーションの略称はIATA空港コードから採用しているとのことなので、以下のように予想してみました。
<追加エッジロケーション略称予想>

略称 地域
SFO5 カリフォルニア州パロアルト2(Palo Alto, CA)※
JFK5 ニューヨーク州ニューヨーク2(New York, NY)※
IND6 インディアナ州サウスベンド(South Bend, IN)
MXP4 ミラノ(Milano)
NRT52 大阪(Osaka)

※ カリフォルニア州パロアルトとニューヨーク州ニューヨークは2ヶ所ずつあります。

カリフォルニア州サンノゼの略称は、取得されたログの中になかったので不明ですが、おそらくカリフォルニア州サンノゼにあるライド=ヒルビュー空港の「RHV」がつくのではないかと予想しています。

4. まとめ

今回はCloudFrontのログフォーマットを詳しく見ていきましたが、アクセスしてきたエッジロケーションの情報が取得できるなどログ解析の幅が広がりそうです。

当社ではCloudFrontを使った「爆速ホスティング」という簡単にCDNのホスティングが開始できるサービスがあります。
「爆速ホスティング」の主な特徴は3つあります。

  1. FTPでコンテンツアップロードできる
  2. 環境づくりが簡単にできる(爆速ホスティングの管理画面からGUIで設定)
  3. キャッシュクリアが速い(通常のCloudFrontでは最短1時間かかるところ、15分で完了)

いつも使っているFTPクライアントで手軽に利用したい、頻繁にコンテンツ更新が行われるので早く反映したい、といったご要望にお応えできるサービスです。
現在は標準でログ解析のサービスは行なっていないのですが、今回の内容を元にさらに機能追加していけるよう精進していきますので、ご期待ください。