Application Load Balancer の接続ログ
Elastic Load Balancing は、ロードバランサーに送信されるリクエストの、詳細情報をキャプチャするアクセスログを提供します。各ログには、クライアントの IP アドレスとポート、リスナーポート、使用される TLS 暗号とプロトコル、TLS ハンドシェイクレイテンシー、接続ステータス、クライアント証明書の詳細、などの情報が含まれています。これらの接続ログは、リクエストパターンの分析や問題のトラブルシューティングに使用できます。
接続ログは、Elastic Load Balancing のオプション機能であり、デフォルトでは無効化されています。ロードバランサーの接続ログを有効にすると、Elastic Load Balancing はログをキャプチャし、圧縮ファイルとして指定した Amazon S3 バケット内に保存します。接続ログはいつでも無効にできます。
Amazon S3 のストレージコストは発生しますが、Amazon S3 にログファイルを送信するために Elastic Load Balancing が使用する帯域については料金は発生しません。ストレージコストの詳細については、Amazon S3 の料金
接続ログファイル
Elastic Load Balancing は各ロードバランサーノードのログファイルを 5 分ごとに発行します。ログ配信には結果整合性があります。ロードバランサーでは、同じ期間について複数のログが発行されることがあります。これは通常、サイトに高トラフィックがある場合に発生します。
接続ログのファイル名には次の形式を使用します。
bucket
[/prefix
]/AWSLogs/aws-account-id
/elasticloadbalancing/region
/yyyy
/mm
/dd
/conn_log.aws-account-id
_elasticloadbalancing_region
_app.load-balancer-id
_end-time
_ip-address
_random-string
.log.gz
- bucket (バケット)
-
S3 バケットの名前。
- prefix
-
(オプション)バケットのプレフィックス (論理階層)。指定するプレフィックスに文字列
AWSLogs
を含めることはできません。詳細については、「プレフィックスを使用してオブジェクトを整理する」を参照してください。 AWSLogs
-
指定したバケット名とオプションのプレフィックスの後に、
AWSLogs
で始まるファイル名部分が追加されます。 - aws-account-id
-
所有者の AWS アカウント ID。
- region
-
ロードバランサーおよび S3 バケットのリージョン。
- yyyy/mm/dd
-
ログが配信された日付。
- load-balancer-id
-
ロードバランサーのリソース ID。リソース ID にスラッシュ (/) が含まれている場合、ピリオド (.) に置換されます。
- end-time
-
ログ作成の間隔が終了した日時。たとえば、終了時間 20140215T2340Z には、UTC または Zulu 時間の 23:35~23:40 に行われたリクエストのエントリが含まれます。
- ip-address
-
リクエストを処理したロードバランサーノードの IP アドレス。内部ロードバランサーの場合、プライベート IP アドレスです。
- random-string
-
システムによって生成されたランダム文字列。
「」をプレフィックスとするログファイル名の例を次に示します。
s3://amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/elasticloadbalancing/us-east-2/2022/05/01/conn_log.123456789012_elasticloadbalancing_us-east-2_app.my-loadbalancer.1234567890abcdef_20220215T2340Z_172.160.001.192_20sg8hgm.log.gz
プレフィックスが付いていないログファイル名の例は次のようになります。
s3://amzn-s3-demo-logging-bucket/AWSLogs/123456789012/elasticloadbalancing/us-east-2/2022/05/01/conn_log.123456789012_elasticloadbalancing_us-east-2_app.my-loadbalancer.1234567890abcdef_20220215T2340Z_172.160.001.192_20sg8hgm.log.gz
必要な場合はログファイルを自身のバケットに保管できますが、ログファイルを自動的にアーカイブまたは削除するにように Amazon S3 ライフサイクルルールを定義することもできます。詳細については、Amazon Simple Storage Service ユーザーガイドの「オブジェクトのライフサイクルの管理」を参照してください。
接続ログエントリ
接続の試行では、毎回、接続ログファイルにエントリが含まれます。クライアントリクエストの送信方法は、接続が永続的か非永続的であるかによって決まります。非永続的接続には 1 つのリクエストがあり、その結果としてアクセスログと接続ログに 1 つのエントリが作成されます。永続的接続には複数のリクエストがあり、その結果としてアクセスログには複数のエントリが作成され、接続ログには 1 つのエントリが作成されます。
構文
接続ログのエントリには以下の形式が使用されます。
[timestamp] [client_ip] [client_port] [listener_port] [tls_protocol] [tls_cipher] [tls_handshake_latency] [leaf_client_cert_subject] [leaf_client_cert_validity] [leaf_client_cert_serial_number] [tls_verify_status]
以下は、接続ログのエントリのフィールドを順に示した表です。すべてのフィールドはスペースで区切られています。新しいフィールドが導入されると、ログエントリの最後に追加されます。予期していなかったログエントリの最後のフィールドは無視する必要があります。
フィールド | 説明 |
---|---|
timestamp |
ロードバランサーが接続を正常に確立できた/できなかった時間 (ISO 8601 形式)。 |
client_ip |
リクエストを送信したクライアントの IP アドレス。 |
client_port |
リクエストを送信したクライアントのポート。 |
listener_port |
クライアントリクエストを受信するロードバランサーリスナーのポート。 |
tls_protocol |
[HTTPS リスナー] ハンドシェイク中に使用される SSL/TLS プロトコル。このフィールドは、SSL/TLS 以外のリクエストでは |
tls_cipher |
[HTTPS リスナー] ハンドシェイク中に使用される SSL/TLS プロトコル。このフィールドは、SSL/TLS 以外のリクエストでは |
tls_handshake_latency |
[HTTPS リスナー] ハンドシェイクの正常な確立中に経過した時間の合計 (秒)。ミリ秒単位の精度で表示されます。次の場合、このフィールドは
|
leaf_client_cert_subject |
[HTTPS リスナー] リーフクライアント証明書のサブジェクト名。次の場合、このフィールドは
|
leaf_client_cert_validity |
[HTTPS リスナー] リーフクライアント証明書の有効性 (ISO 8601 形式の
|
leaf_client_cert_serial_number |
[HTTPS リスナー] リーフクライアント証明書のシリアル番号。次の場合、このフィールドは
|
tls_verify_status |
[HTTPS リスナー] 接続リクエストのステータス。この値は、接続が正常に確立された場合は |
conn_trace_id |
接続トレーサビリティ ID は、各接続を識別するために使用される一意の不透明 ID です。クライアントとの接続が確立されると、このクライアントからのその後のリクエストには、それぞれのアクセスログエントリにこの ID が含まれます。この ID は、接続ログとアクセスログ間のリンクを作成するための外部キーとして機能します。 |
エラー理由コード
ロードバランサーが接続を確立できない場合、ロードバランサーは接続ログに次のいずれかの理由コードを保存します。
コード | 説明 |
---|---|
|
クライアント証明書チェーンの最大深度を超えました |
|
クライアント証明書の最大サイズを超えました |
|
クライアント証明書が CA によって取り消されました |
|
CRL 処理エラー |
|
クライアント証明書は信頼されていません |
|
クライアント証明書はまだ有効ではありません |
|
証明書の有効期限が切れています |
|
クライアント証明書のタイプはサポートされていません |
|
クライアント証明書は無効です |
|
クライアント証明書の目的が無効です |
|
クライアント証明書がカスタムサーバー検証によって拒否されました |
|
マッピングされていないランタイム接続エラー |
ログエントリの例
以下は接続ログエントリの例です。
以下は、相互 TLS 検証モードがポート 443 で有効になっている HTTPS リスナーとの接続を確立するための、ログエントリの例です。
2023-10-04T17:05:15.514108Z 203.0.113.1 36280 443 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 4.036 "CN=amazondomains.com,O=endEntity,L=Seattle,ST=Washington,C=US" NotBefore=2023-09-21T22:43:21Z;NotAfter=2026-06-17T22:43:21Z FEF257372D5C14D4 Success
以下は、相互 TLS 検証モードがポート 443 で有効になっている HTTPS リスナーとの接続に失敗する、ログエントリの例です。
2023-10-04T17:05:15.514108Z 203.0.113.1 36280 443 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 - "CN=amazondomains.com,O=endEntity,L=Seattle,ST=Washington,C=US" NotBefore=2023-09-21T22:43:21Z;NotAfter=2026-06-17T22:43:21Z FEF257372D5C14D4 Failed:ClientCertUntrusted
接続ログファイルの処理
接続ログファイルは圧縮されます。Amazon S3 コンソールを使用してファイルを開くと、ファイルは解凍され、情報が表示されます。ファイルをダウンロードする場合、情報を表示するには解凍する必要があります。
ウェブサイトの需要が大きい場合は、ロードバランサーによって数 GB のデータ量のログファイルが生成されることがあります。このような大容量のデータは、行単位で処理できない場合があります。このため、場合によっては、並列処理ソリューションを提供する分析ツールを使用する必要があります。例えば、次の分析ツールを使用すると接続ログの分析と処理を行うことができます。
-
「Amazon Athena」は、Amazon S3 内のデータを標準 SQL を使用して簡単に分析できるインタラクティブなクエリサービスです。