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://my-bucket/my-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://my-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 リスナー] リーフクライアント証明書の有効性。not-afterISO 8601 形式で not-beforeおよび を使用します。このフィールドは、次の-場合に に設定されます。

  • 受信リクエストは 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 は、接続ログとアクセスログ間のリンクを作成するための外部キーとして機能します。

エラー理由コード

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

Code 説明

ClientCertMaxChainDepthExceeded

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

ClientCertMaxSizeExceeded

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

ClientCertCrlHit

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

ClientCertCrlProcessingError

CRL 処理エラー

ClientCertUntrusted

クライアント証明書が信頼されていない

ClientCertNotYetValid

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

ClientCertExpired

クライアント証明書の有効期限が切れている

ClientCertTypeUnsupported

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

ClientCertInvalid

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

ClientCertRejected

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

UnmappedConnectionError

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

ログエントリの例

接続ログエントリの例を次に示します。

以下は、ポート 443 で相互 TLS 検証モードが有効になっている 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

以下は、ポート 443 で相互 TLS 検証モードが有効になっている 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 のデータ量のログファイルが生成されることがあります。処理を使用して、このような大量のデータを line-by-line 処理できない場合があります。このため、場合によっては、並列処理ソリューションを提供する分析ツールを使用する必要があります。例えば、次の分析ツールを使用して接続ログを分析および処理できます。

  • 「Amazon Athena」は、Amazon S3 内のデータを標準 SQL を使用して簡単に分析できるインタラクティブなクエリサービスです。

  • Loggly

  • Splunk

  • Sumo logic