

# リアルタイムのアクセスログを使用する
<a name="real-time-logs"></a>

CloudFront リアルタイムアクセスログを使用すると、ディストリビューションに対するリクエストの情報をリアルタイムで取得できます (ログはリクエストを受信してから数秒以内に配信されます)。リアルタイムのアクセスログを使用して、コンテンツ配信のパフォーマンスに基づいて監視、分析、アクションを実行できます。

CloudFront リアルタイムアクセスログは設定可能です。以下を選択することができます。
+ リアルタイムログの*サンプリング率* (リアルタイムのアクセスログ記録を受信するリクエストの割合) を選択できます。
+ ログレコードで受信する特定のフィールド。
+ リアルタイムログを受信する特定のキャッシュ動作 (パスパターン)。

CloudFront リアルタイムアクセスログは、Amazon Kinesis Data Streams で選択したデータストリームに配信されます。独自の [Kinesis データストリームコンシューマー](https://docs.aws.amazon.com/streams/latest/dev/amazon-kinesis-consumers.html)を構築することも、Amazon Data Firehose を使用してログデータを Amazon Simple Storage Service (Amazon S3)、Amazon Redshift、Amazon OpenSearch Service (OpenSearch Service)、またはサードパーティーのログ処理サービスに送信することもできます。

Kinesis Data Streams の使用料金に加えて、CloudFront でのリアルタイムアクセスログの料金が発生します。料金の詳細については、「[Amazon CloudFront の料金](https://aws.amazon.com/cloudfront/pricing/)」および「[Amazon Kinesis Data Streams の料金](https://aws.amazon.com/kinesis/data-streams/pricing/)」を参照してください。

**重要**  
ログは、すべてのリクエストを完全に課金するためのものではなく、コンテンツに対するリクエストの本質を把握するものとして使用することをお勧めします。CloudFront はベストエフォートベースでリアルタイムのアクセスログを提供します。特定のリクエストのログエントリが、リクエストが実際に処理されてからかなり後に配信されることも、(まれに) 一切配信されないこともあります。ログエントリをリアルタイムのアクセスログから省略すると、リアルタイムのアクセスログ内のエントリ数は AWS の請求と使用状況レポートに表示される使用量と一致しなくなります。

**Topics**
+ [リアルタイムのアクセスログ設定を作成および使用する](#create-real-time-log-config)
+ [リアルタイムのアクセスログ設定を理解する](#understand-real-time-log-config)
+ [Kinesis Data Streams コンシューマーを作成する](#real-time-log-consumer-guidance)
+ [リアルタイムのアクセスログのトラブルシューティング](#real-time-log-troubleshooting)

## リアルタイムのアクセスログ設定を作成および使用する
<a name="create-real-time-log-config"></a>

ディストリビューションに対して行われたリクエストに関する情報をリアルタイムで取得するには、リアルタイムのアクセスログ設定を使用できます。ログは、リクエストを受信してから数秒以内に提供されます。リアルタイムのアクセスログ設定は、CloudFront コンソール、AWS Command Line Interface (AWS CLI)、または CloudFront API を使用して作成できます。

リアルタイムのアクセスログ設定を使用するには、CloudFront ディストリビューションの 1 つ以上のキャッシュ動作にアタッチします。

------
#### [ Console ]

**リアルタイムのアクセスログ設定を作成するには**

1. AWS マネジメントコンソール にサインインし、[https://console.aws.amazon.com/cloudfront/v4/home?#/logs](https://console.aws.amazon.com/cloudfront/v4/home?#/logs) で CloudFront コンソールの [**Logs**] (ログ) ページを開きます。

1. **[リアルタイム設定]** タブを選択します。

1. **[設定を作成]** を選択します。

1. **[名前]** に、設定の名前を入力します。

1. **[サンプリングレート]** に、ログレコードを受信する対象のリクエストの割合を入力します。

1. **[フィールド]** で、リアルタイムのアクセスログで受信するフィールドを選択します。
   + すべての [CMCD フィールド](#CMCD-real-time-logging-fields)をログに含めるには、**[CMCD のすべてのキー]** を選択します。

1. **[エンドポイント]** で、リアルタイムのアクセスログを受信する 1 つ以上の Kinesis データストリームを選択します。
**注記**  
CloudFront のリアルタイムのアクセスログは、Kinesis Data Streams で指定したデータストリームに配信されます。リアルタイムのアクセスログを読み取って分析するには、独自の Kinesis データストリームコンシューマーを構築できます。Firehose を使用して、ログデータを Amazon S3、Amazon Redshift、Amazon OpenSearch Service、またはサードパーティーのログ処理サービスに送信することもできます。

1. **[IAM ロール]** で、**[新しいサービスロールを作成]** を選択するか、既存のロールを選択します。ただし、IAM ロールを作成するアクセス許可が必要です。

1. (オプション) **[ディストリビューション]** で、リアルタイムのアクセスログ設定にアタッチする CloudFront ディストリビューションとキャッシュビヘイビアを選択します。

1. **[設定を作成]** を選択します。

正常に終了すると、作成したリアルタイムのアクセスログ設定の詳細がコンソールに表示されます。

詳細については、「[リアルタイムのアクセスログ設定を理解する](#understand-real-time-log-config)」を参照してください。

------
#### [ AWS CLI ]

AWS CLI を使用してリアルタイムのアクセスログ設定を作成するには、**aws cloudfront create-realtime-log-config** コマンドを使用します。コマンドの入力パラメータは、コマンドライン入力として個別に指定せずに、入力ファイルを使用して指定できます。

**リアルタイムのアクセスログ設定を作成するには (入力ファイルを含む CLI)**

1. 次のコマンドを使用して、`rtl-config.yaml` コマンドのすべての入力パラメータを含む **create-realtime-log-config** という名前のファイルを作成します。

   ```
   aws cloudfront create-realtime-log-config --generate-cli-skeleton yaml-input > rtl-config.yaml
   ```

1. 先ほど作成した `rtl-config.yaml` という名前のファイルを開きます。ファイルを編集して、必要なリアルタイムのアクセスログ設定を指定し、ファイルを保存します。次の点に注意してください。
   + `StreamType` では、唯一の有効な値は、`Kinesis` です。

   リアルタイムロング設定の詳細については、「[リアルタイムのアクセスログ設定を理解する](#understand-real-time-log-config)」を参照してください。

1. 次のコマンドを使用して、`rtl-config.yaml` ファイルの入力パラメータを使用してリアルタイムのアクセスログ設定を作成します。

   ```
   aws cloudfront create-realtime-log-config --cli-input-yaml file://rtl-config.yaml
   ```

成功した場合、このコマンドの出力には、先ほど作成したリアルタイムのアクセスログ設定の詳細が表示されます。

**リアルタイムのアクセスログ設定を既存のディストリビューション (入力ファイル付き CLI) にアタッチするには**

1. 以下のコマンドを使用して、更新する CloudFront ディストリビューションのディストリビューション設定を保存します。*distribution\$1ID* をディストリビューションの ID に置き換えます。

   ```
   aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
   ```

1. 先ほど作成した `dist-config.yaml` という名前のファイルを開きます。ファイルを編集し、リアルタイムのアクセスログ設定を使用するように更新する各キャッシュ動作に次の変更を加えます。
   + キャッシュ動作で、`RealtimeLogConfigArn` という名前のフィールドを追加します。フィールドの値には、このキャッシュ動作にアタッチするリアルタイムのアクセスログ設定の ARN を使用します。
   + `ETag` フィールドの名前を `IfMatch` に変更します。ただし、フィールドの値は変更しないでください。

   完了したら、ファイルを保存します。

1. リアルタイムのアクセスログ設定を使用するようにディストリビューションを更新するには、次のコマンドを使用します。*distribution\$1ID* をディストリビューションの ID に置き換えます。

   ```
   aws cloudfront update-distribution --id distribution_ID --cli-input-yaml file://dist-config.yaml
   ```

成功した場合、コマンドの出力には、先ほど更新したディストリビューションの詳細が表示されます。

------
#### [ API ]

CloudFront API を使用してリアルタイムのアクセスログ設定を作成するには、[CreateRealtimeLogConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateRealtimeLogConfig.html) API オペレーションを使用します。これらの API コールで指定するパラメータの詳細については、「[リアルタイムのアクセスログ設定を理解する](#understand-real-time-log-config)」と、AWS SDK またはその他 API クライアントの API リファレンスドキュメントを参照してください。

リアルタイムのアクセスログ設定を作成したら、以下の API オペレーションのいずれかを使用してキャッシュ動作にアタッチできます。
+ 既存のディストリビューションのキャッシュ動作にアタッチするには、[UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) を使用します。
+ 新しいディストリビューションのキャッシュ動作にアタッチするには、[CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html) を使用します。

これらの API オペレーションの両方について、キャッシュ動作内で、`RealtimeLogConfigArn` フィールドにリアルタイムのアクセスログ設定の ARN を指定します。これらの API コールで指定するその他フィールドの詳細については、「[すべてのディストリビューション設定リファレンス](distribution-web-values-specify.md)」と、AWS SDK またはその他 API クライアントの API リファレンスドキュメントを参照してください。

------

## リアルタイムのアクセスログ設定を理解する
<a name="understand-real-time-log-config"></a>

CloudFront リアルタイムのアクセスログを使用するには、まずリアルタイムのアクセスログ設定を作成します。リアルタイムのアクセスログ設定には、受信するログフィールド、ログレコードの *サンプリングレート*、およびログを配信する Kinesis データストリームに関する情報が含まれます。

具体的には、リアルタイムのアクセスログ設定には、次の設定が含まれます。

**Contents**
+ [名前](#real-time-logs-name)
+ [サンプリングレート](#real-time-logs-sampling-rate)
+ [フィールド](#real-time-logs-fields)
+ [エンドポイント (Kinesis Data Streams)](#real-time-logs-endpoint)
+ [IAM ロール](#real-time-logs-IAM)

### 名前
<a name="real-time-logs-name"></a>

リアルタイムのアクセスログ設定を識別する名前。

### サンプリングレート
<a name="real-time-logs-sampling-rate"></a>

サンプリングレートは、リアルタイムのアクセスログレコードとして Kinesis Data Streams に送信されるビューワーリクエストの割合を決定する 1～100 の整数です。すべてのビューワーリクエストをリアルタイムのアクセスログに含めるには、サンプリングレートに 100 を指定します。リクエストデータの代表的なサンプルをリアルタイムのアクセスログに受信しながら、コストを削減するために、より低いサンプリングレートを選択することもできます。

### フィールド
<a name="real-time-logs-fields"></a>

各リアルタイムのアクセスログレコードに含まれるフィールドのリスト。各ログレコードには、最大 40 個のフィールドを含めることができます。使用可能なすべてのフィールドを受信するか、パフォーマンスのモニタリングと分析に必要なフィールドのみを受信するかを選択できます。

次のリストは、各フィールド名と、そのフィールドに保持される情報の説明を示しています。フィールドは、Kinesis Data Streams に配信されるログレコードに表示される順序で示されています。

フィールド 46～63 は、メディアプレーヤークライアントが各リクエストで CDN に送信できる[一般的なメディアクライアントデータ (CMCD)](#CMCD-real-time-logging-fields) です。このデータを使用して、メディアタイプ (オーディオ、動画)、再生速度、ストリーミング時間など、各リクエストを確認できます。これらのフィールドは、CloudFront に送信した場合にのみ、リアルタイムのアクセスログに表示されます。

1. **`timestamp`**

   エッジサーバーがリクエストへの応答を終了した日時。

1. **`c-ip`**

   リクエスト元のビューワーの IP アドレス (`192.0.2.183` または `2001:0db8:85a3::8a2e:0370:7334` など)。ビューワーが HTTP プロキシまたはロードバランサーを使用してリクエストを送った場合、このフィールドの値はプロキシまたはロードバランサーの IP アドレスです。`x-forwarded-for` フィールドも参照してください。

1. **`s-ip`**

   リクエストを処理した CloudFront サーバーの IP アドレス。例: `192.0.2.183` または `2001:0db8:85a3::8a2e:0370:7334`。

1. **`time-to-first-byte`**

   サーバー上で測定される、要求を受信してから応答の最初のバイトを書き込むまでの秒数。

1. **`sc-status`**

   サーバーのレスポンスの HTTP ステータスコード (例: `200`)。

1. **`sc-bytes`**

   サーバーがリクエストに応じてビューワーに送信したデータ (ヘッダーを含む) のバイトの合計数。WebSocket および gRPC 接続の場合、これは接続を経由してサーバーからクライアントに送信した合計バイト数です。

1. **`cs-method`**

   ビューワーから受信した HTTP リクエストメソッド。

1. **`cs-protocol`**

   ビューワーリクエストのプロトコル (`http`、`https`、`grpcs`、`ws`、または `wss`)。

1. **`cs-host`**

   ビューワーが、このリクエストの `Host` ヘッダーに追加した値。オブジェクトの URL に CloudFront ドメイン名を使用している場合 (d111111abcdef8.cloudfront.net など)、このフィールドにはそのドメイン名が含まれます。代替ドメイン名 (CNAME) をオブジェクト URL (www.example.com) に使用している場合、このフィールドにはその代替ドメイン名が含まれます。

1. **`cs-uri-stem`**

   クエリ文字列 (存在する場合) を含むが、ドメイン名を含まないリクエスト URL 全体。例えば、`/images/cat.jpg?mobile=true`。
**注記**  
[標準ログ](AccessLogs.md)では、`cs-uri-stem` 値にクエリ文字列は含まれません。

1. **`cs-bytes`**

   ビューワーがリクエストに含めたデータ (ヘッダーを含む) のバイトの合計数。WebSocket および gRPC 接続の場合、これは接続を経由してクライアントからサーバーに送信した合計バイト数です。

1. **`x-edge-location`**

   リクエストを処理したエッジロケーション。各エッジロケーションは、3 文字コードと、割り当てられた任意の数字で識別されます (例: DFW3)。通常、この 3 文字コードは、エッジロケーションの地理的場所の近くにある空港の、国際航空運送協会 (IATA) の空港コードに対応します。(これらの略語は今後変更される可能性があります)。

1. **`x-edge-request-id`**

   リクエストを一意に識別する不透明な文字列。CloudFront では、この文字列を `x-amz-cf-id` レスポンスヘッダーでも送信します。

1. **`x-host-header`**

   CloudFront ディストリビューションのドメイン名 (d111111abcdef8.cloudfront.net など)。

1. **`time-taken`**

   サーバーが、ビューワーのリクエストを受信してからレスポンスの最後のバイトを出力キューに書き込むまでの秒数。サーバーで 1,000 分の 1 秒単位まで測定されます (例: 0.082)。ビューワーから見た場合、レスポンス全体を取得する合計所要時間は、ネットワークのレイテンシーと TCP バッファリングにより、この値よりも長くなります。

1. **`cs-protocol-version`**

   ビューワーがリクエストで指定した HTTP バージョン。指定できる値には、`HTTP/0.9`、`HTTP/1.0`、`HTTP/1.1`、`HTTP/2.0`および `HTTP/3.0` などがあります。

1. **`c-ip-version`**

   リクエストの IP バージョン (IPv4 または IPv6)。

1. **`cs-user-agent`**

   リクエスト内の `User-Agent` ヘッダーの値。`User-Agent` ヘッダーでリクエスト元 (リクエスト元のデバイスとブラウザのタイプなど) が識別されます。リクエスト元が検索エンジンの場合は、どの検索エンジンかも識別されます。

1. **`cs-referer`**

   リクエスト内の `Referer` ヘッダーの値。これはリクエスト元のドメインの名前です。一般的なリファラーとして、検索エンジン、オブジェクトに直接リンクされた他のウェブサイト、ユーザー自身のウェブサイトなどがあります。

1. **`cs-cookie`**

   名前と値のペアおよび関連属性を含む、リクエスト内の `Cookie` ヘッダー。
**注記**  
このフィールドは 800 バイトに切り捨てられます。

1. **`cs-uri-query`**

   リクエスト URL のクエリ文字列の部分 (ある場合)。

1. **`x-edge-response-result-type`**

   ビューワーにレスポンスを返す直前にサーバーがレスポンスを分類した方法。`x-edge-result-type` フィールドも参照してください。以下に示しているのは、可能な値です。
   + `Hit` – サーバーがキャッシュからビューワーにオブジェクトを渡しました。
   + `RefreshHit` – サーバーはキャッシュ内でオブジェクトを検出しましたが、オブジェクトの有効期限が切れていたため、サーバーはオリジンに問い合わせて、キャッシュ内に最新バージョンのオブジェクトがあるかどうかを確認しました。
   + `Miss` – キャッシュ内のオブジェクトでリクエストに対応できなかったため、サーバーはリクエストをオリジンサーバーに転送して結果をビューワーに返しました。
   + `LimitExceeded` – CloudFront クォータ (以前は制限と呼ばれていました) を超えたため、リクエストは拒否されました。
   + `CapacityExceeded` – リクエストの受信時にサーバーの容量不足でオブジェクトを渡すことができなかったために、サーバーから 503 エラーが返されました。
   + `Error` – 通常、これはリクエストがクライアントエラーとなった (`sc-status` フィールドが `4xx` 範囲内の値となる)、またはサーバーエラーになった (`sc-status` フィールドが `5xx` 範囲内の値となる) ことを意味します。

     `x-edge-result-type` フィールドの値が `Error` であり、このフィールドの値が `Error` でない場合、ダウンロードが完了する前にクライアントが切断されました。
   + `Redirect` – サーバーは、ディストリビューション設定に従って HTTP から HTTPS にビューワーをリダイレクトしました。
   + `LambdaExecutionError` – ディストリビューションに関連付けられた Lambda@Edge 関数は、不正な関連付け、関数のタイムアウト、‭AWS の依存関係の問題、または別の一般的な可用性の問題が原因で完了しませんでした。

1. **`x-forwarded-for`**

   ビューワーが HTTP プロキシまたはロードバランサーを使用してリクエストを送信した場合、`c-ip` フィールドの値はプロキシまたはロードバランサーの IP アドレスです。この場合、このフィールドはリクエスト元のビューワーの IP アドレスです。このフィールドには、複数の IP アドレスをカンマで区切って含めることができます。各 IP アドレスは、IPv4 アドレス (`192.0.2.183` など) または IPv6 アドレス (`2001:0db8:85a3::8a2e:0370:7334` など) にすることができます。

1. **`ssl-protocol`**

   リクエストが HTTPS を使用した場合、このフィールドには、リクエストとレスポンスを送信するためにビューワーとサーバーがネゴシエートした SSL/TLS プロトコルが含まれます。指定可能な値のリストについては、[ビューワーと CloudFront との間でサポートされているプロトコルと暗号](secure-connections-supported-viewer-protocols-ciphers.md) でサポートされている SSL/TLS プロトコルを参照してください。

1. **`ssl-cipher`**

   リクエストが HTTPS を使用した場合、このフィールドには、リクエストとレスポンスを暗号化するためにビューワーとサーバーがネゴシエートした SSL/TLS 暗号が含まれます。使用できる値のリストについては、「[ビューワーと CloudFront との間でサポートされているプロトコルと暗号](secure-connections-supported-viewer-protocols-ciphers.md)」で、サポートされている SSL/TLS 暗号化を参照してください。

1. **`x-edge-result-type`**

   サーバーが、最後のバイトを渡した後で、レスポンスを分類した方法。場合によっては、サーバーがレスポンスを送る準備ができたときから、サーバーがレスポンスを送り終わるまでの間に、結果タイプが変わることがあります。`x-edge-response-result-type` フィールドも参照してください。

   例えば、HTTP ストリーミングで、サーバーがキャッシュ内でストリームのセグメントを検出するとします。そのシナリオでは、このフィールドの値は、通常 `Hit` になります。この場合、サーバーがセグメント全体を配信する前にビューワーが接続を閉じると、最終結果タイプ (およびこのフィールドの値) は `Error` になります。

   WebSocket および gRPC 接続の場合、コンテンツがキャッシュ可能ではなく、オリジンに直接プロキシされるため、このフィールドの値は `Miss` になります。

   以下に示しているのは、可能な値です。
   + `Hit` – サーバーがキャッシュからビューワーにオブジェクトを渡しました。
   + `RefreshHit` – サーバーはキャッシュ内でオブジェクトを検出しましたが、オブジェクトの有効期限が切れていたため、サーバーはオリジンに問い合わせて、キャッシュ内に最新バージョンのオブジェクトがあるかどうかを確認しました。
   + `Miss` – キャッシュ内のオブジェクトでリクエストに対応できなかったため、サーバーはリクエストをオリジンに転送して結果をビューワーに返しました。
   + `LimitExceeded` – CloudFront クォータ (以前は制限と呼ばれていました) を超えたため、リクエストは拒否されました。
   + `CapacityExceeded` – リクエストの受信時にサーバーの容量不足でオブジェクトを渡すことができなかったために、サーバーから HTTP 503 ステータスコードが返されました。
   + `Error` – 通常、これはリクエストがクライアントエラーとなった (`sc-status` フィールドが `4xx` 範囲内の値となる)、またはサーバーエラーになった (`sc-status` フィールドが `5xx` 範囲内の値となる) ことを意味します。`sc-status` フィールドの値が `200` であるか、このフィールドの値が `Error` で、`x-edge-response-result-type` フィールドの値が `Error` でない場合は、HTTP リクエストは成功したが、クライアントがすべてのバイトを受信する前に切断されたことを意味します。
   + `Redirect` – サーバーは、ディストリビューション設定に従って HTTP から HTTPS にビューワーをリダイレクトしました。
   + `LambdaExecutionError` – ディストリビューションに関連付けられた Lambda@Edge 関数は、不正な関連付け、関数のタイムアウト、‭AWS の依存関係の問題、または別の一般的な可用性の問題が原因で完了しませんでした。

1. **`fle-encrypted-fields`**

   サーバーが暗号化してオリジンに転送した[フィールドレベル暗号化](field-level-encryption.md)フィールドの数。CloudFront サーバーは処理されたリクエストをオリジンにストリーミングするときにデータを暗号化するため、`fle-status` の値がエラーであっても、このフィールドに値が渡されている場合があります。

1. **`fle-status`**

   [フィールドレベル暗号化](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html)がディストリビューション用に設定されている場合、このフィールドにはリクエストボディが正常に処理されたかどうかを示すコードが含まれます。サーバーがリクエストボディを正常に処理し、指定したフィールドの値を暗号化してリクエストをオリジンに転送すると、このフィールドの値は `Processed` になります。`x-edge-result-type` の値は、この場合でもクライアント側またはサーバー側のエラーを示すことができます。

   このフィールドで使用できる値は次のとおりです。
   + `ForwardedByContentType` – コンテンツタイプが設定されていないため、サーバーは解析や暗号化を行わずにリクエストをオリジンに転送しました。
   + `ForwardedByQueryArgs` – フィールドレベル暗号化の設定にないクエリ引数がリクエストに含まれているため、サーバーは解析や暗号化を行わずにリクエストをオリジンに転送しました。
   + `ForwardedDueToNoProfile` – フィールドレベル暗号化の設定でプロファイルを指定しなかったため、サーバーは解析や暗号化を行わずにリクエストをオリジンに転送しました。
   + `MalformedContentTypeClientError` `Content-Type` – ヘッダーの値が無効な形式であるため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `MalformedInputClientError` – リクエストボディが無効な形式であるため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `MalformedQueryArgsClientError` – クエリ引数が空であるか無効な形式であるため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `RejectedByContentType` – フィールドレベル暗号化の設定でコンテンツタイプを指定しなかったため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `RejectedByQueryArgs` – フィールドレベル暗号化の設定でクエリ引数を指定しなかったため、サーバーはリクエストを拒否し、HTTP 400 ステータスコードをビューワーに返しました。
   + `ServerError` – オリジンサーバーがエラーを返しました。

   リクエストがフィールドレベル暗号化のクォータ (以前は制限と呼ばれていました) を超えた場合、このフィールドには次のいずれかのエラーコードが含まれ、サーバーは HTTP ステータスコード 400 をビューワーに返します。フィールドレベル暗号化に関する最新のクォータのリストについては、「[フィールドレベル暗号化のクォータ](cloudfront-limits.md#limits-field-level-encryption)」を参照してください。
   + `FieldLengthLimitClientError` – 暗号化されるように設定されているフィールドが最大の長さを超えています。
   + `FieldNumberLimitClientError` – ディストリビューションによって暗号化されるように設定されているリクエストがフィールド数の制限を超えています。
   + `RequestLengthLimitClientError` – フィールドレベル暗号化が設定されている場合にリクエストボディが最大の長さを超えています。

1. **`sc-content-type`**

   レスポンスの HTTP `Content-Type` ヘッダーの値。

1. **`sc-content-len`**

   レスポンスの HTTP `Content-Length` ヘッダーの値。

1. **`sc-range-start`**

   レスポンスに HTTP `Content-Range` ヘッダーが含まれている場合、このフィールドには範囲の開始値が含まれます。

1. **`sc-range-end`**

   レスポンスに HTTP `Content-Range` ヘッダーが含まれている場合、このフィールドには範囲の終了値が含まれます。

1. **`c-port`**

   閲覧者からのリクエストのポート番号。

1. **`x-edge-detailed-result-type`**

   このフィールドには、以下の場合を除き、`x-edge-result-type` フィールドと同じ値が含まれます。
   + オブジェクトが [Origin Shield](origin-shield.md) レイヤーからビューワーに渡された場合、このフィールドには `OriginShieldHit` が含まれています。
   + オブジェクトが CloudFront キャッシュに存在せず、レスポンスが[オリジンリクエストの Lambda@Edge 関数](lambda-at-the-edge.md)によって生成された場合、このフィールドには `MissGeneratedResponse` が含まれます。
   + `x-edge-result-type` フィールドの値が `Error` の場合、このフィールドにはエラーに関する詳細情報を含む次のいずれかの値が含まれます。
     + `AbortedOrigin` – サーバーでオリジンに関する問題が発生しました。
     + `ClientCommError` – サーバーとビューワーとの通信の問題により、ビューワーへのレスポンスが中断されました。
     + `ClientGeoBlocked` – ディストリビューションは、ビューワーの地理的位置からのリクエストを拒否するように設定されています。
     + `ClientHungUpRequest` – リクエストの送信中にビューワーが途中で停止しました。
     + `Error` – エラータイプが他のどのカテゴリにも適合しないエラーが発生しました。このエラータイプは、キャッシュからのエラーレスポンスをサーバーが渡すときに発生する可能性があります。
     + `InvalidRequest` – サーバーがビューワーから無効なリクエストを受信しました。
     + `InvalidRequestBlocked` – 要求されたリソースへのアクセスがブロックされます。
     + `InvalidRequestCertificate` – ディストリビューションが、HTTPS 接続の確立に使用した SSL/TLS 証明書と一致しません。
     + `InvalidRequestHeader` – リクエストに無効なヘッダーが含まれていました。
     + `InvalidRequestMethod` – ディストリビューションは、使用された HTTP リクエストメソッドを処理するように設定されていません。これは、ディストリビューションがキャッシュ可能なリクエストのみをサポートしている場合に発生します。
     + `OriginCommError` — オリジンに接続中、またはオリジンからデータを読み取るときに、リクエストがタイムアウトしました。
     + `OriginConnectError` – サーバーがオリジンに接続できませんでした。
     + `OriginContentRangeLengthError` – オリジンのレスポンスの `Content-Length` ヘッダーが、`Content-Range` ヘッダーの長さと一致しません。
     + `OriginDnsError` – サーバーがオリジンのドメイン名を解決できませんでした。
     + `OriginError` – オリジンが誤ったレスポンスを返しました。
     + `OriginHeaderTooBigError` – オリジンから返されたヘッダーが大きすぎてエッジサーバーで処理できません。
     + `OriginInvalidResponseError` – オリジンが無効なレスポンスを返しました。
     + `OriginReadError` – サーバーがオリジンから読み取れませんでした。
     + `OriginWriteError` – サーバーがオリジンに書き込めませんでした。
     + `OriginZeroSizeObjectError` – オリジンから送信されたサイズゼロのオブジェクトがエラーになりました。
     + `SlowReaderOriginError` – オリジンエラーの原因となったメッセージの読み取りに時間がかかりました。

1. **`c-country`**

   ビューワーの IP アドレスによって決定される、ビューワーの地理的位置を表す国コード。国コードの一覧については、「[ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)」を参照してください。

1. **`cs-accept-encoding`**

    ビューワーリクエスト内の `Accept-Encoding` ヘッダーの値。

1. **`cs-accept`**

   ビューワーリクエスト内の `Accept` ヘッダーの値。

1. **`cache-behavior-path-pattern`**

   ビューワーリクエストに一致したキャッシュ動作を識別するパスパターン。

1. **`cs-headers`**

   ビューワーリクエスト内の HTTP ヘッダー (名前と値)。
**注記**  
このフィールドは 800 バイトに切り捨てられます。

1. **`cs-header-names`**

   ビューワーリクエスト内の HTTP ヘッダーの名前 (値ではない)。
**注記**  
このフィールドは 800 バイトに切り捨てられます。

1. **`cs-headers-count`**

    ビューワーリクエスト内の HTTP ヘッダーの数。

1. **`primary-distribution-id`**

   継続的デプロイが有効になっている場合、この ID は、どのディストリビューションが現在のディストリビューションでプライマリであるかを識別します。

1. **`primary-distribution-dns-name`**

   継続的デプロイが有効になっている場合、この値は、現在の CloudFront ディストリビューションに関連するプライマリドメイン名 (d111111abcdef8.cloudfront.net など) を示します。

1. **`origin-fbl`**

   CloudFront とオリジン間の先頭バイトのレイテンシーの秒数。

1. **`origin-lbl`**

   CloudFront とオリジン間の最終バイトのレイテンシーの秒数。

1. **`asn`**

   ビューワーの AS 番号 (ASN)。

1. <a name="CMCD-real-time-logging-fields"></a>
**リアルタイムのアクセスログの CMCD フィールド**  
これらのフィールドの詳細については、「[CTA Specification Web Application Video Ecosystem - Common Media Client Data CTA-5004](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf)」ドキュメントを参照してください。

1. **`cmcd-encoded-bitrate`**

   リクエストされたオーディオまたは動画オブジェクトのエンコードされたビットレート。

1. **`cmcd-buffer-length`**

   リクエストされたメディアオブジェクトのバッファ長。

1. **`cmcd-buffer-starvation`**

   前のリクエストからオブジェクトリクエストまでの特定の時点でバッファが不足していたかどうか。これにより、プレーヤーが再バッファリング状態になり、動画またはオーディオの再生が停止する可能性があります。

1. **`cmcd-content-id`**

   現在のコンテンツを識別する一意の文字列。

1. **`cmcd-object-duration`**

   リクエストされたオブジェクトの再生時間 (ミリ秒単位)。

1. **`cmcd-deadline`**

   バッファアンダーラン状態やその他の再生問題を回避するために、このオブジェクトの最初のサンプルが利用可能でなければならない、リクエスト時点からの期限。

1. **`cmcd-measured-throughput`**

   クライアントが測定した、クライアントとサーバー間のスループット。

1. **`cmcd-next-object-request`**

   次のリクエストされたオブジェクトの相対パス。

1. **`cmcd-next-range-request`**

   次のリクエストが部分的なオブジェクトリクエストである場合、この文字列はリクエスト対象のバイト範囲を示します。

1. **`cmcd-object-type`**

   リクエスト対象の現在のオブジェクトのメディアタイプ。

1. **`cmcd-playback-rate`**

   リアルタイムの場合は 1、倍速の場合は 2、再生しない場合は 0。

1. **`cmcd-requested-maximum-throughput`**

   クライアントがアセットの配信に十分であると判断した、リクエストされた最大スループット。

1. **`cmcd-streaming-format`**

   現在のリクエストを定義するストリーミングフォーマット。

1. **`cmcd-session-id`**

   現在の再生セッションを識別する GUID。

1. **`cmcd-stream-type`**

   セグメントの可用性を識別するトークン。`v` = すべてのセグメントが使用可能です。`l` = セグメントは時間が経つと使用可能になります。

1. **`cmcd-startup`**

   起動、シーク、またはバッファが空になった後の回復中にオブジェクトが緊急に必要になった場合は、値なしでキーが含まれます。

1. **`cmcd-top-bitrate`**

   クライアントが再生できる最高ビットレートのレンディション。

1. **`cmcd-version`**

   定義されたキーの名前と値を解釈するために使用する、この仕様のバージョン。このキーを省略した場合、クライアントとサーバーは、値がバージョン 1 で定義されたものとして解釈する必要があります。**

1. **`r-host`**

   このフィールドはオリジンリクエストに送信され、オブジェクトの提供に使用されるオリジンサーバーのドメインを示します。エラーが発生した場合は、このフィールドを使用して、最後に試行されたオリジンを見つけることができます (例: `cd8jhdejh6a.mediapackagev2.us-east-1.amazonaws.com`)。

1. **`sr-reason`**

   このフィールドは、オリジンが選択された理由を示します。プライマリオリジンへのリクエストが成功した場合は、空になります。

   オリジンフェイルオーバーが発生した場合、このフィールドには、フェイルオーバーの原因となった HTTP エラーコード (`Failover:403` や `Failover:502`) が含まれます。オリジンフェイルオーバーの場合、リクエストの再試行も失敗してカスタムエラーページも設定していなければ、`r-status` は 2 番目のオリジンのレスポンスを示します。一方、オリジンフェイルオーバーと共にカスタムエラーページを設定している場合、リクエストが失敗してカスタムエラーページが代わりに返されると、これには 2 番目のオリジンのレスポンスが含まれます。

   オリジンフェイルオーバーが発生せずにメディア品質対応レジリエンス (MQAR) オリジンの選択が発生すると、これは `MediaQuality` として記録されます。詳細については、「[Media Quality-Aware Resiliency](media-quality-score.md)」を参照してください。

1. **`x-edge-mqcs`**

   このフィールドは、CloudFront が MediaPackage v2 から CMSD レスポンスヘッダーで取得したメディアセグメントのメディア品質信頼スコア (MQCS) (範囲: 0～100) を示します。このフィールドは、MQAR 対応のオリジングループを持つキャッシュ動作と一致するリクエストで使用できます。CloudFront は、オリジンリクエストに加えてキャッシュからも提供されるメディアセグメントを、このフィールドでログに記録します。詳細については、「[Media Quality-Aware Resiliency](media-quality-score.md)」を参照してください。

1. **`distribution-tenant-id`**

   ディストリビューションテナントの ID。

1. **`connection-id`**

   TLS 接続の一意の識別子です。

   このフィールドの情報を取得する前に、ディストリビューションの mTLS を有効にする必要があります。詳細については、「[CloudFront による相互 TLS 認証 (Viewer mTLS)オリジンの相互 TLS と CloudFront](mtls-authentication.md)」を参照してください。

### エンドポイント (Kinesis Data Streams)
<a name="real-time-logs-endpoint"></a>

エンドポイントには、リアルタイムログを送信する Kinesis Data Streams に関する情報が含まれています。データストリームの Amazon リソースネーム (ARN) を指定します。

Kinesis データストリームの作成の詳細については、「Amazon Kinesis Data Streams 開発者ガイド」の以下のトピックを参照してください。**
+ [ストリームの作成と管理](https://docs.aws.amazon.com/streams/latest/dev/working-with-streams.html)
+ [ を使用した基本的な Kinesis Data Streams の操作を実行するAWS CLI](https://docs.aws.amazon.com/streams/latest/dev/fundamental-stream.html)
+ [ストリームの作成](https://docs.aws.amazon.com/streams/latest/dev/kinesis-using-sdk-java-create-stream.html) (AWS SDK for Java を使用)

データストリームを作成するときは、シャードの数を指定する必要があります。次の情報を使用して、必要なシャードの数を見積もることができます。

**Kinesis データストリームのシャード数を推定するには**

1. ご使用の CloudFront ディストリビューションが受信する 1 秒あたりのリクエスト数を計算 (または概算) します。

   1 秒あたりのリクエストを計算するには、[CloudFront の使用状況レポート](https://console.aws.amazon.com/cloudfront/v4/home#/usage) (CloudFront コンソール内) と [CloudFront メトリクス](viewing-cloudfront-metrics.md#monitoring-console.distributions) (CloudFront コンソールおよび Amazon CloudWatch コンソール内) を使用します。

1. 1 つのリアルタイムのアクセスログレコードの一般的なサイズを決定します。

   一般に、1 つのログレコードは約 500 バイトです。使用可能なすべてのフィールドを含む大きなレコードは、通常、約 1 KB です。

   ログレコードのサイズが不明な場合は、サンプルレートを低く (1% などに) 設定して、リアルタイムログを有効化し、Kinesis Data Streams でのデータのモニタリングを使用して平均的なレコードサイズを割り出します (受信バイト数の合計をレコード数の合計で割ります)。

1. [Amazon Kinesis Data Streams の料金ページ](https://aws.amazon.com/kinesis/data-streams/pricing/)の AWS 料金見積りツール の下にある **[今すぐカスタム見積もりを作成する]** をクリックします。
   + 計算ツールで、1 秒あたりのリクエスト数 (レコード) を入力します。
   + 単一のログレコードの平均レコードサイズを入力します。
   + **[計算を表示]** をクリックします。

   料金見積りツールが、必要なシャード数と推定コストを表示します。

### IAM ロール
<a name="real-time-logs-IAM"></a>

Kinesis のデータストリームにリアルタイムのアクセスログを配信するための許可を CloudFront に付与する AWS Identity and Access Management (IAM) ロールです。

CloudFront コンソールでリアルタイムのアクセスログ設定を作成する場合、**[新規サービスロールの作成]** を選択して、コンソールで IAM ロールを作成させることができます。

AWS CloudFormation または CloudFront API (AWS CLI もしくは SDK) を使用してリアルタイムのアクセスログ設定を作成する場合は、独自に IAM ロールを作成して、ロール ARN を提供する必要があります。IAM ロールを自分で作成するには、次のポリシーを使用します。

**IAM ロール信頼ポリシー**

次の IAM ロール信頼ポリシーを使用するには、*111122223333* を AWS アカウント 数字に置き換えます。このポリシーの `Condition` 要素は、CloudFront が AWS アカウント 内のディストリビューションの代理としてのみこのロールを引き受けることができるため、[「混乱した代理」問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)を防止するのに役立ちます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                }
            }
        }
    ]
}
```

------

**暗号化されていないデータストリーム用の IAM ロールアクセス許可ポリシー**

次のポリシーを使用するには、*arn:aws:kinesis:us-east-2:123456789012:stream/StreamName* を Kinesis Data Streams の ARN に置き換えます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStreamSummary",
                "kinesis:DescribeStream",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": [
                "arn:aws:kinesis:us-east-2:123456789012:stream/StreamName"
            ]
        }
    ]
}
```

------

**暗号化されたデータストリーム用の IAM ロールアクセス許可ポリシー**

次のポリシーを使用するには、*arn:aws:kinesis:us-east-2:123456789012:stream/StreamName* を Kinesis Data Streams の ARN に、*arn:aws:kms:us-east-2:123456789012:key/e58a3d0b-fe4f-4047-a495-ae03cc73d486* を AWS KMS key の ARN に置き換えます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStreamSummary",
                "kinesis:DescribeStream",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": [
                "arn:aws:kinesis:us-east-2:123456789012:stream/StreamName"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": [
                "arn:aws:kms:us-east-2:123456789012:key/e58a3d0b-fe4f-4047-a495-ae03cc73d486"
            ]
        }
    ]
}
```

------

****  

## Kinesis Data Streams コンシューマーを作成する
<a name="real-time-log-consumer-guidance"></a>

リアルタイムのアクセスログを読み取って分析するには、Kinesis Data Streams *コンシューマー*を構築または使用します。CloudFront リアルタイムのアクセスログ用のコンシューマーを構築する場合、すべてのリアルタイムログレコードのフィールドは、[フィールド](#real-time-logs-fields) セクションの一覧と常に同じ順序で配信されることを知っておくことが重要です。この固定注文に対応するためにコンシューマーを構築することを確認してください。

例えば、`time-to-first-byte`、`sc-status`、および `c-country` の 3 つのフィールドのみを含むリアルタイムのアクセスログ設定を考えてみます。このシナリオでは、最後のフィールド、`c-country` は、すべてのログレコードで常にフィールド番号 3 です。ただし、後でリアルタイムのアクセスログ設定にフィールドを追加すると、レコード内の各フィールドの配置が変更される可能性があります。

例えば、フィールド `sc-bytes` と `time-taken` をリアルタイムのアクセスログ設定に追加した場合、これらのフィールドは、[フィールド](#real-time-logs-fields) セクションに示されている順序に従って各ログレコードに挿入されます。5 つのフィールドすべての順序は `time-to-first-byte`、`sc-status`、`sc-bytes`、`time-taken`、および `c-country` です。`c-country` フィールドはもともとフィールド番号 3 でしたが、現在はフィールド番号 5 です。リアルタイムのアクセスログ設定にフィールドを追加する場合は、コンシューマーアプリケーションがログレコード内の位置を変更するフィールドを処理できることを確認してください。

## リアルタイムのアクセスログのトラブルシューティング
<a name="real-time-log-troubleshooting"></a>

リアルタイムのアクセスログ設定を作成した後、レコードが Kinesis Data Streams にまったく配信されない (または一部のレコードが配信されない) 場合があります。この場合、まず CloudFront ディストリビューションがビューワーリクエストを受信していることを確認する必要があります。その場合は、次の設定を確認してトラブルシューティングを続行できます。

**IAM ロールのアクセス許可**  
CloudFront では、リアルタイムのアクセスログレコードを Kinesis データストリームに配信するために、リアルタイムのアクセスログ設定の IAM ロールが使用されます。ロールの信頼ポリシーとロールのアクセス許可ポリシーが、[IAM ロール](#real-time-logs-IAM) に示されているポリシーと一致していることを確認してください。

**Kinesis Data Streams のスロットリング**  
CloudFront によってリアルタイムのアクセスログレコードが Kinesis データストリームに書き込まれる速度が、ストリームで処理できる速度を上回る場合、Kinesis Data Streams は CloudFront からのリクエストを抑制することがあります。この場合、Kinesis データストリームのシャードの数を増やすことができます。各シャードは、1 秒あたり 1,000 レコードまでの書き込みをサポートし、1 秒あたり 1 MB の最大データ書き込みをサポートします。