

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Funciones de resolución de problemas y supervisión
<a name="monetization-functions-troubleshooting"></a>

Esta página le ayuda a diagnosticar los errores de funcionamiento más comunes y a supervisar el rendimiento de las funciones en la producción. La sección de solución de problemas está organizada por síntomas: comience con lo que observe y, a continuación, siga la causa y corríjala.

## Supervisión
<a name="monetization-functions-troubleshooting-monitoring"></a>

### CloudWatch métricas
<a name="monetization-functions-troubleshooting-cw-metrics"></a>

MediaTailor publica métricas para la ejecución de funciones en Amazon CloudWatch. No es necesario suscribirse.

**Hook-level métricas**: un punto de datos por ejecución de enlaces durante el ciclo de vida:


| Métrica | Description (Descripción) | Dimensiones | 
| --- | --- | --- | 
| PreSessionInitHook.Invocations | Recuento de ejecuciones de ganchos | ConfigurationName | 
| PreSessionInitHook.Errors | Recuento de errores de enganche | ConfigurationName | 
| PreSessionInitHook.Latency | Tiempo de ejecución del gancho (ms) | ConfigurationName | 
| PreAdsRequestHook.Invocations | Recuento de ejecuciones de ganchos | ConfigurationName | 
| PreAdsRequestHook.Errors | Recuento de errores de enganche | ConfigurationName | 
| PreAdsRequestHook.Latency | Tiempo de ejecución del gancho (ms) | ConfigurationName | 

**Function-level métricas**: un punto de datos por ejecución de función individual:


| Métrica | Description (Descripción) | Dimensiones | 
| --- | --- | --- | 
| Function.Invocations | Recuento de ejecuciones de funciones | ConfigurationName, FunctionId, FunctionType, HookType | 
| Function.Errors | Recuento de errores de funciones | ConfigurationName, FunctionId, FunctionType, HookType | 
| Function.Latency | Tiempo de ejecución de la función (ms) | ConfigurationName, FunctionId, FunctionType, HookType | 

Para obtener más información sobre cómo configurar las alarmas y trabajar con estas métricas, consulte[Supervisión AWS Elemental MediaTailor con las CloudWatch métricas de Amazon](monitoring-cloudwatch-metrics.md).

### Eventos de registro
<a name="monetization-functions-troubleshooting-log-events"></a>

MediaTailor emite un registro de eventos para la ejecución de la función. Los eventos de error se emiten de forma predeterminada. Los eventos completados y resumidos son opcionales.


| Tipo de evento | Predeterminado/ Opt-in | Grupo de registro | Description (Descripción) | 
| --- | --- | --- | --- | 
| PRE\_SESSION\_INIT\_HOOK\_SUMMARY | Opt-in | Registro de manifiestos | Resumen de ejecución de Hook (success/error) | 
| PRE\_SESSION\_INIT\_HOOK\_ERROR | Predeterminado | Registro de manifiestos | Fallo de enlace con ErrorType y causa | 
| PRE\_SESSION\_INIT\_FUNCTION\_COMPLETED | Opt-in | Registro de manifiestos | Función individual completada con input/output | 
| PRE\_SESSION\_INIT\_FUNCTION\_ERROR | Predeterminado | Registro de manifiestos | Fallo de función individual | 
| PRE\_ADS\_REQUEST\_HOOK\_SUMMARY | Opt-in | Registro de interacciones de ADS | Resumen de ejecución de Hook (success/error) | 
| PRE\_ADS\_REQUEST\_HOOK\_ERROR | Predeterminado | Registro de interacciones de ADS | Fallo de enlace con ErrorType y causa | 
| PRE\_ADS\_REQUEST\_FUNCTION\_COMPLETED | Opt-in | Registro de interacciones de ADS | Función individual completada con input/output | 
| PRE\_ADS\_REQUEST\_FUNCTION\_ERROR | Predeterminado | Registro de interacciones de ADS | Fallo de función individual | 

Para activar el registro de eventos opcionales, consulte[Supervisión AWS Elemental MediaTailor con las CloudWatch métricas de Amazon](monitoring-cloudwatch-metrics.md).

Utilice el `eventId` campo para correlacionar eventos a nivel de gancho y a nivel de función para la misma ejecución.

Los siguientes filtros de consultas de Amazon CloudWatch Logs Insights utilizan los eventos de error `eventId` para rastrear una sola ejecución:

```
fields @timestamp, eventType, functionId, errorType, cause
| filter eventId = "5dc6f040-0f72-4e8c-a64e-25eeef62708c"
| sort @timestamp asc
```

## Resolución de problemas
<a name="monetization-functions-troubleshooting-guide"></a>

Cuando se produce un error en una función, MediaTailor registra un `errorType` campo en el caso de error. Utilice este campo para identificar la clase de error:


| Tipo de error | Description (Descripción) | 
| --- | --- | 
| SYNTAX\_ERROR | La expresión no se pudo compilar o encontró un error de tipo de tiempo de ejecución | 
| RESOURCE\_LIMIT\_ERROR | La expresión superó los límites de tiempo de CPU, memoria o profundidad de pila | 
| RESTRICTION\_ERROR | La expresión utilizó una función bloqueada o se superó el límite de tamaño de la carga útil de entrada | 
| TIMEOUT\_ERROR | La ejecución de la función superó su límite de tiempo | 
| VALIDATION\_ERROR | La ruta de salida apunta a un campo que no se puede escribir en el ámbito del enlace actual | 
| INTERNAL\_ERROR | Fallo de infraestructura no relacionado con la función | 

Las entradas están organizadas por síntoma y hacen referencia a estos tipos de error cuando corresponde.

### La expresión devuelve un valor nulo inesperadamente
<a name="monetization-functions-ts-null"></a>

**Síntoma:** el valor de salida que esperabas rellenar aparece `null` o falta en los parámetros del reproductor.

**Causas posibles:**


| Causa | ¿Cómo identificarlo | Fix | 
| --- | --- | --- | 
| El campo de entrada no existe en este enlace del ciclo de vida. | Hiciste referencia adsRequest.url a una PRE\_SESSION\_INITIALIZATION función. Los datos de la solicitud de ADS no están disponibles al inicio de la sesión. | Mueva la función al enlace del PRE\_ADS\_REQUEST ciclo de vida o utilice un campo de entrada diferente. Consulte [Enlaces de ciclo de vida](monetization-functions-hooks.md). | 
| Falta el campo de entrada en los datos de la sesión. | Hiciste referencia a ese parámetroplayer\_params.campaign\_id, pero el reproductor no lo pasó al inicializar la sesión. | Úselo $exists() para comprobar antes de acceder:{%$exists(player\_params.campaign\_id) ? player\_params.campaign\_id : 'default'%}. | 
| Escribiste un objeto o matriz en los parámetros del reproductor o en la solicitud ADS. | Estos espacios de nombres solo aceptan cadenas, números y valores booleanos. Los objetos y las matrices se filtran. | Almacene datos complejos temp.\* y extraiga cadenas, números o valores booleanos en un paso posterior. | 

### `RESOURCE_LIMIT_ERROR`: desbordamiento de pila
<a name="monetization-functions-ts-stack-overflow"></a>

**Síntoma:** la función falla con y. `errorType: "RESOURCE_LIMIT_ERROR"` `cause: "Stack overflow error"`

**Causa:** la expresión superó la profundidad máxima de pila de 100 niveles. Esto suele ocurrir con expresiones condicionales (if/then/else) muy anidadas o con asignaciones de variables complejas.

Esto significa que la expresión tiene demasiados niveles de anidación como para MediaTailor procesarla.

**Solución:** simplifica la expresión. Divida la lógica compleja en varias entradas de salida o varios pasos en un ejecutor secuencial.

### `RESOURCE_LIMIT_ERROR`: tiempo de espera de la CPU
<a name="monetization-functions-ts-cpu-timeout"></a>

**Síntoma:** la función falla con y. `errorType: "RESOURCE_LIMIT_ERROR"` `cause: "Expression evaluation timeout: Check for infinite loop"`

**Causa:** la expresión superó el límite de tiempo de CPU de 100 ms. Esto puede ocurrir con expresiones que realizan cálculos costosos en estructuras de datos de gran tamaño.

**Solución:** reduce la complejidad de la expresión. Si está procesando matrices grandes, considere la posibilidad de trasladar esa lógica a un servicio externo y llamarlo con una `HTTP_REQUEST` función.

### `RESTRICTION_ERROR`: Función no permitida
<a name="monetization-functions-ts-function-not-allowed"></a>

**Síntoma:** la función falla con y. `errorType: "RESTRICTION_ERROR"` `cause: "Function '<name>' is not allowed"`

**Causa:** la expresión llama a una función de JSonata que no está en la lista de 38 funciones permitidas. Entre los ejemplos más comunes `$filter` se incluyen`$reduce`, `$eval``$split`, y. `$join`

**Solución:** compruebe el `cause` campo para ver el nombre de la función bloqueada. Sustitúyalo por una alternativa permitida. Consulte [Referencia de expresión JSonata](monetization-functions-jsonata.md) la lista completa de 38 funciones permitidas.

Las funciones permitidas más utilizadas incluyen `$string` `$number``$substring`,`$contains`, y`$encodeUrlComponent`.

### `RESTRICTION_ERROR`: Expresión demasiado larga
<a name="monetization-functions-ts-expression-too-long"></a>

**Síntoma:** la función no se puede crear ni actualizar con. `cause: "Expression length <actual> exceeds limit <limit>"`

**Causa:** una sola expresión supera los 1000 caracteres.

**Solución:** divide la expresión en partes más pequeñas. Usa varias entradas de salida o divide la lógica en varios pasos en un ejecutor secuencial. Utilice el enlace de variables (`:=`) para evitar la repetición de subexpresiones largas.

### Error HTTP: el código de estado es nulo
<a name="monetization-functions-ts-status-null"></a>

**Síntoma:** en la salida de una `HTTP_REQUEST` función, `response.statusCode` es`null`.

**Causa:** no se pudo acceder a la API externa, se agotó el tiempo de espera de la conexión o se produjo un error de red. Cuando esto ocurre, se MediaTailor establece `response.statusCode` en`null`, en y `response.body` en`null`. `response.text` `"Internal Error"`

**Solución:** compruebe siempre `response.statusCode` antes de acceder a los datos de respuesta:

```
{%response.statusCode = 200 ? response.body.value : 'default'%}
```

Esta expresión comprueba si la llamada HTTP devolvió un código de estado 200. Si lo hizo, utiliza el valor de respuesta. De lo contrario, vuelve a su valor predeterminado.

Si esto ocurre con frecuencia, compruebe si la API externa está en buen estado. Considera aumentarla `RequestTimeoutMilliseconds` si la API es lenta o disminuirla si quieres que falle rápidamente.

### Error HTTP: el cuerpo de la respuesta es nulo
<a name="monetization-functions-ts-body-null"></a>

**Síntoma:** `response.statusCode` es 200 pero `response.body` lo es`null`.

**Causa:** el cuerpo de la respuesta no es un JSON válido o tiene más de 20 000 caracteres. MediaTailor solo analiza las respuestas JSON con un máximo de 20 000 caracteres. `response.body`

**Solución:** se usa `response.text` como alternativa. El `response.text` campo contiene el cuerpo de la respuesta sin procesar truncado a 20 000 caracteres:

```
{%response.statusCode = 200 ? ($exists(response.body.id) ? response.body.id : $substring(response.text, 0, 100)) : 'error'%}
```

Si los datos que necesita superan el límite de 20 000 caracteres, considere la posibilidad de solicitar a la API externa que devuelva una respuesta más pequeña (por ejemplo, solicitando campos específicos).

### Error HTTP: error en la validación de la URL
<a name="monetization-functions-ts-url-validation"></a>

**Síntoma:** la función falla en tiempo de ejecución y aparece un mensaje que indica que la URL tiene un formato incorrecto, utiliza un esquema no válido o supera la longitud máxima.

**Causas posibles:**


| Causa | Fix | 
| --- | --- | 
| La URL no utiliza http ohttps. | Asegúrese de que la expresión URL produzca una URL que comience por http:// ohttps://. | 
| Tras evaluar la expresión, la URL supera los 2.048 caracteres. | Acorte la URL. Mueva los valores de parámetros grandes al cuerpo de la solicitud mediante un método POST. | 
| La URL tiene un formato incorrecto (no es una URI válida). | Compruebe si faltan caracteres o hay caracteres adicionales en la expresión. Se utiliza $encodeUrlComponent() para consultar valores de parámetros que pueden contener caracteres especiales. | 

### `VALIDATION_ERROR`
<a name="monetization-functions-ts-validation-error"></a>

**Síntoma:** la función falla con`errorType: "VALIDATION_ERROR"`. Este error puede producirse en el momento de la creación (al crear o actualizar la función) o en el momento de la ejecución (cuando la función se ejecuta durante una sesión).

**Causas posibles:**


| Causa | Ejemplo | Fix | 
| --- | --- | --- | 
| La clave de salida apunta a un espacio de nombres que no se puede escribir en el enlace actual. | Escribir adsRequest.url en una función adjunta a. PRE\_SESSION\_INITIALIZATION | Comprueba qué espacios de nombres de salida están permitidos en tu enlace de ciclo de vida. PRE\_SESSION\_INITIALIZATIONsolo permite. player\_params.\* Mueva la función al gancho correcto o cambie la clave de salida. Consulte [Enlaces de ciclo de vida](monetization-functions-hooks.md). | 
| La clave de salida utiliza caracteres no válidos. | Una clave de salida como player\_params.device type (con un espacio). Solo se permiten letras, números, guiones bajos y guiones. | Cambie el nombre de la clave de salida para usar solo caracteres válidos. Por ejemplo, utilice player\_params.device\_type en su lugar. | 
| La clave de salida no comienza con un prefijo válido. | Una clave de salida como custom.myValue en lugar de player\_params.myValue otemp.myValue. | Utilice un prefijo de salida válido:player\_params.\*,temp.\*, oadsRequest.\*. | 
| Una expresión JSonata tiene un error de sintaxis. | Falta una cita de cierre o una condición incompleta:. {%session.id & %} | Revise la expresión para ver si faltan comillas, paréntesis que no coincidan u operadores no admitidos como o. ?? ?: | 
| Falta un campo obligatorio en una función HTTP\_REQUEST. | El campo URL está vacío o no se ha especificado el método. | Asegúrese de que los campos URL y método estén configurados. El método debe ser GET oPOST. | 
| La URL creada por la expresión no es válida. | La URL evaluada utiliza un esquema no compatibleftp://, supera los 2.048 caracteres o tiene un formato incorrecto. | Compruebe que la expresión URL produzca una URL válidahttp://. https:// Se utiliza $encodeUrlComponent() para consultar valores de parámetros que pueden contener caracteres especiales. | 
| Un encabezado HTTP contiene caracteres no válidos o utiliza un nombre restringido. | El valor del encabezado contiene saltos de línea o el nombre del encabezado es host otransfer-encoding. | Elimine los caracteres no válidos de los valores del encabezado. Evite los nombres de encabezado restringidos. Consulte los límites [HTTP\_REQUEST](monetization-functions-types-http-request.md) de los encabezados. | 

Compruebe el `cause` campo del evento del registro de errores: identifica qué campo o expresión no se validó.

### `INTERNAL_ERROR`
<a name="monetization-functions-ts-internal-error"></a>

**Síntoma:** la función falla con`errorType: "INTERNAL_ERROR"`.

**Causa:** se ha producido un error en la infraestructura que no está relacionado con la configuración de la función.

**Solución:** vuelve a intentar la solicitud. Si el error persiste, ponte en contacto con AWS Support.