2014年3月7日金曜日

ELBってなんじゃ?(アクセスログがやってきた)



ELBにアクセスログ機能が搭載されたので、試してみました。

まず、AWSコンソールのELBのの画面をみてみますが、ここで、古いバージョンのコンソールだとアクセスログの設定ができないので、ヘッダ上部のお知らせアイコンから新しいバージョンに切り替えます。




任意のELBを選択して、下部ペインのDescriptionタブの最下段に、「Access Logs」という項目が追加されているのが分かります。





最初はDisabledになっています。Editのリンクを押下すると、以下のようなダイアログが表示されます。



ここで、「Enable Access Logs」にチェックを入れ、
  • Interval:ログ出力間隔(現状5分か60分)
  • S3 Location:ログ出力先のS3ロケーション(Create the location for meをチェックすると自動でつくられる)
を入力し、「Save」をクリックします。



しばらくすると、指定したS3のロケーションに、ログが出力されます。




中身をみてみると、以下のようになっています。
2014-03-06T23:50:37.819662Z manage 54.248.248.218:60123 10.156.231.23:80 0.00008 0.002195 0.000074 403 403 0 5039 "GET https://mng.cloudpack.jp:443/ HTTP/1.1"
2014-03-06T23:54:42.332009Z memory 219.117.233.241:43172 10.156.231.23:80 0.000068 2.234742 0.000065 200 200 0 129832 "GET https://memory.cloudpack.jp:443/cloudpack/admin/account HTTP/1.1"
2014-03-06T23:54:45.898722Z memory 219.117.233.241:43172 10.156.231.23:80 0.000069 0.142097 0.000058 200 200 0 766319 "GET https://memory.cloudpack.jp:443/cloudpack/admin HTTP/1.1"
2014-03-06T23:55:05.069736Z memory 219.117.233.241:43172 10.156.231.23:80 0.000082 0.767399 0.000083 200 200 0 129832 "GET https://memory.cloudpack.jp:443/cloudpack/admin/account HTTP/1.1"
2014-03-06T23:55:09.530026Z memory 219.117.233.241:43172 10.156.231.23:80 0.000078 0.701585 0.000067 200 200 0 133234 "GET https://memory.cloudpack.jp:443/cloudpack/admin/account/2 HTTP/1.1"
2014-03-06T23:55:11.639899Z memory 219.117.233.241:43172 10.156.231.23:80 0.000088 0.70764 0.000099 200 200 0 133341 "GET https://memory.cloudpack.jp:443/cloudpack/admin/account/3 HTTP/1.1"
2014-03-06T23:55:13.555633Z memory 219.117.233.241:43172 10.156.231.23:80 0.000076 0.698172 0.000095 200 200 0 131071 "GET https://memory.cloudpack.jp:443/cloudpack/admin/account/4 HTTP/1.1"
2014-03-06T23:55:15.414292Z memory 219.117.233.241:43172 10.156.231.23:80 0.000075 0.885828 0.00009 200 200 0 129831 "GET https://memory.cloudpack.jp:443/cloudpack/admin/account/1 HTTP/1.1"
2014-03-06T23:55:20.774540Z memory 219.117.233.241:43172 10.156.231.23:80 0.000075 0.68001 0.000083 200 200 0 23283 "GET https://memory.cloudpack.jp:443/cloudpack/admin/account/index?search=miura HTTP/1.1"
2014-03-06T23:55:25.478841Z memory 219.117.233.241:43172 10.156.231.23:80 0.000076 0.817105 0.000061 200 200 0 233574 "GET https://memory.cloudpack.jp:443/cloudpack/admin/account/doc/miura@cloudpack.jp HTTP/1.1"
2014-03-06T23:55:31.467146Z memory 219.117.233.241:43172 10.156.231.23:80 0.000072 0.142359 0.00011 200 200 0 766319 "GET https://memory.cloudpack.jp:443/cloudpack/admin HTTP/1.1"
2014-03-06T23:55:35.995594Z memory 219.117.233.241:43172 10.156.231.23:80 0.000077 0.768791 0.000101 200 200 0 129832 "GET https://memory.cloudpack.jp:443/cloudpack/admin/account HTTP/1.1"
2014-03-06T23:55:37.699927Z memory 54.248.248.218:36526 10.156.231.23:80 0.000064 0.001333 0.000062 403 403 0 5039 "GET https://memory.cloudpack.jp:443/ HTTP/1.1"


ログのフォーマットは、以下のような構成だそうです。
フィールド名説明
タイムスタンプクライアントにレスポンスを返したUTC時刻2014-02-15T23:39:43.945958Z
ELB名ELBの名前my-test-loadbalancer
クライアントポートリクエストしたクライアントのIP192.168.131.39:2817
バックエンドポートこのリクエストを処理したインスタンスのIP10.0.0.0.1
リクエスト処理時間ELBがリクエストをうけとってからインスタンスに渡すまでの経過時間(秒)0.000073
バックエンド処理時間インスタンスに渡してからレスポンスヘッダを返し始めるまでの経過時間(秒)0.001048
レスポンス処理時間ELBがインスタンスからレスポンスヘッダを受け取りクライアントにレスポンスヘッダを返し初めてからの経過時間(秒)
処理時間にはELBのキューイング時間とインスタンスへの接続要求時間も含まれています。
0.000057
ELBステータスコードELBからクライアントへ返されるHTTPステータスコード (HTTPのみ)200
バックエンドステータスコードインスタンスからELBへ返されるHTTPステータスコード (HTTPのみ)200
受信バイト数

クライアントからのリクエストのサイズ(バイト)
HTTPリクエストではボディのみでヘッダのサイズは含まれません
TCPリクエストではヘッダのサイズも含まれます
0
送信バイト数クライアントへのレスポンスのサイズ(バイト)
HTTPリクエストではボディのみでヘッダのサイズは含まれません
TCPリクエストではヘッダのサイズも含まれます
29
"リクエスト"
           
ダブルクォーテーションで囲まれたクライアントからのリクエスト行。フォーマットは
HTTPメソッド + プロトコル://ホスト:ポート + パス + HTTPバージョン

TPCリクエストでは"- - -"のようになります。
"GET http://www.example.com: 80/HTTP/1.1"


ELBは自動でスケールするので、漏れ無くロギングできるかどうかは怪しいところですが、簡単にアクセスログをとるには便利そうです。

以上です。