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 funzionali più comuni e di monitorare le prestazioni delle funzioni in produzione. La sezione sulla risoluzione dei problemi è organizzata per sintomo: inizia con ciò che osservi, quindi segui la causa e correggi.

Monitoraggio

CloudWatch metriche

MediaTailor pubblica metriche per l'esecuzione delle funzioni su Amazon. CloudWatch Non è richiesto alcun consenso esplicito.

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

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

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

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

Per maggiori dettagli sulla configurazione degli allarmi e sull'utilizzo di queste metriche, consulta. Monitoraggio AWS Elemental MediaTailor con i CloudWatch parametri di Amazon

Eventi di log

MediaTailor emette eventi di registro per l'esecuzione della funzione. Gli eventi di errore vengono emessi per impostazione predefinita. Gli eventi completati e di riepilogo sono attivabili.

Tipo di eventoImpostazione predefinita/ Opt-inGruppo di logDescription
PRE_SESSION_INIT_HOOK_SUMMARYOpt-inRegistro del manifestoRiepilogo dell'esecuzione degli hook (success/error)
PRE_SESSION_INIT_HOOK_ERRORPredefinitaRegistro del manifestoErrore dell'hook con ErrorType e causa
PRE_SESSION_INIT_FUNCTION_COMPLETEDOpt-inRegistro del manifestoFunzione individuale completata con input/output
PRE_SESSION_INIT_FUNCTION_ERRORPredefinitaRegistro del manifestoGuasto di una singola funzione
PRE_ADS_REQUEST_HOOK_SUMMARYOpt-inRegistro delle interazioni ADSRiepilogo dell'esecuzione degli hook (success/error)
PRE_ADS_REQUEST_HOOK_ERRORPredefinitaRegistro delle interazioni ADSErrore dell'hook con ErrorType e causa
PRE_ADS_REQUEST_FUNCTION_COMPLETEDOpt-inRegistro di interazione ADSFunzione individuale completata con input/output
PRE_ADS_REQUEST_FUNCTION_ERRORPredefinitaRegistro delle interazioni ADSGuasto di una singola funzione

Per abilitare gli eventi del registro di attivazione, vedereMonitoraggio AWS Elemental MediaTailor con i CloudWatch parametri di Amazon.

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

La seguente query di Amazon CloudWatch Logs Insights filtra gli eventi di errore delle funzioni 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. Utilizzate questo campo per identificare la classe di errore:

Tipi di erroreDescription
SYNTAX_ERRORL'espressione non è stata compilata 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 si rivolge a 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 un valore nullo in modo imprevisto

Sintomo: nei parametri del giocatore è presente null o manca un valore di output che ci si aspettava venisse compilato.

Possibili cause:

CausaCome identificarsiCorreggere
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 input diverso. Per informazioni, 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. Usa $exists() per controllare prima di accedere:. {%$exists(player_params.campaign_id) ? player_params.campaign_id : 'default'%}
Hai scritto un oggetto o un array nei parametri del giocatore o nella 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 valori booleani in un passaggio successivo.

RESOURCE_LIMIT_ERROR: Stack overflow

Sintomo: la funzione fallisce con and. errorType: "RESOURCE_LIMIT_ERROR" cause: "Stack overflow error"

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

Ciò significa che l'espressione ha troppi livelli di nidificazione 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 fallisce con and. 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ò accadere con espressioni che eseguono calcoli costosi su strutture di dati di grandi dimensioni.

Correzione: riduce la complessità dell'espressione. Se state elaborando array di grandi dimensioni, considerate la possibilità di spostare quella logica su un servizio esterno e di chiamarla con una HTTP_REQUEST funzione.

RESTRICTION_ERROR: funzione non consentita

Sintomo: la funzione fallisce con and. errorType: "RESTRICTION_ERROR" cause: "Function '<name>' is not allowed"

Causa: l'espressione chiama una funzione JSonata che non è nell'elenco consentito di 38 funzioni. Gli esempi più comuni includono$filter,$reduce, $eval$split, e. $join

Correzione: controlla il cause campo per il nome della funzione bloccata. Sostituiscilo con un'alternativa consentita. Vedi Riferimento all'espressione JSonata l'elenco completo delle 38 funzioni consentite.

Le funzioni consentite di uso comune 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: suddivide l'espressione in parti più piccole. Usa più voci di output o dividi la logica in più passaggi in un esecutore sequenziale. Usa 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, to e response.body tonull. 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, ritorna 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 desideri fallire rapidamente.

Errore HTTP: il corpo della risposta è nullo

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

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

Correzione: utilizzare response.text come riserva. Il response.text campo contiene il corpo della risposta non elaborato 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 fallisce in fase di esecuzione e viene visualizzato un messaggio relativo al formato errato dell'URL, all'utilizzo di uno schema non valido o al superamento della lunghezza massima.

Possibili cause:

CausaCorreggere
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. Abbrevia 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). Verifica la presenza di caratteri mancanti o aggiuntivi nell'espressione. Utilizza $encodeUrlComponent() per interrogare i valori dei parametri che possono contenere caratteri speciali.

VALIDATION_ERROR

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

Possibili cause:

CausaEsempioCorreggere
La chiave di output si rivolge a uno spazio dei nomi non scrivibile nell'hook corrente. Scrivere su adsRequest.url in una funzione allegata a. PRE_SESSION_INITIALIZATION Verifica quali namespace di output sono consentiti nel tuo ciclo di vita. PRE_SESSION_INITIALIZATIONconsente solo. player_params.* Sposta la funzione sull'hook corretto o modifica la chiave di output. Per informazioni, 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 consentite solo lettere, numeri, caratteri di sottolineatura 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 otemp.myValue. Usa un prefisso di output valido:player_params.*,temp.*, oadsRequest.*.
Un'espressione JSonata presenta un errore di sintassi. Una citazione di chiusura mancante o un condizionale incompleto:. {%session.id & %} Controlla l'espressione per verificare se mancano virgolette, parentesi non corrispondenti 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 o valido. http:// https:// $encodeUrlComponent()Utilizzatelo 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 Rimuove i caratteri non validi dai valori dell'intestazione. Evita i nomi di intestazione con restrizioni. Vedi RICHIESTA_HTTP per i limiti delle intestazioni.

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

INTERNAL_ERROR

Sintomo: la funzione fallisce 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 l' AWS assistenza.