ELBがアクセスログを出力できるようになりました!
はじめに
ついにELBがアクセスログを出力できるようになりました!(Elastic Load Balancing Announces Access Logs)
ということでやってみました!
設定
[Load Balancers]画面を開き、設定したいELBを選択します。画面下部の[Description]タブの一番下に[Access Logs]という項目があります!
なおこの項目は新しいManagement Consoleでしか表示されません。以前のManagement Consoleを使用されている場合は、画面右上に青い吹き出しのようなアイコンが表示されていますので、クリックし「Try the new design」の[Click here]リンクをクリックすると、新しいデザインのManagement Consoleに切り替わります。
さて、[Access Logs]の[Edit]リンクをクリックすると以下の画面が表示されます。
- Enable Access Logs ... アクセスログ取得を有効にする場合はチェックします。
- Interval ... ログ出力間隔です。5分と60分で選択出来ます。
- S3 Location ... アクセスログを保存するS3の場所を指定します。「バケット/ディレクトリ」の形式で指定します(例:mylb-access-log/logdir)
- Create the location for me ... S3 Locationを自動作成したい場合はチェックします。
既存の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のバケットに年、月、日のディレクトリが作成され、アクセスログが保存されます。
内容はこんな感じです。
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" |