Application Load Balancer の接続ログ - Elastic Load Balancing

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 リスナー] ハンドシェイクの正常な確立中に経過した時間の合計 (秒)。ミリ秒単位の精度で表示されます。次の場合、このフィールドは - に設定されます。

  • 受信リクエストが SSL/TLS リクエスト以外の場合。

  • ハンドシェイクが正常に確立されていない場合。

leaf_client_cert_subject

[HTTPS リスナー] リーフクライアント証明書のサブジェクト名。次の場合、このフィールドは - に設定されます。

  • 受信リクエストが SSL/TLS リクエスト以外の場合。

  • ロードバランサーリスナーが mTLS を有効して設定されていない場合。

  • サーバーがリーフクライアント証明書をロード/解析できない場合。

leaf_client_cert_validity

[HTTPS リスナー] リーフクライアント証明書の有効性 (ISO 8601 形式の not-before および not-after)。次の場合、このフィールドは - に設定されます。

  • 受信リクエストが SSL/TLS リクエスト以外の場合。

  • ロードバランサーリスナーが mTLS を有効して設定されていない場合。

  • サーバーがリーフクライアント証明書をロード/解析できない場合。

leaf_client_cert_serial_number

[HTTPS リスナー] リーフクライアント証明書のシリアル番号。次の場合、このフィールドは - に設定されます。

  • 受信リクエストが SSL/TLS リクエスト以外の場合。

  • ロードバランサーリスナーが mTLS を有効して設定されていない場合。

  • サーバーがリーフクライアント証明書をロード/解析できない場合。

tls_verify_status

[HTTPS リスナー] 接続リクエストのステータス。この値は、接続が正常に確立された場合は Success です。接続に失敗した場合、値は Failed:$error_code です。

conn_trace_id

接続トレーサビリティ ID は、各接続を識別するために使用される一意の不透明 ID です。クライアントとの接続が確立されると、このクライアントからのその後のリクエストには、それぞれのアクセスログエントリにこの ID が含まれます。この ID は、接続ログとアクセスログ間のリンクを作成するための外部キーとして機能します。

エラー理由コード

ロードバランサーが接続を確立できない場合、ロードバランサーは接続ログに次のいずれかの理由コードを保存します。

コード 説明

ClientCertMaxChainDepthExceeded

クライアント証明書チェーンの最大深度を超えました

ClientCertMaxSizeExceeded

クライアント証明書の最大サイズを超えました

ClientCertCrlHit

クライアント証明書が CA によって取り消されました

ClientCertCrlProcessingError

CRL 処理エラー

ClientCertUntrusted

クライアント証明書は信頼されていません

ClientCertNotYetValid

クライアント証明書はまだ有効ではありません

ClientCertExpired

証明書の有効期限が切れています

ClientCertTypeUnsupported

クライアント証明書のタイプはサポートされていません

ClientCertInvalid

クライアント証明書は無効です

ClientCertPurposeInvalid

クライアント証明書の目的が無効です

ClientCertRejected

クライアント証明書がカスタムサーバー検証によって拒否されました

UnmappedConnectionError

マッピングされていないランタイム接続エラー

ログエントリの例

以下は接続ログエントリの例です。

以下は、相互 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 を使用して簡単に分析できるインタラクティブなクエリサービスです。

  • Loggly

  • Splunk

  • Sumo logic