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:
| Metrica | Description | Dimensioni |
|---|---|---|
PreSessionInitHook.Invocations | Numero di esecuzioni di hook | ConfigurationName |
PreSessionInitHook.Errors | Conteggio degli errori di hook | ConfigurationName |
PreSessionInitHook.Latency | Tempo di esecuzione dell'hook (ms) | ConfigurationName |
PreAdsRequestHook.Invocations | Numero di esecuzioni di hook | ConfigurationName |
PreAdsRequestHook.Errors | Conteggio degli errori di hook | ConfigurationName |
PreAdsRequestHook.Latency | Tempo di esecuzione dell'hook (ms) | ConfigurationName |
PostAdsResponseHook.Invocations | Numero di esecuzioni di hook | ConfigurationName |
PostAdsResponseHook.Errors | Conteggio degli errori di hook | ConfigurationName |
PostAdsResponseHook.Latency | Tempo di esecuzione dell'hook (ms) | ConfigurationName |
PreManifestInsertionHook.Invocations | Numero di esecuzioni di hook | ConfigurationName |
PreManifestInsertionHook.Errors | Conteggio degli errori di hook | ConfigurationName |
PreManifestInsertionHook.Latency | Tempo di esecuzione dell'hook (ms) | ConfigurationName |
Function-level metriche: un punto dati per singola esecuzione della funzione:
| Metrica | Description | Dimensioni |
|---|---|---|
Function.Invocations | Numero di esecuzioni di funzioni | ConfigurationName, FunctionId, FunctionType, HookType |
Function.Errors | Numero di errori di funzione | ConfigurationName, FunctionId, FunctionType, HookType |
Function.Latency | Tempo 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 evento | Predefinito/ Opt-in | Gruppo di log | Description |
|---|---|---|---|
PRE_SESSION_INIT_HOOK_SUMMARY | Opt-in | Registro manifesto | Riepilogo dell'esecuzione degli hook (success/error) |
PRE_SESSION_INIT_HOOK_ERROR | Predefinita | Registro manifesto | Errore nell'hook con errorType e causa |
PRE_SESSION_INIT_FUNCTION_COMPLETED | Opt-in | Registro manifesto | Funzione individuale completata con input/output |
PRE_SESSION_INIT_FUNCTION_ERROR | Predefinita | Registro manifesto | Errore di una singola funzione |
PRE_ADS_REQUEST_HOOK_SUMMARY | Opt-in | Registro delle interazioni ADS | Riepilogo dell'esecuzione dell'hook (success/error) |
PRE_ADS_REQUEST_HOOK_ERROR | Predefinita | Registro delle interazioni ADS | Errore nell'hook con errorType e causa |
PRE_ADS_REQUEST_FUNCTION_COMPLETED | Opt-in | Registro delle interazioni ADS | Funzione individuale completata con input/output |
PRE_ADS_REQUEST_FUNCTION_ERROR | Predefinita | Registro delle interazioni ADS | Errore di una singola funzione |
POST_ADS_RESPONSE_HOOK_SUMMARY | Opt-in | Registro delle interazioni ADS | Riepilogo dell'esecuzione dell'hook (success/error) |
POST_ADS_RESPONSE_HOOK_ERROR | Predefinita | Registro delle interazioni ADS | Errore nell'hook con errorType e causa |
POST_ADS_RESPONSE_FUNCTION_COMPLETED | Opt-in | Registro delle interazioni ADS | Funzione individuale completata con input/output |
POST_ADS_RESPONSE_FUNCTION_ERROR | Predefinita | Registro delle interazioni ADS | Errore di una singola funzione |
PRE_MANIFEST_INSERTION_HOOK_SUMMARY | Opt-in | Registro delle interazioni ADS | Riepilogo dell'esecuzione dell'hook (success/error) |
PRE_MANIFEST_INSERTION_HOOK_ERROR | Predefinita | Registro delle interazioni ADS | Errore nell'hook con errorType e causa |
PRE_MANIFEST_INSERTION_FUNCTION_COMPLETED | Opt-in | Registro delle interazioni ADS | Funzione individuale completata con input/output |
PRE_MANIFEST_INSERTION_FUNCTION_ERROR | Predefinita | Registro delle interazioni ADS | Errore 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 errore | Description |
|---|---|
SYNTAX_ERROR | Impossibile compilare l'espressione o si è verificato un errore di tipo di runtime |
RESOURCE_LIMIT_ERROR | L'espressione ha superato i limiti di tempo di CPU, memoria o profondità dello stack |
RESTRICTION_ERROR | L'espressione ha utilizzato una funzione bloccata o il limite di dimensione del payload di input è stato superato |
TIMEOUT_ERROR | L'esecuzione della funzione ha superato il limite di tempo |
VALIDATION_ERROR | Il percorso di output ha come target un campo non scrivibile nell'ambito dell'hook corrente |
INTERNAL_ERROR | Guasto 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:
| Causa | Come identificarlo | Correggere |
|---|---|---|
| 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:
| Causa | Correzione |
|---|---|
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:
| Causa | Esempio | Correggere |
|---|---|---|
| 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:
| Causa | Come identificarlo | Correggere |
|---|---|---|
| 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:
| Causa | Correggere |
|---|---|
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. |