View a markdown version of this page

Funzioni di risoluzione dei problemi e monitoraggio - AWS Elemental MediaTailor

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Funzioni di risoluzione dei problemi e monitoraggio

Questa pagina consente di diagnosticare gli errori di funzione più comuni e di monitorare le prestazioni delle funzioni in produzione. La sezione sulla risoluzione dei problemi è organizzata per sintomo: iniziate da ciò che osservate, quindi seguite la causa e correggete.

Monitoraggio

CloudWatch metriche

MediaTailor pubblica le metriche per l'esecuzione delle funzioni su Amazon. CloudWatch Non è richiesto alcun opt-in.

Hook-level metriche: un punto dati per esecuzione di un hook del ciclo di vita:

MetricaDescriptionDimensioni
PreSessionInitHook.InvocationsNumero di esecuzioni di hookConfigurationName
PreSessionInitHook.ErrorsConteggio degli errori di hookConfigurationName
PreSessionInitHook.LatencyTempo di esecuzione dell'hook (ms)ConfigurationName
PreAdsRequestHook.InvocationsNumero di esecuzioni di hookConfigurationName
PreAdsRequestHook.ErrorsConteggio degli errori di hookConfigurationName
PreAdsRequestHook.LatencyTempo di esecuzione dell'hook (ms)ConfigurationName
PostAdsResponseHook.InvocationsNumero di esecuzioni di hookConfigurationName
PostAdsResponseHook.ErrorsConteggio degli errori di hookConfigurationName
PostAdsResponseHook.LatencyTempo di esecuzione dell'hook (ms)ConfigurationName
PreManifestInsertionHook.InvocationsNumero di esecuzioni di hookConfigurationName
PreManifestInsertionHook.ErrorsConteggio degli errori di hookConfigurationName
PreManifestInsertionHook.LatencyTempo di esecuzione dell'hook (ms)ConfigurationName

Function-level metriche: un punto dati per singola esecuzione della funzione:

MetricaDescriptionDimensioni
Function.InvocationsNumero di esecuzioni di funzioniConfigurationName, FunctionId, FunctionType, HookType
Function.ErrorsNumero di errori di funzioneConfigurationName, FunctionId, FunctionType, HookType
Function.LatencyTempo di esecuzione della funzione (ms)ConfigurationName, FunctionId, FunctionType, HookType

Per maggiori dettagli sull'impostazione degli allarmi e sull'utilizzo di queste metriche, consulta. Monitoraggio AWS Elemental MediaTailor con le CloudWatch metriche di Amazon

Eventi di log

MediaTailor emette eventi di registro per l'esecuzione delle funzioni. Gli eventi di errore vengono emessi per impostazione predefinita. Gli eventi completati e riepilogativi sono facoltativi.

Tipo di eventoPredefinito/ Opt-inGruppo di logDescription
PRE_SESSION_INIT_HOOK_SUMMARYOpt-inRegistro manifestoRiepilogo dell'esecuzione degli hook (success/error)
PRE_SESSION_INIT_HOOK_ERRORPredefinitaRegistro manifestoErrore nell'hook con errorType e causa
PRE_SESSION_INIT_FUNCTION_COMPLETEDOpt-inRegistro manifestoFunzione individuale completata con input/output
PRE_SESSION_INIT_FUNCTION_ERRORPredefinitaRegistro manifestoErrore di una singola funzione
PRE_ADS_REQUEST_HOOK_SUMMARYOpt-inRegistro delle interazioni ADSRiepilogo dell'esecuzione dell'hook (success/error)
PRE_ADS_REQUEST_HOOK_ERRORPredefinitaRegistro delle interazioni ADSErrore nell'hook con errorType e causa
PRE_ADS_REQUEST_FUNCTION_COMPLETEDOpt-inRegistro delle interazioni ADSFunzione individuale completata con input/output
PRE_ADS_REQUEST_FUNCTION_ERRORPredefinitaRegistro delle interazioni ADSErrore di una singola funzione
POST_ADS_RESPONSE_HOOK_SUMMARYOpt-inRegistro delle interazioni ADSRiepilogo dell'esecuzione dell'hook (success/error)
POST_ADS_RESPONSE_HOOK_ERRORPredefinitaRegistro delle interazioni ADSErrore nell'hook con errorType e causa
POST_ADS_RESPONSE_FUNCTION_COMPLETEDOpt-inRegistro delle interazioni ADSFunzione individuale completata con input/output
POST_ADS_RESPONSE_FUNCTION_ERRORPredefinitaRegistro delle interazioni ADSErrore di una singola funzione
PRE_MANIFEST_INSERTION_HOOK_SUMMARYOpt-inRegistro delle interazioni ADSRiepilogo dell'esecuzione dell'hook (success/error)
PRE_MANIFEST_INSERTION_HOOK_ERRORPredefinitaRegistro delle interazioni ADSErrore nell'hook con errorType e causa
PRE_MANIFEST_INSERTION_FUNCTION_COMPLETEDOpt-inRegistro delle interazioni ADSFunzione individuale completata con input/output
PRE_MANIFEST_INSERTION_FUNCTION_ERRORPredefinitaRegistro delle interazioni ADSErrore di una singola funzione

Per abilitare gli eventi del registro degli opt-in, vedereMonitoraggio AWS Elemental MediaTailor con le CloudWatch metriche di Amazon.

Usa il eventId campo per correlare gli eventi a livello di hook e a livello di funzione per la stessa esecuzione.

La seguente query di Amazon CloudWatch Logs Insights filtra gli eventi di errore di funzione eventId per tracciare una singola esecuzione:

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

Risoluzione dei problemi

Quando una funzione fallisce, MediaTailor registra un errorType campo nell'evento di errore. Usa questo campo per identificare la classe di errore:

Tipi di erroreDescription
SYNTAX_ERRORImpossibile compilare l'espressione o si è verificato un errore di tipo di runtime
RESOURCE_LIMIT_ERRORL'espressione ha superato i limiti di tempo di CPU, memoria o profondità dello stack
RESTRICTION_ERRORL'espressione ha utilizzato una funzione bloccata o il limite di dimensione del payload di input è stato superato
TIMEOUT_ERRORL'esecuzione della funzione ha superato il limite di tempo
VALIDATION_ERRORIl percorso di output ha come target un campo non scrivibile nell'ambito dell'hook corrente
INTERNAL_ERRORGuasto dell'infrastruttura non correlato alla funzione

Le voci sono organizzate per sintomo e fanno riferimento a questi tipi di errore, ove applicabile.

L'espressione restituisce null in modo imprevisto

Sintomo: un valore di output che ti aspetti venga compilato è null o manca nei parametri del player.

Possibili cause:

CausaCome identificarloCorreggere
Il campo di input non esiste in questo hook del ciclo di vita. Hai fatto riferimento adsRequest.url in una funzione. PRE_SESSION_INITIALIZATION I dati della richiesta ADS non sono disponibili all'inizio della sessione. Sposta la funzione nell'hook del PRE_ADS_REQUEST ciclo di vita o utilizza un campo di immissione diverso. Consulta Hook del ciclo di vita.
Il campo di input non è presente nei dati della sessione. Hai fatto riferimentoplayer_params.campaign_id, ma il giocatore non ha passato quel parametro all'inizializzazione della sessione. $exists()Usalo per controllare prima di accedere:. {%$exists(player_params.campaign_id) ? player_params.campaign_id : 'default'%}
Hai scritto un oggetto o un array in base ai parametri del giocatore o alla richiesta ADS. Questi namespace accettano solo stringhe, numeri e valori booleani. Gli oggetti e gli array vengono filtrati. Archivia dati complessi temp.* ed estrai stringhe, numeri o booleani in una fase successiva.

RESOURCE_LIMIT_ERROR: Stack overflow

Sintomo: la funzione ha esito negativo con e. errorType: "RESOURCE_LIMIT_ERROR" cause: "Stack overflow error"

Causa: l'espressione ha superato la profondità massima dello stack di 100 livelli. Ciò si verifica in genere con espressioni condizionali (if/then/else) profondamente annidate o assegnazioni di variabili complesse.

Ciò significa che l'espressione ha troppi livelli di annidamento per essere elaborata. MediaTailor

Correzione: semplifica l'espressione. Suddividi la logica complessa in più voci di output o più passaggi in un esecutore sequenziale.

RESOURCE_LIMIT_ERROR: timeout della CPU

Sintomo: la funzione non riesce con e. errorType: "RESOURCE_LIMIT_ERROR" cause: "Expression evaluation timeout: Check for infinite loop"

Causa: l'espressione ha superato il limite di tempo della CPU di 100 ms. Ciò può verificarsi con espressioni che eseguono calcoli costosi su strutture di dati di grandi dimensioni.

Correzione: riduci la complessità dell'espressione. Se state elaborando matrici di grandi dimensioni, considerate la possibilità di spostare tale logica su un servizio esterno e di chiamarlo con una HTTP_REQUEST funzione.

RESTRICTION_ERROR: funzione non consentita

Sintomo: la funzione non riesce con e. errorType: "RESTRICTION_ERROR" cause: "Function '<name>' is not allowed"

Causa: l'espressione chiama una funzione JSonata che non è nell'elenco consentito di 44 funzioni. Gli esempi più comuni includono$eval,,$assert,$error. $sift

Correzione: controlla il cause campo per il nome della funzione bloccata. Sostituiscilo con un'alternativa consentita. Consulta JSONatariferimento all'espressione l'elenco completo delle 44 funzioni consentite.

Le funzioni consentite comunemente utilizzate includono $string$number,$substring,$contains, e$encodeUrlComponent.

RESTRICTION_ERROR: espressione troppo lunga

Sintomo: la funzione non riesce a creare o aggiornare con. cause: "Expression length <actual> exceeds limit <limit>"

Causa: una singola espressione supera i 1.000 caratteri.

Correzione: suddividi l'espressione in parti più piccole. Utilizzate più voci di output o suddividete la logica in più passaggi in un esecutore sequenziale. Utilizzate variable binding (:=) per evitare di ripetere lunghe sottoespressioni.

Errore HTTP: il codice di stato è nullo

Sintomo: nell'output di una HTTP_REQUEST funzione, response.statusCode ènull.

Causa: l'API esterna non era raggiungibile, la connessione è scaduta o si è verificato un errore di rete. Quando ciò accade, MediaTailor imposta response.statusCode sunull, a e response.body anull. response.text "Internal Error"

Correzione: controlla sempre response.statusCode prima di accedere ai dati di risposta:

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

Questa espressione verifica se la chiamata HTTP ha restituito un codice di stato 200. In caso affermativo, utilizza il valore di risposta. In caso contrario, torna a un valore predefinito.

Se ciò accade frequentemente, controlla se l'API esterna è integra. Valuta la possibilità di aumentarla RequestTimeoutMilliseconds se l'API è lenta o di ridurla se vuoi fallire rapidamente.

Errore HTTP: il corpo della risposta è nullo

Sintomo: response.statusCode è 200 ma response.body ènull.

Causa: il corpo della risposta non è un JSON valido o supera i 20.000 caratteri. MediaTailor analizza solo le risposte JSON con un massimo di 20.000 caratteri. response.body

Correzione: utilizzare response.text come riserva. Il response.text campo contiene il corpo della risposta grezzo troncato a 20.000 caratteri:

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

Se i dati necessari superano il limite di 20.000 caratteri, valuta la possibilità di chiedere all'API esterna di restituire una risposta più piccola (ad esempio, richiedendo campi specifici).

Errore HTTP: errore di convalida dell'URL

Sintomo: la funzione ha esito negativo in fase di esecuzione e viene visualizzato un messaggio relativo all'URL non valido, all'utilizzo di uno schema non valido o al superamento della lunghezza massima.

Possibili cause:

CausaCorrezione
L'URL non utilizza http ohttps. Assicurati che l'espressione URL produca un URL che inizia con http:// ohttps://.
L'URL supera i 2.048 caratteri dopo la valutazione dell'espressione. Abbreviare l'URL. Sposta valori di parametri di grandi dimensioni nel corpo della richiesta utilizzando un metodo POST.
L'URL non è valido (non è un URI valido). Controlla che l'espressione non contenga caratteri mancanti o aggiuntivi. Utilizzate $encodeUrlComponent() per i valori dei parametri di interrogazione che possono contenere caratteri speciali.

VALIDATION_ERROR

Sintomo: la funzione ha esito negativo con. errorType: "VALIDATION_ERROR" Questo errore può verificarsi in fase di creazione (quando si crea o si aggiorna la funzione) o in fase di esecuzione (quando la funzione viene eseguita durante una sessione).

Possibili cause:

CausaEsempioCorreggere
La chiave di output ha come target uno spazio dei nomi non scrivibile nell'hook corrente. Scrittura su adsRequest.url in una funzione allegata a. PRE_SESSION_INITIALIZATION Verifica quali namespace di output sono consentiti nel tuo lifecycle hook. PRE_SESSION_INITIALIZATIONconsente solo. player_params.* Sposta la funzione sul gancio corretto o cambia la chiave di uscita. Consulta Hook del ciclo di vita.
La chiave di output utilizza caratteri non validi. Una chiave di output come player_params.device type (con uno spazio). Sono consentiti solo lettere, numeri, trattini bassi e trattini. Rinomina la chiave di output per utilizzare solo caratteri validi. Ad esempio, usa player_params.device_type invece.
La chiave di output non inizia con un prefisso valido. Una chiave di output come custom.myValue invece di player_params.myValue ortemp.myValue. Usa un prefisso di output valido:player_params.*,temp.*, oradsRequest.*.
Un'espressione JSonata presenta un errore di sintassi. Una citazione di chiusura mancante o un condizionale incompleto:. {%session.id & %} Controlla l'espressione per individuare virgolette mancanti, parentesi senza corrispondenze o operatori non supportati come o. ?? ?:
Manca un campo obbligatorio in una funzione HTTP_REQUEST. Il campo URL è vuoto o il metodo non è specificato. Assicurati che i campi URL e metodo siano impostati. Il metodo deve essere GET oPOST.
L'URL creato dall'espressione non è valido. L'URL valutato utilizza uno schema non supportato, ad esempioftp://, supera i 2.048 caratteri o non è valido. Verifica che l'espressione URL produca un URL valido. http:// https:// Utilizzate $encodeUrlComponent() per i valori dei parametri di interrogazione che possono contenere caratteri speciali.
Un'intestazione HTTP contiene caratteri non validi o utilizza un nome limitato. Un valore di intestazione contiene interruzioni di riga oppure il nome dell'intestazione è o. host transfer-encoding Rimuovi i caratteri non validi dai valori dell'intestazione. Evita i nomi delle intestazioni limitati. Consulta richiesta HTTP i limiti delle intestazioni.

Controlla il cause campo nell'evento del log degli errori: identifica quale campo o espressione non è riuscito a convalidare.

INTERNAL_ERROR

Sintomo: la funzione non riesce con. errorType: "INTERNAL_ERROR"

Causa: si è verificato un errore dell'infrastruttura non correlato alla configurazione della funzione.

Correzione: riprova la richiesta. Se l'errore persiste, contatta AWS l'assistenza.

La modifica dell'elenco degli annunci non ha alcun effetto

Sintomo: la funzione viene eseguita senza errori in POST_ADS_RESPONSE oPRE_MANIFEST_INSERTION, ma gli annunci nello stream sono invariati. Un filtro, un riordino o una modifica sembrano essere ignorati.

Possibili cause:

CausaCome identificarloCorreggere
L'espressione del filtro ha prodotto zero o un risultato senza coercizione dell'array, quindi la chiave di output è stata omessa o applicata in modo errato. L'espressione è un filtro predicativo, ad esempio adsResponse.ads[adSystem != 'BLOCKED'] senza un costruttore di array finale o racchiuso. [] Con una corrispondenza produce un singolo oggetto; con zero corrispondenze non produce alcun valore e la chiave di output viene omessa, operazione che il sistema considera «nessuna modifica». Coinvolgi sempre i risultati del filtro su un array: o. adsResponse.ads[adSystem != 'BLOCKED'][] [adsResponse.ads[predicate]]
L'interruzione dell'annuncio non è modificabile (). PRE_MANIFEST_INSERTION Il campo di mutable immissione dell'interruzione pubblicitaria è. false Le modifiche a queste interruzioni pubblicitarie vengono annullate. Inserisci la mutable tua espressione e modifica le interruzioni pubblicitarie solo dove si trovano. true
L'hook è stato saltato perché il budget dell'hook condiviso era esaurito o l'input ha superato il limite di dimensione. Nessun HOOK_SUMMARY evento per l'hook nel registro delle interazioni ADS per quella richiesta. Riduci il tempo impiegato negli hook precedenti o riduci le dimensioni degli input. Consulta Limits.

Per confermare ciò che la tua funzione ha effettivamente restituito, attiva i tipi di FUNCTION_COMPLETED eventi per l'hook e controlla l'output della funzione nel registro delle interazioni ADS.

L'annuncio inserito non viene visualizzato nel manifesto

Sintomo: la tua PRE_MANIFEST_INSERTION funzione restituisce un annuncio inserito e viene completata correttamente, ma l'annuncio non è presente nel manifesto renderizzato.

I controlli di iniezione vengono eseguiti dopo il ritorno della funzione, pertanto gli eventi di registro della funzione riportano un esito positivo anche quando un'iniezione viene interrotta. Verificate le seguenti cause nell'ordine:

CausaCorreggere
La creativeUrl creatività non è ancora stata transcodificata. MediaTailor interrompe l'iniezione relativa all'interruzione pubblicitaria corrente anziché attendere, ma il tentativo avvia la transcodifica. L'inserimento dello stesso URL in un'interruzione pubblicitaria successiva ha esito positivo al termine della transcodifica. Per un inserimento immediato, utilizza una creatività MediaTailor già transcodificata (una creatività tratta da un'interruzione pubblicitaria precedente o un valore il cui skippedAds[].creativeUrl valore non reason è correlato alla transcodifica) oppure inseriscilo vastAdId con una VAST_REQUEST funzione della stessa catena che gestisca la selezione dei contenuti multimediali e la registrazione della transcodifica. MediaTailor
La voce non ha né un valore utilizzabile creativeUrl né uno vastAdId che corrisponda a un annuncio analizzato da una chiamata nella stessa invocazione dell'hook. VAST_REQUEST Chiama VAST_REQUEST la stessa catena di funzioni dell'iniezione e esegui l'iniezione utilizzando il valore dell'annuncio analizzato as. adId vastAdId
L'invocazione ha superato il limite di iniezione di 10 annunci. Le iniezioni oltre il limite vengono annullate. Riduci il numero di annunci iniettati per chiamata.
L'interruzione pubblicitaria target non è modificabile (). mutable: false Inseriscila nelle interruzioni pubblicitarie solo dove si trova. mutable true
Le versioni inserite dell'annuncio non corrispondono alle varianti dello stream o la durata aggiunta supera l'interruzione pubblicitaria. Gli annunci iniettati sono soggetti alla stessa politica di abbinamento e riempimento delle varianti degli annunci di ADS. Verifica che le rappresentazioni della creatività corrispondano allo stream e mantieni la durata totale dell'annuncio entro l'interruzione dell'annuncio.