View a markdown version of this page

Funciones de resolución de problemas y supervisión - AWS Elemental MediaTailor

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étricaDescription (Descripción)Dimensiones
PreSessionInitHook.InvocationsRecuento de ejecuciones de ganchosConfigurationName
PreSessionInitHook.ErrorsRecuento de errores de engancheConfigurationName
PreSessionInitHook.LatencyTiempo de ejecución del gancho (ms)ConfigurationName
PreAdsRequestHook.InvocationsRecuento de ejecuciones de ganchosConfigurationName
PreAdsRequestHook.ErrorsRecuento de errores de engancheConfigurationName
PreAdsRequestHook.LatencyTiempo de ejecución del gancho (ms)ConfigurationName

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

MétricaDescription (Descripción)Dimensiones
Function.InvocationsRecuento de ejecuciones de funcionesConfigurationName, FunctionId, FunctionType, HookType
Function.ErrorsRecuento de errores de funcionesConfigurationName, FunctionId, FunctionType, HookType
Function.LatencyTiempo 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 eventoPredeterminado/ Opt-inGrupo de registroDescription (Descripción)
PRE_SESSION_INIT_HOOK_SUMMARYOpt-inRegistro de manifiestosResumen de ejecución de Hook (success/error)
PRE_SESSION_INIT_HOOK_ERRORPredeterminadoRegistro de manifiestosFallo de enlace con ErrorType y causa
PRE_SESSION_INIT_FUNCTION_COMPLETEDOpt-inRegistro de manifiestosFunción individual completada con input/output
PRE_SESSION_INIT_FUNCTION_ERRORPredeterminadoRegistro de manifiestosFallo de función individual
PRE_ADS_REQUEST_HOOK_SUMMARYOpt-inRegistro de interacciones de ADSResumen de ejecución de Hook (success/error)
PRE_ADS_REQUEST_HOOK_ERRORPredeterminadoRegistro de interacciones de ADSFallo de enlace con ErrorType y causa
PRE_ADS_REQUEST_FUNCTION_COMPLETEDOpt-inRegistro de interacciones de ADSFunción individual completada con input/output
PRE_ADS_REQUEST_FUNCTION_ERRORPredeterminadoRegistro de interacciones de ADSFallo 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 errorDescription (Descripción)
SYNTAX_ERRORLa expresión no se pudo compilar o encontró un error de tipo de tiempo de ejecución
RESOURCE_LIMIT_ERRORLa expresión superó los límites de tiempo de CPU, memoria o profundidad de pila
RESTRICTION_ERRORLa expresión utilizó una función bloqueada o se superó el límite de tamaño de la carga útil de entrada
TIMEOUT_ERRORLa ejecución de la función superó su límite de tiempo
VALIDATION_ERRORLa ruta de salida apunta a un campo que no se puede escribir en el ámbito del enlace actual
INTERNAL_ERRORFallo 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 identificarloFix
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:

CausaFix
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:

CausaEjemploFix
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.