

# Uso de registros de acceso en tiempo real
<a name="real-time-logs"></a>

Con los registros de acceso en tiempo real de CloudFront, puede obtener información sobre las solicitudes realizadas a una distribución en tiempo real (los registros se envían en cuestión de segundos después de recibir las solicitudes). Puede usar los registros de acceso en tiempo real para supervisar, analizar y tomar medidas en función del rendimiento de entrega de contenido.

Los registros de acceso en tiempo real de CloudFront son configurables. Puede elegir:
+ La *frecuencia de muestreo* de los registros en tiempo real, es decir, el porcentaje de solicitudes de las que desea recibir entradas de registro de acceso en tiempo real.
+ Los campos específicos que desea recibir en los registros de log.
+ Los comportamientos de caché específicos (patrones de ruta) para los que desea recibir registros en tiempo real.

Los registros de acceso en tiempo real de CloudFront se envían al flujo de datos de su elección en Amazon Kinesis Data Streams. Puede crear su propio [consumidor de flujos de datos de Kinesis](https://docs.aws.amazon.com/streams/latest/dev/amazon-kinesis-consumers.html) o utilizar Amazon Data Firehose para enviar los datos de registro a Amazon Simple Storage Service (Amazon S3), Amazon Redshift, Amazon OpenSearch Service (OpenSearch Service) o a un servicio de procesamiento de registros de terceros.

CloudFront aplica cargos por los registros de acceso en tiempo real, que se suman a los cargos que se aplican por el uso de Kinesis Data Streams. Para obtener más información acerca de los precios, consulte [Precios de Amazon CloudFront](https://aws.amazon.com/cloudfront/pricing/) y [Precios de Amazon Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams/pricing/).

**importante**  
Recomendamos utilizar los registros de acceso para comprender la naturaleza de las solicitudes hechas a su contenido y no como una relación exhaustiva de todas las solicitudes. CloudFront envía registros de acceso en tiempo real en la medida en que sea posible. La entrada de registro de una solicitud determinada puede entregarse mucho después de la solicitud se haya procesado realmente y, en casos contados, es probable que una entrada de registro no se entregue en absoluto. Cuando se omite una entrada de registro de los registros de acceso en tiempo real, la cantidad de entradas de los registros de acceso en tiempo real no coincide con el uso que aparece en los informes de facturación y de uso de AWS.

**Topics**
+ [Creación y uso de configuraciones de registro de acceso en tiempo real](#create-real-time-log-config)
+ [Descripción de las configuraciones de registros de acceso en tiempo real](#understand-real-time-log-config)
+ [Creación de un consumidor de Kinesis Data Streams](#real-time-log-consumer-guidance)
+ [Resolución de problemas de registros de acceso en tiempo real](#real-time-log-troubleshooting)

## Creación y uso de configuraciones de registro de acceso en tiempo real
<a name="create-real-time-log-config"></a>

Para obtener información sobre las solicitudes realizadas a una distribución en tiempo real, puede usar configuraciones de registro de acceso en tiempo real. Los registros se entregan en cuestión de segundos después de recibir las solicitudes. Puede crear una configuración de registro de acceso en tiempo real en la consola de CloudFront, con AWS Command Line Interface (AWS CLI) o con la API de CloudFront.

Para utilizar una configuración de registro de acceso en tiempo real, puede asociarla a uno o más comportamientos de caché en una distribución de CloudFront.

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

**Creación de una configuración de registro de acceso en tiempo real**

1. Inicie sesión en la Consola de administración de AWS y abra la página **Logs (Registros)** en la consola de CloudFront en [https://console.aws.amazon.com/cloudfront/v4/home?#/logs](https://console.aws.amazon.com/cloudfront/v4/home?#/logs).

1. Elija la pestaña **Configuraciones en tiempo real**.

1. Seleccione **Crear configuración**.

1. En **Nombre**, escriba un nombre para la configuración.

1. En **Frecuencia de muestreo**, introduzca el porcentaje de solicitudes de las que desea recibir entradas de registro.

1. En **Campos**, elija los campos que desee recibir en los registros de acceso en tiempo real.
   + Para incluir todos los [campos de CMCD](#CMCD-real-time-logging-fields) en los registros, elija **Todas las claves de CMCD**.

1. En **Punto de conexión**, elija uno o más flujos de datos de Kinesis para recibir registros de acceso en tiempo real.
**nota**  
Los registros de acceso en tiempo real de CloudFront se envían al flujo de datos que especifique en Kinesis Data Streams. Para leer y analizar los registros de acceso en tiempo real, puede crear su propio consumidor de flujo de datos de Kinesis. También puede utilizar Firehose para enviar los datos de registro a Amazon S3, Amazon Redshift, Amazon OpenSearch Service o un servicio de procesamiento de registros de terceros.

1. En **Rol de IAM**, elija **Crear un nuevo rol de servicio** o elija un rol existente. Debe tener permiso para crear roles de IAM.

1. (Opcional) En **Distribución**, elija una distribución y el comportamiento de caché de CloudFront que desee asociar a la configuración de registro de acceso en tiempo real.

1. Seleccione **Crear configuración**.

Si se realiza correctamente, la consola muestra los detalles de la configuración de registro de acceso en tiempo real que acaba de crear.

Para obtener más información, consulte [Descripción de las configuraciones de registros de acceso en tiempo real](#understand-real-time-log-config).

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

Para crear una configuración de registro de acceso en tiempo real con la AWS CLI, utilice el comando **aws cloudfront create-realtime-log-config**. Puede utilizar un archivo de entrada para proporcionar los parámetros de entrada del comando, en lugar de especificar cada parámetro individual como entrada de línea de comandos.

**Para crear una configuración de registro de acceso en tiempo real (CLI con archivo de entrada)**

1. Utilice el siguiente comando para crear un archivo denominado `rtl-config.yaml` que contenga todos los parámetros de entrada del comando **create-realtime-log-config**.

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

1. Abra el archivo llamado `rtl-config.yaml` que acaba de crear. Edite el archivo para especificar los ajustes de configuración del registro de acceso en tiempo real que desee y, a continuación, guarde el archivo. Tenga en cuenta lo siguiente:
   + Para `StreamType`, el único valor válido es `Kinesis`.

   Para obtener más información acerca de los ajustes de configuración largos en tiempo real, consulte [Descripción de las configuraciones de registros de acceso en tiempo real](#understand-real-time-log-config).

1. Utilice el siguiente comando para crear la configuración de registro de acceso en tiempo real utilizando los parámetros de entrada del archivo de `rtl-config.yaml`.

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

Si se realiza correctamente, la salida del comando muestra los detalles de la configuración de registro de acceso en tiempo real que acaba de crear.

**Para asociar una configuración de registro de acceso en tiempo real a una distribución existente (CLI con archivo de entrada)**

1. Utilice el comando siguiente para guardar la configuración de distribución de la distribución de CloudFront que desea actualizar. Reemplace *distribution\$1ID* por el ID de la distribución.

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

1. Abra el archivo llamado `dist-config.yaml` que acaba de crear. Edite el archivo, realizando los siguientes cambios en cada comportamiento de caché que actualice para utilizar una configuración de registro de acceso en tiempo real.
   + En el comportamiento de caché, agregue un campo denominado `RealtimeLogConfigArn`. Para el valor del campo, utilice el ARN de la configuración de registro de acceso en tiempo real que desea asociar a este comportamiento de caché.
   + Cambie el nombre del campo `ETag` a `IfMatch`, pero no cambie el valor del campo.

   Guarde el archivo cuando haya terminado.

1. Utilice el siguiente comando para actualizar la distribución para utilizar la configuración de registro de acceso en tiempo real. Reemplace *distribution\$1ID* por el ID de la distribución.

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

Si tiene éxito, la salida del comando muestra los detalles de la distribución que acaba de actualizar.

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

Para crear una configuración de registro de acceso en tiempo real con la API de CloudFront, utilice la operación de la API [CreateRealtimeLogConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateRealtimeLogConfig.html). Para obtener más información sobre los parámetros que especifique en esta llamada a la API, consulte [Descripción de las configuraciones de registros de acceso en tiempo real](#understand-real-time-log-config) y la documentación de referencia de la API para su SDK de AWS u otro cliente de la API.

Después de crear una configuración de registro de acceso en tiempo real, puede asociarla a un comportamiento de caché mediante una de las siguientes operaciones de la API:
+ Para asociarla a un comportamiento de caché en una distribución existente, utilice [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html).
+ Para asociarlo con un comportamiento de caché en una nueva distribución, utilice [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html).

Para ambas operaciones de la API, proporcione el ARN de la configuración de registro de acceso en tiempo real del campo `RealtimeLogConfigArn`, dentro de un comportamiento de caché. Para obtener más información sobre los otros campos que especifique en estas llamadas a la API, consulte [Referencia de toda la configuración de distribución](distribution-web-values-specify.md) y la documentación de referencia de la API para el SDK de AWS u otro cliente de la API.

------

## Descripción de las configuraciones de registros de acceso en tiempo real
<a name="understand-real-time-log-config"></a>

Para utilizar registros de acceso en tiempo real de CloudFront, se debe comenzar por crear una configuración de registro de acceso en tiempo real. La configuración de registro de acceso en tiempo real contiene información acerca de los campos de registro que desea recibir, la *frecuencia de muestreo* de las entradas de registro y el flujo de datos de Kinesis en el que desea entregar los registros.

En concreto, una configuración de registro de acceso en tiempo real contiene los siguientes valores de configuración:

**Contents**
+ [Nombre](#real-time-logs-name)
+ [Frecuencia de muestreo](#real-time-logs-sampling-rate)
+ [Fields](#real-time-logs-fields)
+ [Punto de conexión (Kinesis Data Streams)](#real-time-logs-endpoint)
+ [rol de IAM](#real-time-logs-IAM)

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

Un nombre para identificar la configuración de registro de acceso en tiempo real.

### Frecuencia de muestreo
<a name="real-time-logs-sampling-rate"></a>

La frecuencia de muestreo es un número entero entre 1 y 100 (inclusive) que determina el porcentaje de solicitudes de espectador que se envían a Kinesis Data Streams como entradas de registro de acceso en tiempo real. Para incluir todas las solicitudes de espectador en los registros en tiempo real, especifique 100 para la frecuencia de muestreo. Es posible que elija una frecuencia de muestreo más baja para reducir los costos mientras recibe un ejemplo representativo de datos de solicitudes en los registros de acceso en tiempo real.

### Fields
<a name="real-time-logs-fields"></a>

Una lista de campos que se incluyen en cada entrada de registro de acceso en tiempo real. Cada registro de log puede contener hasta 40 campos y puede optar por recibir todos los campos disponibles, o solo los campos necesarios para monitorear y analizar el rendimiento.

La lista siguiente contiene el nombre de cada campo y una descripción de la información de ese campo. Los campos se muestran en el orden en que aparecen en las entradas de registros que se entregan a Kinesis Data Streams.

Los campos 46-63 son [datos comunes de cliente multimedia (CMCD)](#CMCD-real-time-logging-fields) que los clientes de reproductores multimedia pueden enviar a las CDN con cada solicitud. Puede utilizar estos datos para comprender cada solicitud, como el tipo de medio (audio o vídeo), la velocidad de reproducción y la duración del streaming. Estos campos solo aparecen en los registros de acceso en tiempo real si se envían a CloudFront. 

1. **`timestamp`**

   La fecha y la hora a las que el servidor de borde ha terminado de responder a la solicitud.

1. **`c-ip`**

   La dirección IP del espectador que ha realizado la solicitud, por ejemplo, `192.0.2.183` o `2001:0db8:85a3::8a2e:0370:7334`. Si el lector ha utilizado un proxy HTTP o un equilibrador de carga para enviar la solicitud, el valor de este campo es la dirección IP del proxy o del balanceador de carga. Consulte también el campo `x-forwarded-for`.

1. **`s-ip`**

   La dirección IP del servidor de CloudFront que atendió la solicitud, por ejemplo, `192.0.2.183` o `2001:0db8:85a3::8a2e:0370:7334`.

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

   El número de segundos entre la recepción de la solicitud y la escritura del primer byte de la respuesta, medido en el servidor.

1. **`sc-status`**

   El código de estado HTTP de la respuesta del servidor (por ejemplo, `200`).

1. **`sc-bytes`**

   El número total de bytes que el servidor ha enviado al lector en respuesta a la solicitud, incluidos los encabezados. Para conexiones WebSocket y gRPC, se trata del número total de bytes enviados desde el servidor al cliente a través de la conexión.

1. **`cs-method`**

   El método de solicitud HTTP recibido del lector.

1. **`cs-protocol`**

   El protocolo de la solicitud del lector (`http`, `https`, `grpcs`, `ws` o `wss`).

1. **`cs-host`**

   El valor que el lector ha incluido en el encabezado `Host` de la solicitud. Si utiliza el nombre de dominio CloudFront en las URL de los objetos (como d111111abcdef8.cloudfront.net), este campo contiene ese nombre de dominio. Si utiliza nombres de dominio alternativos (CNAME) en las URL de los objetos (como www.example.com), este campo contiene el nombre de dominio alternativo.

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

   La dirección URL completa de la solicitud, incluida la cadena de consulta (si existe), pero sin el nombre de dominio. Por ejemplo, `/images/cat.jpg?mobile=true`.
**nota**  
En los [registros estándar](AccessLogs.md), el valor de `cs-uri-stem` no incluye la cadena de consulta.

1. **`cs-bytes`**

   El número total de bytes de datos que el lector ha incluido en la solicitud, incluidos los encabezados. Para conexiones WebSocket y gRPC, se trata del número total de bytes enviados desde el cliente al servidor en la conexión.

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

   La ubicación de borde que atendió la solicitud. Cada ubicación periférica se identifica mediante un código de tres letras y un número asignado arbitrariamente (por ejemplo, DFW3). El código de tres letras normalmente se corresponde con el código del aeropuerto de la Asociación de Transporte Aéreo Internacional (IATA) más cercano a la ubicación geográfica de la ubicación periférica. Estas abreviaturas pueden cambiar en el futuro.

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

   Una cadena opaca que identifica una solicitud de forma única. CloudFront también envía esta cadena en el encabezado de respuesta `x-amz-cf-id`.

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

   El nombre de dominio de la distribución de CloudFront (por ejemplo, d111111abcdef8.cloudfront.net).

1. **`time-taken`**

   El número de segundos (hasta la milésima de segundo, por ejemplo, 0,082) desde que el servidor recibe la solicitud del lector hasta que el servidor escribe el último byte de la respuesta en la cola de salida, según se mide en el servidor. Desde el punto de vista del lector, el tiempo total para obtener la respuesta completa será superior a este valor a causa de la latencia de la red y el almacenamiento en búfer de TCP.

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

   La versión de HTTP que el espectador especificó en la solicitud. Entre los valores posibles se incluyen `HTTP/0.9`, `HTTP/1.0`, `HTTP/1.1`, `HTTP/2.0` y `HTTP/3.0`.

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

   La versión IP de la solicitud (IPv4 o IPv6).

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

   El valor del encabezado `User-Agent` de la solicitud. El encabezado `User-Agent` identifica el origen de la solicitud, como el tipo de dispositivo y el navegador que enviaron la solicitud o, si la solicitud provino de un motor de búsqueda, de cuál.

1. **`cs-referer`**

   El valor del encabezado `Referer` de la solicitud. Este es el nombre del dominio que ha originado la solicitud. Entre los remitentes principales se incluyen motores de búsqueda, otros sitios web que enlazan directamente con sus objetos y su propio sitio web.

1. **`cs-cookie`**

   El encabezado `Cookie` de la solicitud, incluidos los pares nombre-valor y los atributos asociados.
**nota**  
Este campo se trunca en 800 bytes.

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

   La parte de la cadena de consulta de la URL, de haberla.

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

   Cómo el servidor ha clasificado la respuesta antes de devolver la respuesta al lector. Consulte también el campo `x-edge-result-type`. Entre los valores posibles se incluyen:
   + `Hit`: el servidor ofreció el objeto al lector desde la caché.
   + `RefreshHit`: el servidor encontró el objeto en la caché pero el objeto había vencido, por lo que el servidor se puso en contacto con el origen para comprobar que la caché tenía la versión más reciente del objeto.
   + `Miss`: un objeto en la caché no ha podido satisfacer la solicitud, así que el servidor ha reenviado la solicitud al servidor de origen y ha devuelto el resultado al lector.
   + `LimitExceeded`: se ha denegado la solicitud porque se superó una cuota (antes denominada límite) de CloudFront.
   + `CapacityExceeded`: el servidor ha devuelto un error 503 porque no disponía de capacidad suficiente en el momento de la solicitud para prestar servicio al objeto.
   + `Error`: normalmente, esto significa que la solicitud ha dado lugar a un error de cliente (el valor del campo `sc-status` está en el intervalo `4xx`) o un error de servidor (el valor del campo `sc-status` está en el intervalo `5xx`).

     Si el valor del campo `x-edge-result-type` es `Error` y el valor de este campo no es `Error`, el cliente se ha desconectado antes de finalizar la descarga.
   + `Redirect`: el servidor ha redirigido al lector de HTTP a HTTPS de acuerdo con la configuración de distribución.
   + `LambdaExecutionError`: la función de Lambda@Edge asociada con la distribución no se ha completado debido a una asociación incorrecta, al tiempo de espera de una función, a un problema de dependencia de AWS o a otro problema de disponibilidad general.

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

   Si el lector ha utilizado un proxy HTTP o un equilibrador de carga para enviar la solicitud, el valor del campo `c-ip` es la dirección IP del proxy o del balanceador de carga. En ese caso, este campo es la dirección IP del espectador que originó la solicitud. Este campo puede contener varias direcciones IP separadas por comas. Cada dirección IP puede ser una dirección IPv4 (por ejemplo, `192.0.2.183`) o una dirección IPv6 (por ejemplo, `2001:0db8:85a3::8a2e:0370:7334`).

1. **`ssl-protocol`**

   Cuando la solicitud ha utilizado HTTPS, este campo contiene el protocolo SSL/TLS que el lector y el servidor han negociado para transmitir la solicitud y la respuesta. Para obtener una lista de valores posibles, consulte los protocolos SSL/TLS compatibles en [Protocolos y cifrados admitidos entre lectores y CloudFront](secure-connections-supported-viewer-protocols-ciphers.md).

1. **`ssl-cipher`**

   Cuando la solicitud ha utilizado HTTPS, este campo contiene el cifrado SSL/TLS que el lector y el servidor han negociado para cifrar la solicitud y la respuesta. Para obtener una lista de valores posibles, consulte los cifrados SSL/TLS compatibles en [Protocolos y cifrados admitidos entre lectores y CloudFront](secure-connections-supported-viewer-protocols-ciphers.md).

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

   Cómo el servidor ha clasificado la respuesta después de que el último byte abandonara el servidor. En algunos casos, el tipo de resultado puede cambiar entre el momento en que el servidor está listo para enviar la respuesta y el momento en que termina el envío de la respuesta. Consulte también el campo `x-edge-response-result-type`.

   Por ejemplo, en el streaming de HTTP, se supone que el servidor encuentra un segmento de la secuencia en la caché. En esta situación, el valor de este campo sería normalmente `Hit`. Sin embargo, si el lector cierra la conexión antes de que el servidor haya entregado todo el segmento, el tipo de resultado final (y el valor de este campo) es `Error`.

   Las conexiones WebSocket y gRPC tendrán un valor de `Miss` para este campo porque el contenido no se puede almacenar en caché y se entrega directamente al origen.

   Entre los valores posibles se incluyen:
   + `Hit`: el servidor ofreció el objeto al lector desde la caché.
   + `RefreshHit`: el servidor encontró el objeto en la caché pero el objeto había vencido, por lo que el servidor se puso en contacto con el origen para comprobar que la caché tenía la versión más reciente del objeto.
   + `Miss`: un objeto en la caché no ha podido satisfacer la solicitud, así que el servidor la ha reenviado al origen y ha devuelto el resultado al lector.
   + `LimitExceeded`: se ha denegado la solicitud porque se superó una cuota (antes denominada límite) de CloudFront.
   + `CapacityExceeded`: el servidor ha devuelto un código de estado HTTP 503 porque no disponía de capacidad suficiente en el momento de la solicitud para prestar servicio al objeto.
   + `Error`: normalmente, esto significa que la solicitud ha dado lugar a un error de cliente (el valor del campo `sc-status` está en el intervalo `4xx`) o un error de servidor (el valor del campo `sc-status` está en el intervalo `5xx`). Si el valor del campo `sc-status` es `200` o si el valor de este campo es `Error` y el valor del campo `x-edge-response-result-type` no es `Error`, significa que la solicitud HTTP se ha realizado correctamente pero el cliente se ha desconectado antes de recibir todos los bytes.
   + `Redirect`: el servidor ha redirigido al lector de HTTP a HTTPS de acuerdo con la configuración de distribución.
   + `LambdaExecutionError`: la función de Lambda@Edge asociada con la distribución no se ha completado debido a una asociación incorrecta, al tiempo de espera de una función, a un problema de dependencia de AWS o a otro problema de disponibilidad general.

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

   El número de campos de [cifrado en el nivel de campo](field-level-encryption.md) que el servidor ha cifrado y reenviado al origen. Los servidores de CloudFront transmiten la solicitud procesada al origen a medida que cifran los datos, por lo que este campo puede tener un valor incluso si el valor de `fle-status` es un error.

1. **`fle-status`**

   Cuando se configura el [cifrado en el nivel de campo](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/field-level-encryption.html) para una distribución, este campo contiene un código que indica si el cuerpo de la solicitud se ha procesado correctamente. Cuando el servidor procesa correctamente el cuerpo de la solicitud, cifra los valores de los campos especificados y reenvía la solicitud al origen, el valor de este campo es `Processed`. El valor de `x-edge-result-type` todavía puede indicar un error del lado del cliente o del lado del servidor en este caso.

   Los valores posibles para este campo son:
   + `ForwardedByContentType`: el servidor ha reenviado la solicitud al origen sin analizar ni cifrar porque no se ha configurado ningún tipo de contenido.
   + `ForwardedByQueryArgs`: el servidor ha reenviado la solicitud al origen sin analizar ni cifrar porque la solicitud contiene un argumento de consulta que no estaba en la configuración de cifrado en el nivel de campo.
   + `ForwardedDueToNoProfile`: el servidor ha reenviado la solicitud al origen sin analizar ni cifrar porque no se ha especificado ningún perfil en la configuración de cifrado en el nivel de campo.
   + `MalformedContentTypeClientError`: el servidor ha rechazado la solicitud y ha devuelto un código de estado HTTP 400 al lector porque el valor del encabezado `Content-Type` estaba en un formato no válido.
   + `MalformedInputClientError`: el servidor ha rechazado la solicitud y ha devuelto un código de estado HTTP 400 al lector porque el cuerpo de la solicitud estaba en un formato no válido.
   + `MalformedQueryArgsClientError`: el servidor ha rechazado la solicitud y ha devuelto un código de estado HTTP 400 al lector porque un argumento de consulta estaba vacío o tenía un formato no válido.
   + `RejectedByContentType`: el servidor ha rechazado la solicitud y ha devuelto un código de estado HTTP 400 al lector porque no se ha especificado ningún tipo de contenido en la configuración de cifrado en el nivel de campo.
   + `RejectedByQueryArgs`: el servidor ha rechazado la solicitud y ha devuelto un código de estado HTTP 400 al lector porque no se ha especificado ningún argumento de consulta en la configuración de cifrado en el nivel de campo.
   + `ServerError`: el servidor de origen ha devuelto un error.

   Si la solicitud supera una cuota de cifrado en el nivel de campo (anteriormente denominada límite), este campo contiene uno de los siguientes códigos de error y el servidor devuelve el código de estado HTTP 400 al lector. Para obtener una lista de las cuotas actuales del cifrado en el nivel de campo, consulte [Cuotas de cifrado en el nivel de campo](cloudfront-limits.md#limits-field-level-encryption).
   + `FieldLengthLimitClientError`: un campo que se ha configurado como cifrado ha superado la longitud máxima permitida.
   + `FieldNumberLimitClientError`: una solicitud que la distribución ha configurado para cifrar contiene un número de campos mayor del permitido.
   + `RequestLengthLimitClientError`: la longitud del cuerpo de la solicitud ha superado el máximo permitido cuando se ha configurado el cifrado en el nivel de campo.

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

   El valor del encabezado HTTP `Content-Type` de la respuesta.

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

   El valor del encabezado HTTP `Content-Length` de la respuesta.

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

   Cuando la respuesta contiene el encabezado HTTP `Content-Range`, este campo contiene el valor inicial del intervalo.

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

   Cuando la respuesta contiene el encabezado HTTP `Content-Range`, este campo contiene el valor final del intervalo.

1. **`c-port`**

   El número de puerto de la solicitud desde el espectador.

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

   Este campo contiene el mismo valor que el campo `x-edge-result-type`, excepto en los siguientes casos:
   + Cuando el objeto se ha servido al lector desde la capa de [Origin Shield](origin-shield.md), este campo contiene `OriginShieldHit`.
   + Cuando el objeto no estaba en la memoria caché de CloudFront y la respuesta se generó mediante una [función Lambda@Edge de solicitud de origen](lambda-at-the-edge.md), este campo contiene `MissGeneratedResponse`.
   + Cuando el valor del campo `x-edge-result-type` es `Error`, este campo contiene uno de los siguientes valores con más información sobre el error:
     + `AbortedOrigin`: el servidor ha encontrado un problema con el origen.
     + `ClientCommError`: la respuesta al lector se ha interrumpido debido a un problema de comunicación entre el servidor y el lector.
     + `ClientGeoBlocked`: la distribución está configurada para rechazar solicitudes desde la ubicación geográfica del lector.
     + `ClientHungUpRequest`: el espectador se ha detenido prematuramente mientras enviaba la solicitud.
     + `Error`: se ha producido un error cuyo tipo de error no se ajusta a ninguna de las otras categorías. Este tipo de error puede producirse cuando el servidor envía una respuesta de error desde la caché.
     + `InvalidRequest`: el servidor ha recibido una solicitud no válida desde el lector.
     + `InvalidRequestBlocked`: el acceso al recurso solicitado está bloqueado.
     + `InvalidRequestCertificate`: la distribución no coincide con el certificado SSL/TLS para el que se ha establecido la conexión HTTPS.
     + `InvalidRequestHeader`: la solicitud contenía un encabezado no válido.
     + `InvalidRequestMethod`: la distribución no está configurada para gestionar el método de solicitud HTTP que se ha utilizado. Esto puede suceder cuando la distribución solo admite solicitudes que se pueden almacenar en caché.
     + `OriginCommError`: se agotó el tiempo de espera de la solicitud al conectarse a un origen o al leer datos de un origen.
     + `OriginConnectError`: el servidor no ha podido conectarse al origen.
     + `OriginContentRangeLengthError`: el encabezado `Content-Length` de la respuesta del origen no coincide con la longitud del encabezado `Content-Range`.
     + `OriginDnsError`: el servidor no ha podido resolver el nombre de dominio del origen.
     + `OriginError`: el origen ha devuelto una respuesta incorrecta.
     + `OriginHeaderTooBigError`: un encabezado devuelto por el origen es demasiado grande para que el servidor de borde lo procese.
     + `OriginInvalidResponseError`: el origen ha devuelto una respuesta no válida.
     + `OriginReadError`: el servidor no ha podido leer desde el origen.
     + `OriginWriteError`: el servidor no ha podido escribir en el origen.
     + `OriginZeroSizeObjectError`: un objeto de tamaño cero enviado desde el origen ha provocado un error.
     + `SlowReaderOriginError`: el espectador ha sido al leer el mensaje que ha provocado el error de origen.

1. **`c-country`**

   Un código de país que representa la ubicación geográfica del lector, según lo determinado por la dirección IP del lector. Para obtener una lista de códigos de países, consulte [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).

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

    El valor del encabezado `Accept-Encoding` de la solicitud del lector.

1. **`cs-accept`**

   El valor del encabezado `Accept` de la solicitud del lector.

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

   El patrón de ruta que identifica el comportamiento de caché que coincidió con la solicitud del lector.

1. **`cs-headers`**

   Los encabezados HTTP (nombres y valores) en la solicitud del lector.
**nota**  
Este campo se trunca en 800 bytes.

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

   Los nombres de los encabezados HTTP (no los valores) en la solicitud del lector.
**nota**  
Este campo se trunca en 800 bytes.

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

    El número de encabezados HTTP en la solicitud del lector.

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

   Cuando la implementación continua está habilitada, este ID identifica qué distribución es la principal en la distribución actual.

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

   Cuando la implementación continua está habilitada, este valor muestra el nombre de dominio principal que está relacionado con la distribución de CloudFront actual (por ejemplo, d111111abcdef8.cloudfront.net).

1. **`origin-fbl`**

   La cantidad de segundos de latencia del primer byte entre CloudFront y el origen.

1. **`origin-lbl`**

   La cantidad de segundos de latencia del último byte entre CloudFront y el origen.

1. **`asn`**

   El número de sistema autónomo (ASN) del espectador.

1. <a name="CMCD-real-time-logging-fields"></a>
**Campos de CMCD en los registros de acceso en tiempo real**  
Para obtener más información sobre estos campos, consulte el documento [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`**

   La velocidad de bits codificada del objeto de audio o vídeo solicitado. 

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

   La longitud del búfer del objeto multimedia solicitado.

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

   Indica si el búfer se ha agotado en algún momento entre la solicitud anterior y la solicitud de objeto. Esto puede provocar que el reproductor se encuentre en un estado de repetición de almacenamiento en búfer, lo que puede detener la reproducción de vídeo o audio. 

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

   Una cadena única que identifica el contenido actual.

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

   La duración de la reproducción del objeto solicitado (en milisegundos). 

1. **`cmcd-deadline`**

   El plazo a partir de la hora de solicitud en que debe estar disponible la primera muestra de este objeto, de forma que se evite un estado de búfer insuficiente u otros problemas de reproducción. 

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

   El rendimiento entre el cliente y el servidor, medido por el cliente.

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

   La ruta relativa del siguiente objeto solicitado.

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

   Si la siguiente solicitud es de objeto parcial, esta cadena indica el intervalo de bytes que debe solicitarse.

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

   El tipo de medio del objeto actual que se está solicitando.

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

   1 si es en tiempo real, 2 si es a doble velocidad, 0 si no se está reproduciendo. 

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

   El rendimiento máximo solicitado que el cliente considera suficiente para la entrega de recursos.

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

   El formato de streaming que define la solicitud actual.

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

   Un GUID que identifica la sesión de reproducción actual.

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

   Token que identifica la disponibilidad de los segmentos. `v` = todos los segmentos están disponibles. `l` = los segmentos van estando disponibles con el tiempo.

1. **`cmcd-startup`**

   La clave se incluye sin valor si el objeto se necesita de forma urgente durante el inicio, la búsqueda o la recuperación tras un evento de vaciado del búfer.

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

   La representación con la tasa de bits más alta que el cliente puede reproducir.

1. **`cmcd-version`**

   La versión de esta especificación utilizada para interpretar los nombres y valores de clave definidos. Si se omite esta clave, el cliente y el servidor *deben* interpretar los valores tal como los define la versión 1.

1. **`r-host`**

   Este campo se envía para las solicitudes de origen e indica el dominio del servidor de origen utilizado para entregar el objeto. En caso de errores, puede usar este campo para buscar el último origen que se ha intentado, por ejemplo: `cd8jhdejh6a.mediapackagev2.us-east-1.amazonaws.com`.

1. **`sr-reason`**

   Este campo proporciona el motivo por el que se seleccionó el origen. Está vacío cuando se realiza una solicitud al origen principal.

   Si se produce una conmutación por error del origen, el campo contendrá el código de error HTTP que provocó la conmutación por error, como `Failover:403` o `Failover:502`. En caso de conmutación por error del origen, si la solicitud que se ha reintentado también falla y no ha configurado páginas de error personalizadas, `r-status` indica la respuesta del segundo origen. Sin embargo, si ha configurado páginas de error personalizadas junto con la conmutación por error del origen, contendrá la respuesta del segundo origen si la solicitud falló y, en su lugar, se devolvió una página de error personalizada.

   Si no se produce ninguna conmutación por error del origen, pero se selecciona el origen mediante la resiliencia basada en la calidad multimedia (MQAR), se registrará como `MediaQuality`. Para obtener más información, consulte [Resiliencia basada en la calidad multimedia](media-quality-score.md).

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

   Este campo indica la puntuación de confianza de la calidad multimedia (MQCS) (rango: 0-100) de los segmentos multimedia que CloudFront recuperó en los encabezados de respuesta de los CMSD de MediaPackage v2. Este campo está disponible para las solicitudes que coincidan con un comportamiento de caché que tenga un grupo de origen activado para MQAR. CloudFront registra este campo para los segmentos multimedia que también se entregan desde su caché, además de las solicitudes de origen. Para obtener más información, consulte [Resiliencia basada en la calidad multimedia](media-quality-score.md).

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

   El ID del inquilino de la distribución.

1. **`connection-id`**

   Un identificador único para la conexión TLS. 

   Debe habilitar los mTLS para las distribuciones antes de poder obtener información para este campo. Para obtener más información, consulte [Autenticación TLS mutua con CloudFront (mTLS de espectador)TLS mutua de origen con CloudFront](mtls-authentication.md).

### Punto de conexión (Kinesis Data Streams)
<a name="real-time-logs-endpoint"></a>

El punto de conexión contiene información sobre Kinesis Data Streams al que desea enviar registros en tiempo real. Se proporciona el nombre de recurso de Amazon (ARN) de la secuencia de datos.

Para obtener más información acerca de la creación de Kinesis Data Streams, consulte los siguientes temas en la *Guía para desarrolladores de Amazon Kinesis Data Streams*.
+ [Creación y administración de flujos](https://docs.aws.amazon.com/streams/latest/dev/working-with-streams.html)
+ [Realización de operaciones básicas de Kinesis Data Streams con la AWS CLI](https://docs.aws.amazon.com/streams/latest/dev/fundamental-stream.html)
+ [Creación de un flujo](https://docs.aws.amazon.com/streams/latest/dev/kinesis-using-sdk-java-create-stream.html) (utiliza AWS SDK para Java)

Cuando crea una secuencia de datos, debe especificar el número de particiones. Utilice la siguiente información que le ayudará a estimar el número de particiones que necesita.

**Para calcular el número de particiones para la secuencia de datos de Kinesis**

1. Calcule (o estime) la cantidad de solicitudes por segundo que la distribución de CloudFront recibe.

   Puede utilizar los [informes de uso de CloudFront](https://console.aws.amazon.com/cloudfront/v4/home#/usage) (en la consola de CloudFront) y las [métricas de CloudFront](viewing-cloudfront-metrics.md#monitoring-console.distributions) (en las consolas CloudFront y Amazon CloudWatch) que le ayudarán a calcular las solicitudes por segundo.

1. Determine el tamaño normal de una única entrada de registro de acceso en tiempo real.

   En general, un único registro de log es de unos 500 bytes. Un registro grande que incluye todos los campos suele pesar aproximadamente 1KB.

   Si no está seguro de cuál es el tamaño de su registro, puede habilitar los registros en tiempo real con una frecuencia de muestro baja (por ejemplo, 1 %) y luego calcular el promedio de tamaño de registro a través de los datos de supervisión en Kinesis Data Streams (total de bytes entrantes dividido por el número total de registros).

1. En la [página de precios de Amazon Kinesis Data Streams](https://aws.amazon.com/kinesis/data-streams/pricing/), en Calculadora de precios de AWS, elija **Crear el presupuesto personalizado ahora**.
   + En la calculadora, introduzca el número de solicitudes (registros) por segundo.
   + Introduzca el tamaño medio de registro de un único registro.
   + Elija **Mostrar cálculos**.

   La calculadora de precios le muestra el número de particiones que necesita y el costo estimado.

### rol de IAM
<a name="real-time-logs-IAM"></a>

El rol de AWS Identity and Access Management (IAM) que concede permiso de CloudFront para entregar registros de acceso en tiempo real al flujo de datos de Kinesis Data Stream.

Cuando se crea una configuración de registro de acceso en tiempo real con la consola de CloudFront, se puede elegir **Crear un nuevo rol de servicio** para permitir a la consola crear el rol de IAM automáticamente.

Cuando se crea una configuración de registro de acceso en tiempo real con AWS CloudFormation o la API de CloudFront (AWS CLI o SDK), uno mismo debe crear el rol de IAM y proporcionar el ARN del rol. Para crear el rol de IAM usted mismo, utilice las siguientes políticas.

**Política de confianza del rol de IAM**

Para utilizar la siguiente política de confianza de roles de IAM, sustituya *111122223333* por el número de Cuenta de AWS. El elemento `Condition` de esta política ayuda a prevenir el [problema del suplente confuso](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) porque CloudFront solo puede asumir este rol en nombre de una distribución de la Cuenta de AWS.

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

****  

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

------

**Política de permisos del rol de IAM para una secuencia de datos no cifrada**

Para utilizar la siguiente política, reemplace *arn:aws:kinesis:us-east-2:123456789012:stream/StreamName* por el ARN de su Kinesis Data Streams.

------
#### [ 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"
            ]
        }
    ]
}
```

------

**Política de permisos del rol de IAM para una secuencia de datos cifrada**

Para utilizar la siguiente política, reemplace *arn:aws:kines:us-east- 2:123456789012:Stream/StreamName* por el ARN de su Kinesis Data Streams y *arn:aws:kms:us-east- 2:123456789012:key/e58a3d0b-fe4f-4047-a495-ae03cc73d486* por el ARN de su AWS KMS key.

------
#### [ 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"
            ]
        }
    ]
}
```

------

****  

## Creación de un consumidor de Kinesis Data Streams
<a name="real-time-log-consumer-guidance"></a>

Para leer y analizar los registros de acceso en tiempo real, se crea o utiliza un *consumidor* de Kinesis Data Streams. Cuando se crea un consumidor para registros en tiempo real de CloudFront, es importante saber que los campos de cada entrada de registro de acceso en tiempo real siempre se envían en el mismo orden, como se muestra en la sección [Fields](#real-time-logs-fields). Asegúrese de crear su consumidor para acomodar este pedido fijo.

Por ejemplo, considere una configuración de registro de acceso en tiempo real que incluya solo estos tres campos: `time-to-first-byte`, `sc-status` y `c-country`. En este escenario, el último campo, `c-country`, siempre es el campo número 3 en cada registro de log. Sin embargo, si posteriormente agrega campos a la configuración de registro de acceso en tiempo real, la ubicación de cada campo en un registro puede cambiar.

Por ejemplo, si agrega los campos `sc-bytes` y `time-taken` a la configuración de registro de acceso en tiempo real, estos campos se insertan en cada entrada de registro según el orden mostrado en la sección [Fields](#real-time-logs-fields). El orden resultante de los cinco campos es `time-to-first-byte`, `sc-status`, `sc-bytes`, `time-taken` y `c-country`. El campo `c-country` era originalmente el campo número 3, pero ahora es el campo número 5. Asegúrese de que la aplicación de consumidor puede gestionar campos que cambian de posición en una entrada de registro, en caso de que agregue campos a su configuración de registro de acceso en tiempo real.

## Resolución de problemas de registros de acceso en tiempo real
<a name="real-time-log-troubleshooting"></a>

Después de crear una configuración de registro de acceso en tiempo real, es posible que encuentre que no se envían registros (o no todos los registros) a Kinesis Data Streams. En este caso, primero debe comprobar que la distribución de CloudFront recibe solicitudes de lector. Si es así, puede comprobar la siguiente configuración para continuar la solución de problemas.

**Permisos de roles de IAM**  
Para enviar entradas de registros de acceso en tiempo real al flujo de datos de Kinesis, CloudFront utiliza el rol de IAM de la configuración de registro de acceso en tiempo real. Asegúrese de que la política de confianza de roles y la política de permisos de roles coinciden con las políticas mostradas en [rol de IAM](#real-time-logs-IAM).

**Limitación controlada de Kinesis Data Streams**  
Si CloudFront escribe entradas de registros de acceso en tiempo real en el flujo de datos de Kinesis más rápido de lo que el flujo puede manejar, es posible que Kinesis Data Streams limite las solicitudes de CloudFront. En este caso, puede aumentar el número de particiones en la secuencia de datos de Kinesis. Cada partición puede admitir escrituras de hasta 1000 registros por segundo, hasta un máximo de escritura de datos de 1 MB por segundo.