View a markdown version of this page

Fonctions de dépannage et de surveillance - AWS Elemental MediaTailor

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Fonctions de dépannage et de surveillance

Cette page vous aide à diagnostiquer les erreurs de fonctionnement courantes et à surveiller les performances des fonctions en production. La section de résolution des problèmes est organisée par symptôme : commencez par ce que vous observez, puis suivez la cause et corrigez le problème.

Contrôle

CloudWatch métriques

MediaTailor publie des métriques relatives à l'exécution des fonctions sur Amazon CloudWatch. Aucun opt-in n'est requis.

Hook-level métriques : un point de données par cycle de vie exécuté par un hook :

MétriqueDescriptionDimensions
PreSessionInitHook.InvocationsNombre d'exécutions de hameçonsConfigurationName
PreSessionInitHook.ErrorsNombre d'erreurs de crochetConfigurationName
PreSessionInitHook.LatencyTemps d'exécution du hook (ms)ConfigurationName
PreAdsRequestHook.InvocationsNombre d'exécutions de hameçonsConfigurationName
PreAdsRequestHook.ErrorsNombre d'erreurs de crochetConfigurationName
PreAdsRequestHook.LatencyTemps d'exécution du hook (ms)ConfigurationName

Function-level métriques : un point de données par exécution de fonction individuelle :

MétriqueDescriptionDimensions
Function.InvocationsNombre d'exécutions de fonctionsConfigurationName, FunctionId, FunctionType, HookType
Function.ErrorsNombre d'erreurs de fonctionnementConfigurationName, FunctionId, FunctionType, HookType
Function.LatencyTemps d'exécution de la fonction (ms)ConfigurationName, FunctionId, FunctionType, HookType

Pour plus de détails sur la configuration des alarmes et l'utilisation de ces métriques, consultezContrôle AWS Elemental MediaTailor avec Amazon CloudWatch Metrics.

Événements de journaux

MediaTailor émet des événements de journal pour l'exécution de la fonction. Les événements d'erreur sont émis par défaut. Les événements terminés et récapitulatifs sont facultatifs.

Type d’événementPar défaut/ Opt-inGroupe de journauxDescription
PRE_SESSION_INIT_HOOK_SUMMARYOpt-inJournal du manifesteRésumé de l'exécution du hook (success/error)
PRE_SESSION_INIT_HOOK_ERRORPar défautJournal du manifesteDéfaillance du hook avec ErrorType et cause
PRE_SESSION_INIT_FUNCTION_COMPLETEDOpt-inJournal du manifesteFonction individuelle complétée par input/output
PRE_SESSION_INIT_FUNCTION_ERRORPar défautJournal du manifesteDéfaillance fonctionnelle individuelle
PRE_ADS_REQUEST_HOOK_SUMMARYOpt-inJournal des interactions ADSRésumé de l'exécution du hook (success/error)
PRE_ADS_REQUEST_HOOK_ERRORPar défautJournal des interactions ADSDéfaillance du hook avec ErrorType et cause
PRE_ADS_REQUEST_FUNCTION_COMPLETEDOpt-inJournal des interactions ADSFonction individuelle complétée par input/output
PRE_ADS_REQUEST_FUNCTION_ERRORPar défautJournal des interactions ADSDéfaillance fonctionnelle individuelle

Pour activer le journal des événements opt-in, voirContrôle AWS Elemental MediaTailor avec Amazon CloudWatch Metrics.

Utilisez le eventId champ pour corréler les événements au niveau du hook et au niveau de la fonction pour une même exécution.

Les requêtes Amazon CloudWatch Logs Insights suivantes filtrent les événements d'erreur fonctionnelle eventId afin de suivre une seule exécution :

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

Résolution des problèmes

Lorsqu'une fonction échoue, MediaTailor enregistre un errorType champ dans l'événement d'erreur. Utilisez ce champ pour identifier la classe de défaillance :

Error type (Type d'erreur)Description
SYNTAX_ERRORL'expression n'a pas pu être compilée ou a rencontré une erreur de type d'exécution
RESOURCE_LIMIT_ERRORL'expression a dépassé les limites de temps du processeur, de mémoire ou de profondeur de pile
RESTRICTION_ERRORL'expression a utilisé une fonction bloquée ou la limite de taille de la charge utile en entrée a été dépassée
TIMEOUT_ERRORL'exécution de la fonction a dépassé sa limite de temps
VALIDATION_ERRORLe chemin de sortie cible un champ non inscriptible dans la portée du hook actuel
INTERNAL_ERRORDéfaillance de l'infrastructure non liée à la fonction

Les entrées sont organisées par symptôme et font référence à ces types d'erreur, le cas échéant.

L'expression renvoie null de manière inattendue

Symptôme : une valeur de sortie que vous vous attendiez à renseigner est null ou est absente des paramètres du joueur.

Causes possibles :

CauseComment identifierCorriger
Le champ de saisie n'existe pas à ce crochet du cycle de vie. Vous l'avez référencé adsRequest.url dans une PRE_SESSION_INITIALIZATION fonction. Les données de demande ADS ne sont pas disponibles au début de la session. Déplacez la fonction vers le crochet PRE_ADS_REQUEST du cycle de vie ou utilisez un autre champ de saisie. Consultez Hooks de cycle de vie.
Le champ de saisie est absent des données de session. Vous l'avez référencéplayer_params.campaign_id, mais le joueur n'a pas transmis ce paramètre lors de l'initialisation de la session. $exists()À utiliser pour vérifier avant d'accéder :{%$exists(player_params.campaign_id) ? player_params.campaign_id : 'default'%}.
Vous avez écrit un objet ou un tableau dans les paramètres du joueur ou dans la requête ADS. Ces espaces de noms n'acceptent que des chaînes, des nombres et des booléens. Les objets et les tableaux sont filtrés. Stockez des données complexes temp.* et extrayez-en des chaînes, des nombres ou des booléens lors d'une étape ultérieure.

RESOURCE_LIMIT_ERROR : Débordement de pile

Symptôme : La fonction échoue avec errorType: "RESOURCE_LIMIT_ERROR" etcause: "Stack overflow error".

Cause : L'expression a dépassé la profondeur de pile maximale de 100 niveaux. Cela se produit généralement avec des expressions conditionnelles (if/then/else) profondément imbriquées ou des affectations de variables complexes.

Cela signifie que l'expression comporte trop de niveaux d'imbrication MediaTailor pour être traitée.

Correctif : Simplifiez l'expression. Divisez une logique complexe en plusieurs entrées de sortie ou en plusieurs étapes dans un exécuteur séquentiel.

RESOURCE_LIMIT_ERROR : délai d'expiration du processeur

Symptôme : La fonction échoue avec errorType: "RESOURCE_LIMIT_ERROR" etcause: "Expression evaluation timeout: Check for infinite loop".

Cause : L'expression a dépassé la limite de temps du processeur de 100 ms. Cela peut se produire avec des expressions qui effectuent des calculs coûteux sur de grandes structures de données.

Correctif : réduisez la complexité de l'expression. Si vous traitez de grands tableaux, pensez à déplacer cette logique vers un service externe et à l'appeler avec une HTTP_REQUEST fonction.

RESTRICTION_ERROR : Fonction non autorisée

Symptôme : La fonction échoue avec errorType: "RESTRICTION_ERROR" etcause: "Function '<name>' is not allowed".

Cause : L'expression appelle une fonction JSonata qui ne figure pas dans la liste autorisée des 38 fonctions. Les exemples courants incluent $filter$reduce,$eval,$split, et$join.

Correctif : Vérifiez cause dans le champ le nom de la fonction bloquée. Remplacez-le par une alternative autorisée. Consultez Référence d'expression JSonata la liste complète des 38 fonctions autorisées.

Les fonctions autorisées couramment utilisées incluent $string$number,$substring,$contains, et$encodeUrlComponent.

RESTRICTION_ERROR : Expression trop longue

Symptôme : La fonction ne parvient pas à être créée ou mise à jour aveccause: "Expression length <actual> exceeds limit <limit>".

Cause : une seule expression dépasse 1 000 caractères.

Correctif : Divisez l'expression en parties plus petites. Utilisez plusieurs entrées de sortie ou répartissez la logique en plusieurs étapes dans un exécuteur séquentiel. Utilisez la liaison variable (:=) pour éviter de répéter de longues sous-expressions.

Erreur HTTP : le code d'état est nul

Symptôme : Dans le résultat d'une HTTP_REQUEST fonction, response.statusCode c'estnull.

Cause : L'API externe était inaccessible, le délai de connexion a expiré ou une erreur réseau s'est produite. Lorsque cela se produit, MediaTailor définit response.body sur nullnull, response.statusCode to et response.text to"Internal Error".

Correctif : vérifiez toujours response.statusCode avant d'accéder aux données de réponse :

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

Cette expression vérifie si l'appel HTTP a renvoyé un code d'état 200. Si c'est le cas, il utilise la valeur de réponse. Dans le cas contraire, la valeur par défaut est rétablie.

Si cela se produit fréquemment, vérifiez si l'API externe est saine. Envisagez de l'augmenter RequestTimeoutMilliseconds si l'API est lente ou de la diminuer si vous souhaitez échouer rapidement.

Erreur HTTP : le corps de la réponse est nul

Symptôme : 200 mais response.statusCode c'response.bodyest le casnull.

Cause : le corps de la réponse n'est pas un JSON valide ou dépasse 20 000 caractères. MediaTailor analyse uniquement les réponses JSON contenant jusqu'à 20 000 caractères. response.body

Correctif : à utiliser response.text comme solution de secours. Le response.text champ contient le corps de réponse brut tronqué à 20 000 caractères :

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

Si les données dont vous avez besoin dépassent la limite de 20 000 caractères, pensez à demander à l'API externe de renvoyer une réponse plus petite (par exemple, en demandant des champs spécifiques).

Erreur HTTP : échec de la validation de l'URL

Symptôme : La fonction échoue lors de l'exécution avec un message indiquant que l'URL est mal formée, utilise un schéma non valide ou dépasse la longueur maximale.

Causes possibles :

CauseCorriger
L'URL n'utilise pas http ouhttps. Assurez-vous que l'expression d'URL produit une URL commençant par http:// ouhttps://.
L'URL dépasse 2 048 caractères après évaluation de l'expression. Raccourcissez l'URL. Déplacez de grandes valeurs de paramètres vers le corps de la requête à l'aide d'une méthode POST.
L'URL est mal formée (il ne s'agit pas d'un URI valide). Vérifiez la présence de caractères manquants ou supplémentaires dans l'expression. $encodeUrlComponent()À utiliser pour les valeurs des paramètres de requête susceptibles de contenir des caractères spéciaux.

ERREUR_DE VALIDATION

Symptôme : La fonction échoue avecerrorType: "VALIDATION_ERROR". Cette erreur peut se produire au moment de la création (lorsque vous créez ou mettez à jour la fonction) ou au moment de l'exécution (lorsque la fonction s'exécute pendant une session).

Causes possibles :

CauseExempleCorriger
La clé de sortie cible un espace de noms non accessible en écriture sur le hook actuel. Écrire à adsRequest.url dans une fonction attachée àPRE_SESSION_INITIALIZATION. Vérifiez quels espaces de noms de sortie sont autorisés lors de votre cycle de vie. PRE_SESSION_INITIALIZATIONautorise uniquementplayer_params.*. Déplacez la fonction sur le crochet approprié ou modifiez la clé de sortie. Consultez Hooks de cycle de vie.
La clé de sortie utilise des caractères non valides. Une clé de sortie comme player_params.device type (avec un espace). Seuls les lettres, les chiffres, les traits de soulignement et les traits d'union sont autorisés. Renommez la clé de sortie pour n'utiliser que des caractères valides. Par exemple, utilisez player_params.device_type plutôt.
La clé de sortie ne commence pas par un préfixe valide. Une clé de sortie comme custom.myValue au lieu de player_params.myValue outemp.myValue. Utilisez un préfixe de sortie valide : player_params.*temp.*, ouadsRequest.*.
Une expression JSonata contient une erreur de syntaxe. Un devis de clôture manquant ou une condition incomplète :{%session.id & %}. Vérifiez l'expression pour détecter les guillemets manquants, les parenthèses non correspondantes ou les opérateurs non pris en charge tels que ou. ?? ?:
Il manque un champ obligatoire dans une fonction HTTP_REQUEST. Le champ URL est vide ou la méthode n'est pas spécifiée. Assurez-vous que les champs URL et méthode sont définis. La méthode doit être GET ouPOST.
L'URL créée par l'expression n'est pas valide. L'URL évaluée utilise un schéma non pris en charge, par exempleftp://, dépasse 2 048 caractères ou est mal formée. Vérifiez que l'expression d'URL produit une https:// URL validehttp://. $encodeUrlComponent()À utiliser pour les valeurs des paramètres de requête susceptibles de contenir des caractères spéciaux.
Un en-tête HTTP contient des caractères non valides ou utilise un nom restreint. Une valeur d'en-tête contient des sauts de ligne, ou le nom de l'en-tête est host outransfer-encoding. Supprimez les caractères non valides des valeurs d'en-tête. Évitez les noms d'en-tête restreints. Voir REQUÊTE_HTTP pour les limites d'en-têtes.

Vérifiez le cause champ dans le journal des erreurs : il identifie le champ ou l'expression qui a échoué à la validation.

INTERNAL_ERROR

Symptôme : La fonction échoue avecerrorType: "INTERNAL_ERROR".

Cause : Une défaillance de l'infrastructure n'est pas liée à la configuration de vos fonctions.

Correctif : Réessayez la demande. Si l'erreur persiste, contactez le AWS Support.