注目の記事

ELBがアクセスログを出力できるようになりました!

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

ついにELBがアクセスログを出力できるようになりました!(Elastic Load Balancing Announces Access Logs)

ということでやってみました!

設定

[Load Balancers]画面を開き、設定したいELBを選択します。画面下部の[Description]タブの一番下に[Access Logs]という項目があります!

elb11

なおこの項目は新しいManagement Consoleでしか表示されません。以前のManagement Consoleを使用されている場合は、画面右上に青い吹き出しのようなアイコンが表示されていますので、クリックし「Try the new design」の[Click here]リンクをクリックすると、新しいデザインのManagement Consoleに切り替わります。

elb2

さて、[Access Logs]の[Edit]リンクをクリックすると以下の画面が表示されます。

  • Enable Access Logs ... アクセスログ取得を有効にする場合はチェックします。
  • Interval ... ログ出力間隔です。5分と60分で選択出来ます。
  • S3 Location ... アクセスログを保存するS3の場所を指定します。「バケット/ディレクトリ」の形式で指定します(例:mylb-access-log/logdir)
  • Create the location for me ... S3 Locationを自動作成したい場合はチェックします。

elb3

 

既存のS3バケットに出力したい場合は、バケットポリシーを設定し、ELBがs3:PutObjectの権限を持つように設定する必要があります。設定方法についてはConfigure an Amazon S3 Bucket for Storing Access Logsに詳細な記載があります。ELBのElastic Load Balancing Account IDなどもこちらに書いてあります

[Create the location for me]にチェックしている場合はManagement Consoleがこんな風に良い感じに設定してくれるので楽です。

{
	"Version": "2012-10-17",
	"Id": "AWSConsole-AccessLogs-Policy-1234567890",
	"Statement": [
		{
			"Sid": "AWSConsoleStmt-1234567890",
			"Effect": "Allow",
			"Principal": {
				"AWS": "arn:aws:iam::1234567890:root"
			},
			"Action": "s3:PutObject",
			"Resource": "arn:aws:s3:::my-elb-log/AWSLogs/1234567890/*"
		}
	]
}

出力してみる

S3のバケットに年、月、日のディレクトリが作成され、アクセスログが保存されます。

elb4

内容はこんな感じです。

2014-03-07T07:25:38.285777Z elber 130.0.237.XX:37522 172.31.4.218:80 0.000066 0.00105 0.000037 404 404 0 570 "GET http://54.249.27.XX:80/actus4/ HTTP/1.1"
2014-03-07T07:26:43.731149Z elber 77.50.22.XXX:53477 172.31.4.218:80 0.000053 0.000866 0.000053 200 200 0 10 "GET http://54.249.27.XX:80/ HTTP/1.0"
2014-03-07T07:26:44.410747Z elber 77.50.22.XXX:53656 172.31.4.218:80 0.000052 0.000853 0.000039 404 404 0 168 "GET http://54.249.27.XX:80/foltia/ HTTP/1.0"
2014-03-07T07:26:45.084730Z elber 77.50.22.XXX:53839 172.31.4.218:80 0.000061 0.000874 0.000035 404 404 0 168 "GET http://54.249.27.XX:80/epgrec/do-record.sh HTTP/1.0"
2014-03-07T07:28:12.386207Z elber 189.206.75.XX:64289 172.31.4.218:80 0.000062 0.000924 0.000035 404 404 0 168 "GET http://54.249.27.XX:80/manager/html HTTP/1.1"

フォーマットはドキュメントに記載があります。項目としてはほぼ過不足無い状態なので、アクセス解析ソフトに突っ込むのも苦労無さそうですね。

項目名 内容 サンプル値
timestamp クライアントからアクセスされた時間。UTC時間であり、 ISO 8601フォーマットで記録されます。 2014-02-15T23:39:43.945958Z
elb ELBの名前。 my-test-loadbalancer
client:port クライアントのIPアドレスとポート番号。 192.168.131.39:2817
backend:port ELBによって通信が振り分けられたインスタンスのIPアドレスとポート番号。これによりどのサーバに振り分けられたのかが解ります。 10.0.0.0:80
request_processing_time ELBがクライアントからリクエストを受けてからインスタンスにリクエストを送信するまでの時間。 0.000073
backend_processing_time ELBがインスタンスにリクエストを送信し、インスタンスからレスポンスが戻ってくるまでの時間。 0.001048
response_processing_time ELBがインスタンスからレスポンスを受け取ってから、クライアントにレスポンスを返すまでの時間。 0.000057
elb_status_code ELBのレスポンスステータスコード。 200
backend_status_code ELBがリクエストを送信したインスタンスのレスポンスステータスコード。 200
received_bytes 受信したリクエストのサイズ(bytes) 0
sent_bytes 送信したリクエストのサイズ(bytes) 29
"request" クライアントからのリクエスト。 "GET http://www.example.com:80/ HTTP/1.1"

まとめ