

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
<a name="monetization-functions-troubleshooting"></a>

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
<a name="monetization-functions-troubleshooting-monitoring"></a>

### CloudWatch metriche
<a name="monetization-functions-troubleshooting-cw-metrics"></a>

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](monitoring-cloudwatch-metrics.md)

### Eventi di log
<a name="monetization-functions-troubleshooting-log-events"></a>

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, vedere[Monitoraggio AWS Elemental MediaTailor con i CloudWatch parametri di Amazon](monitoring-cloudwatch-metrics.md).

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
<a name="monetization-functions-troubleshooting-guide"></a>

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
<a name="monetization-functions-ts-null"></a>

**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](monetization-functions-hooks.md). | 
| 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
<a name="monetization-functions-ts-stack-overflow"></a>

**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
<a name="monetization-functions-ts-cpu-timeout"></a>

**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
<a name="monetization-functions-ts-function-not-allowed"></a>

**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](monetization-functions-jsonata.md) 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
<a name="monetization-functions-ts-expression-too-long"></a>

**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
<a name="monetization-functions-ts-status-null"></a>

**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` su`null`, to e `response.body` to`null`. `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
<a name="monetization-functions-ts-body-null"></a>

**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
<a name="monetization-functions-ts-url-validation"></a>

**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`
<a name="monetization-functions-ts-validation-error"></a>

**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](monetization-functions-hooks.md). | 
| 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](monetization-functions-types-http-request.md) 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`
<a name="monetization-functions-ts-internal-error"></a>

**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.