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
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
CloudWatch métricas
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, consulteSupervisión AWS Elemental MediaTailor con las CloudWatch métricas de Amazon.
Eventos de registro
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, consulteSupervisión AWS Elemental MediaTailor con las CloudWatch métricas de Amazon.
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
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
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. |
| 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
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
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
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 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
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
Síntoma: en la salida de una HTTP_REQUEST función, response.statusCode esnull.
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 ennull, en y response.body ennull. 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
Síntoma: response.statusCode es 200 pero response.body lo esnull.
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
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
Síntoma: la función falla conerrorType: "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. |
| 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 de los encabezados. |
Compruebe el cause campo del evento del registro de errores: identifica qué campo o expresión no se validó.
INTERNAL_ERROR
Síntoma: la función falla conerrorType: "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.