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:
| Metrica | Description | Dimensioni |
|---|---|---|
PreSessionInitHook.Invocations | Numero di esecuzioni di hook | ConfigurationName |
PreSessionInitHook.Errors | Conteggio degli errori degli hook | ConfigurationName |
PreSessionInitHook.Latency | Tempo di esecuzione dell'hook (ms) | ConfigurationName |
PreAdsRequestHook.Invocations | Numero di esecuzioni di hook | ConfigurationName |
PreAdsRequestHook.Errors | Conteggio degli errori degli hook | ConfigurationName |
PreAdsRequestHook.Latency | Tempo di esecuzione dell'hook (ms) | ConfigurationName |
Function-level metriche: un punto dati per esecuzione di una singola funzione:
| Metrica | Description | Dimensioni |
|---|---|---|
Function.Invocations | Numero di esecuzioni di funzioni | ConfigurationName, FunctionId, FunctionType, HookType |
Function.Errors | Conteggio degli errori di funzione | ConfigurationName, FunctionId, FunctionType, HookType |
Function.Latency | Tempo 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 evento | Impostazione predefinita/ Opt-in | Gruppo di log | Description |
|---|---|---|---|
PRE_SESSION_INIT_HOOK_SUMMARY | Opt-in | Registro del manifesto | Riepilogo dell'esecuzione degli hook (success/error) |
PRE_SESSION_INIT_HOOK_ERROR | Predefinita | Registro del manifesto | Errore dell'hook con ErrorType e causa |
PRE_SESSION_INIT_FUNCTION_COMPLETED | Opt-in | Registro del manifesto | Funzione individuale completata con input/output |
PRE_SESSION_INIT_FUNCTION_ERROR | Predefinita | Registro del manifesto | Guasto di una singola funzione |
PRE_ADS_REQUEST_HOOK_SUMMARY | Opt-in | Registro delle interazioni ADS | Riepilogo dell'esecuzione degli hook (success/error) |
PRE_ADS_REQUEST_HOOK_ERROR | Predefinita | Registro delle interazioni ADS | Errore dell'hook con ErrorType e causa |
PRE_ADS_REQUEST_FUNCTION_COMPLETED | Opt-in | Registro di interazione ADS | Funzione individuale completata con input/output |
PRE_ADS_REQUEST_FUNCTION_ERROR | Predefinita | Registro delle interazioni ADS | Guasto 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 errore | Description |
|---|---|
SYNTAX_ERROR | L'espressione non è stata compilata 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 si rivolge a 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 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:
| Causa | Come identificarsi | 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 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:
| Causa | Correggere |
|---|---|
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:
| Causa | Esempio | Correggere |
|---|---|---|
| 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.