

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Funktionen zur Fehlerbehebung und Überwachung
<a name="monetization-functions-troubleshooting"></a>

Auf dieser Seite können Sie häufig auftretende Funktionsfehler diagnostizieren und die Funktionsleistung in der Produktion überwachen. Der Abschnitt zur Fehlerbehebung ist nach Symptomen geordnet. Beginnen Sie mit dem, was Sie beobachten, verfolgen Sie dann die Ursache und beheben Sie es.

## Überwachen
<a name="monetization-functions-troubleshooting-monitoring"></a>

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

MediaTailor veröffentlicht Metriken für die Funktionsausführung auf Amazon CloudWatch. Es ist kein Opt-In erforderlich.

**Hook-level Metriken** — ein Datenpunkt pro Lifecycle-Hook-Ausführung:


| Metrik | Description | Dimensionen | 
| --- | --- | --- | 
| PreSessionInitHook.Invocations | Anzahl der Hook-Ausführungen | ConfigurationName | 
| PreSessionInitHook.Errors | Anzahl der Hook-Fehler | ConfigurationName | 
| PreSessionInitHook.Latency | Ausführungszeit des Hooks (ms) | ConfigurationName | 
| PreAdsRequestHook.Invocations | Anzahl der Hook-Ausführungen | ConfigurationName | 
| PreAdsRequestHook.Errors | Anzahl der Hook-Fehler | ConfigurationName | 
| PreAdsRequestHook.Latency | Ausführungszeit des Hooks (ms) | ConfigurationName | 

**Function-level Metriken** — ein Datenpunkt pro einzelner Funktionsausführung:


| Metrik | Description | Dimensionen | 
| --- | --- | --- | 
| Function.Invocations | Anzahl der Funktionsausführungen | ConfigurationName, FunctionId, FunctionType, HookType | 
| Function.Errors | Anzahl der Funktionsfehler | ConfigurationName, FunctionId, FunctionType, HookType | 
| Function.Latency | Ausführungszeit der Funktion (ms) | ConfigurationName, FunctionId, FunctionType, HookType | 

Weitere Informationen zum Einrichten von Alarmen und zum Arbeiten mit diesen Metriken finden Sie unter[Überwachen AWS Elemental MediaTailor mit CloudWatch Amazon-Metriken](monitoring-cloudwatch-metrics.md).

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

MediaTailor gibt Protokollereignisse für die Funktionsausführung aus. Fehlerereignisse werden standardmäßig ausgegeben. Abgeschlossene Ereignisse und Ereignisse mit Zusammenfassung sind optional.


| Ereignistyp | Standardeinstellung/ Opt-in | Gruppe protokollieren | Description | 
| --- | --- | --- | --- | 
| PRE\_SESSION\_INIT\_HOOK\_SUMMARY | Opt-in | Manifest-Protokoll | Zusammenfassung der Hook-Ausführung (success/error) | 
| PRE\_SESSION\_INIT\_HOOK\_ERROR | Standard | Manifest-Protokoll | Hook-Fehler mit errorType und Ursache | 
| PRE\_SESSION\_INIT\_FUNCTION\_COMPLETED | Opt-in | Manifest-Protokoll | Individuelle Funktion abgeschlossen mit input/output | 
| PRE\_SESSION\_INIT\_FUNCTION\_ERROR | Standard | Manifest-Protokoll | Ausfall einer einzelnen Funktion | 
| PRE\_ADS\_REQUEST\_HOOK\_SUMMARY | Opt-in | ADS-Interaktionsprotokoll | Zusammenfassung der Hook-Ausführung (success/error) | 
| PRE\_ADS\_REQUEST\_HOOK\_ERROR | Standard | ADS-Interaktionsprotokoll | Hook-Fehler mit errorType und Ursache | 
| PRE\_ADS\_REQUEST\_FUNCTION\_COMPLETED | Opt-in | ADS-Interaktionsprotokoll | Individuelle Funktion abgeschlossen mit input/output | 
| PRE\_ADS\_REQUEST\_FUNCTION\_ERROR | Standard | ADS-Interaktionsprotokoll | Ausfall einer einzelnen Funktion | 

Informationen zum Aktivieren von Opt-in-Protokollereignissen finden Sie unter[Überwachen AWS Elemental MediaTailor mit CloudWatch Amazon-Metriken](monitoring-cloudwatch-metrics.md).

Verwenden Sie das `eventId` Feld, um Ereignisse auf Hook- und Funktionsebene für dieselbe Ausführung zu korrelieren.

Die folgende Amazon CloudWatch Logs Insights-Abfrage filtert Funktionsfehlerereignisse`eventId`, um eine einzelne Ausführung nachzuverfolgen:

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

## Fehlerbehebung
<a name="monetization-functions-troubleshooting-guide"></a>

Wenn eine Funktion fehlschlägt, wird ein `errorType` Feld als Fehlerereignis MediaTailor protokolliert. Verwenden Sie dieses Feld, um die Fehlerklasse zu identifizieren:


| Fehlertyp | Description | 
| --- | --- | 
| SYNTAX\_ERROR | Der Ausdruck konnte nicht kompiliert werden oder es ist ein Laufzeitfehler aufgetreten | 
| RESOURCE\_LIMIT\_ERROR | Der Ausdruck hat die Grenzwerte für CPU-Zeit, Arbeitsspeicher oder Stapeltiefe überschritten | 
| RESTRICTION\_ERROR | Der Ausdruck hat eine blockierte Funktion verwendet, oder die Größenbeschränkung für die Eingabe-Payload wurde überschritten | 
| TIMEOUT\_ERROR | Die Ausführung der Funktion hat ihr Zeitlimit überschritten | 
| VALIDATION\_ERROR | Der Ausgabepfad zielt auf ein Feld ab, das im Gültigkeitsbereich des aktuellen Hooks nicht beschreibbar ist | 
| INTERNAL\_ERROR | Infrastrukturausfall, der nichts mit der Funktion zu tun hat | 

Die Einträge sind nach Symptomen geordnet und verweisen gegebenenfalls auf diese Fehlertypen.

### Expression gibt unerwartet Null zurück
<a name="monetization-functions-ts-null"></a>

**Symptom:** Ein Ausgabewert, von dem Sie erwartet haben, dass er aufgefüllt wird, ist `null` oder fehlt in den Player-Parametern.

**Mögliche Ursachen:**


| Ursache | Wie identifiziere ich | Reparieren | 
| --- | --- | --- | 
| Das Eingabefeld ist an diesem Lifecycle-Hook nicht vorhanden. | Sie haben adsRequest.url in einer PRE\_SESSION\_INITIALIZATION Funktion referenziert. ADS-Anforderungsdaten sind zu Beginn der Sitzung nicht verfügbar. | Verschieben Sie die Funktion in den PRE\_ADS\_REQUEST Lifecycle-Hook oder verwenden Sie ein anderes Eingabefeld. Siehe [Lebenszyklus-Hooks](monetization-functions-hooks.md). | 
| Das Eingabefeld fehlt in den Sitzungsdaten. | Sie haben darauf verwiesenplayer\_params.campaign\_id, aber der Player hat diesen Parameter bei der Sitzungsinitialisierung nicht übergeben. | Verwenden Sie diese $exists() Option, um dies vor dem Zugriff zu überprüfen:{%$exists(player\_params.campaign\_id) ? player\_params.campaign\_id : 'default'%}. | 
| Sie haben ein Objekt oder ein Array in die Player-Parameter oder die ADS-Anfrage geschrieben. | Diese Namespaces akzeptieren nur Zeichenketten, Zahlen und boolesche Werte. Objekte und Arrays werden herausgefiltert. | Speichern Sie komplexe Daten in temp.\* und extrahieren Sie in einem nachfolgenden Schritt Zeichenketten, Zahlen oder Boolesche Werte. | 

### `RESOURCE_LIMIT_ERROR: Stapelüberlauf`
<a name="monetization-functions-ts-stack-overflow"></a>

**Symptom:** Die Funktion schlägt mit und fehl. `errorType: "RESOURCE_LIMIT_ERROR"` `cause: "Stack overflow error"`

**Ursache:** Der Ausdruck hat die maximale Stapeltiefe von 100 Ebenen überschritten. Dies ist in der Regel bei tief verschachtelten bedingten (if/then/else) Ausdrücken oder komplexen Variablenzuweisungen der Fall.

Das bedeutet, dass der Ausdruck zu viele Verschachtelungsebenen hat, als dass er verarbeitet werden könnte. MediaTailor 

**Behebung:** Vereinfachen Sie den Ausdruck. Teilen Sie komplexe Logik in mehrere Ausgabeeinträge oder mehrere Schritte in einem sequentiellen Executor auf.

### `RESOURCE_LIMIT_ERROR`: CPU-Timeout
<a name="monetization-functions-ts-cpu-timeout"></a>

**Symptom:** Die Funktion schlägt mit und fehl. `errorType: "RESOURCE_LIMIT_ERROR"` `cause: "Expression evaluation timeout: Check for infinite loop"`

**Ursache:** Der Ausdruck hat das CPU-Zeitlimit von 100 ms überschritten. Dies kann bei Ausdrücken der Fall sein, die teure Berechnungen über große Datenstrukturen durchführen.

**Behebung:** Reduzieren Sie die Komplexität des Ausdrucks. Wenn Sie große Arrays verarbeiten, sollten Sie erwägen, diese Logik in einen externen Dienst zu verschieben und ihn mit einer `HTTP_REQUEST` Funktion aufzurufen.

### `RESTRICTION_ERROR`: Funktion nicht erlaubt
<a name="monetization-functions-ts-function-not-allowed"></a>

**Symptom:** Die Funktion schlägt mit und fehl. `errorType: "RESTRICTION_ERROR"` `cause: "Function '<name>' is not allowed"`

**Ursache:** Der Ausdruck ruft eine JSONata-Funktion auf, die nicht in der Liste der zulässigen 38 Funktionen enthalten ist. Zu den häufigsten Beispielen gehören`$filter`,`$reduce`, `$eval``$split`, und. `$join`

**Behebung:** Überprüfen Sie das `cause` Feld für den Namen der blockierten Funktion. Ersetzen Sie es durch eine zulässige Alternative. Die [JSONata-Ausdrucksreferenz](monetization-functions-jsonata.md) vollständige Liste der 38 zulässigen Funktionen finden Sie unter.

Zu den häufig verwendeten zulässigen Funktionen gehören `$string``$number`,`$substring`,`$contains`, und`$encodeUrlComponent`.

### `RESTRICTION_ERROR`: Ausdruck zu lang
<a name="monetization-functions-ts-expression-too-long"></a>

**Symptom:** Die Funktion kann nicht erstellt oder aktualisiert werden. `cause: "Expression length <actual> exceeds limit <limit>"`

**Ursache:** Ein einzelner Ausdruck umfasst mehr als 1.000 Zeichen.

**Behebung:** Teilen Sie den Ausdruck in kleinere Teile auf. Verwenden Sie mehrere Ausgabeeinträge oder teilen Sie die Logik in einem sequentiellen Executor auf mehrere Schritte auf. Verwenden Sie die variable Bindung (`:=`), um zu vermeiden, dass lange Unterausdrücke wiederholt werden.

### HTTP-Fehler: Der Statuscode ist Null
<a name="monetization-functions-ts-status-null"></a>

**Symptom:** In der Ausgabe einer `HTTP_REQUEST` Funktion `response.statusCode` ist`null`.

**Ursache:** Die externe API war nicht erreichbar, die Verbindung wurde unterbrochen oder es ist ein Netzwerkfehler aufgetreten. In diesem Fall werden die MediaTailor Werte `response.statusCode` auf`null`, to und `response.body` `response.text` to `null` gesetzt. `"Internal Error"`

**Lösung:** Überprüfen Sie immer, `response.statusCode` bevor Sie auf Antwortdaten zugreifen:

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

Dieser Ausdruck überprüft, ob der HTTP-Aufruf einen Statuscode 200 zurückgegeben hat. Ist dies der Fall, wird der Antwortwert verwendet. Andernfalls wird auf einen Standardwert zurückgegriffen.

Wenn dies häufig vorkommt, überprüfen Sie, ob die externe API fehlerfrei ist. Erwägen Sie, sie zu erhöhen, `RequestTimeoutMilliseconds` wenn die API langsam ist, oder zu verringern, wenn Sie schnell ausfallen möchten.

### HTTP-Fehler: Der Antworttext ist Null
<a name="monetization-functions-ts-body-null"></a>

**Symptom:** `response.statusCode` ist 200, `response.body` ist aber`null`.

**Ursache:** Der Antworttext ist entweder kein gültiges JSON-Format oder enthält mehr als 20.000 Zeichen. MediaTailor analysiert nur JSON-Antworten mit bis zu 20.000 Zeichen. `response.body`

**Fix:** `response.text` Als Fallback verwenden. Das `response.text` Feld enthält den Rohtext der Antwort, gekürzt auf 20.000 Zeichen:

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

Wenn die benötigten Daten das Limit von 20.000 Zeichen überschreiten, sollten Sie die externe API bitten, eine kürzere Antwort zurückzugeben (z. B. indem bestimmte Felder angefordert werden).

### HTTP-Fehler: Fehler bei der URL-Überprüfung
<a name="monetization-functions-ts-url-validation"></a>

**Symptom:** Die Funktion schlägt zur Laufzeit fehl und es wird eine Meldung angezeigt, dass die URL falsch formatiert ist, ein ungültiges Schema verwendet oder die maximale Länge überschritten wird.

**Mögliche Ursachen:**


| Ursache | Korrigieren | 
| --- | --- | 
| Die URL verwendet http oder nichthttps. | Stellen Sie sicher, dass der URL-Ausdruck eine URL erzeugt, die mit http:// oder beginnthttps://. | 
| Die URL hat nach der Auswertung des Ausdrucks mehr als 2.048 Zeichen. | Kürzen Sie die URL. Verschieben Sie große Parameterwerte mithilfe einer POST-Methode in den Hauptteil der Anfrage. | 
| Die URL ist falsch formatiert (kein gültiger URI). | Überprüfen Sie den Ausdruck auf fehlende oder zusätzliche Zeichen. Wird $encodeUrlComponent() für Abfrageparameterwerte verwendet, die Sonderzeichen enthalten können. | 

### `VALIDATION_ERROR`
<a name="monetization-functions-ts-validation-error"></a>

**Symptom:** Die Funktion schlägt fehl mit. `errorType: "VALIDATION_ERROR"` Dieser Fehler kann bei der Erstellung (wenn Sie die Funktion erstellen oder aktualisieren) oder bei der Ausführung (wenn die Funktion während einer Sitzung ausgeführt wird) auftreten.

**Mögliche Ursachen:**


| Ursache | Beispiel | Korrigieren | 
| --- | --- | --- | 
| Der Ausgabeschlüssel zielt auf einen Namespace ab, der am aktuellen Hook nicht beschreibbar ist. | Schreiben adsRequest.url in eine Funktion, die an angehängt ist. PRE\_SESSION\_INITIALIZATION | Prüfen Sie an Ihrem Lifecycle-Hook, welche Ausgabe-Namespaces zulässig sind. PRE\_SESSION\_INITIALIZATIONerlaubt nur. player\_params.\* Verschieben Sie die Funktion entweder an den richtigen Haken oder ändern Sie den Ausgabetaster. Siehe [Lebenszyklus-Hooks](monetization-functions-hooks.md). | 
| Der Ausgabeschlüssel verwendet ungültige Zeichen. | Ein Ausgabeschlüssel wie player\_params.device type (mit einem Leerzeichen). Nur Buchstaben, Zahlen, Unterstriche und Bindestriche sind erlaubt. | Benennen Sie den Ausgabeschlüssel um, sodass nur gültige Zeichen verwendet werden. Verwenden Sie beispielsweise player\_params.device\_type stattdessen. | 
| Der Ausgabeschlüssel beginnt nicht mit einem gültigen Präfix. | Ein Ausgabeschlüssel wie custom.myValue anstelle von player\_params.myValue odertemp.myValue. | Verwenden Sie ein gültiges Ausgabepräfix: player\_params.\*temp.\*,, oderadsRequest.\*. | 
| Ein JSONata-Ausdruck weist einen Syntaxfehler auf. | Ein fehlendes Schlusszitat oder eine unvollständige Bedingung:. {%session.id & %} | Überprüfen Sie den Ausdruck auf fehlende Anführungszeichen, nicht übereinstimmende Klammern oder nicht unterstützte Operatoren wie oder. ?? ?: | 
| In einer HTTP\_REQUEST-Funktion fehlt ein erforderliches Feld. | Das URL-Feld ist leer oder die Methode ist nicht angegeben. | Stellen Sie sicher, dass die URL- und Methodenfelder festgelegt sind. Die Methode muss GET oder seinPOST. | 
| Die durch den Ausdruck erstellte URL ist ungültig. | Die ausgewertete URL verwendet ein nicht unterstütztes Schema wieftp://, hat mehr als 2.048 Zeichen oder ist falsch formatiert. | Stellen Sie sicher, dass der URL-Ausdruck eine gültige URL ergibt. http:// https:// Verwenden Sie $encodeUrlComponent() für Abfragen Parameterwerte, die Sonderzeichen enthalten können. | 
| Ein HTTP-Header enthält ungültige Zeichen oder verwendet einen eingeschränkten Namen. | Ein Header-Wert enthält Zeilenumbrüche, oder der Header-Name ist host odertransfer-encoding. | Entfernen Sie ungültige Zeichen aus den Header-Werten. Vermeiden Sie eingeschränkte Header-Namen. Informationen zu [HTTP\_ANFRAGE](monetization-functions-types-http-request.md) Header-Grenzwerten finden Sie unter. | 

Überprüfen Sie das `cause` Feld im Fehlerprotokollereignis — es gibt an, welches Feld oder welcher Ausdruck die Überprüfung nicht bestanden hat.

### `INTERNAL_ERROR`
<a name="monetization-functions-ts-internal-error"></a>

**Symptom:** Die Funktion schlägt fehl mit`errorType: "INTERNAL_ERROR"`.

**Ursache:** Es ist ein Infrastrukturfehler aufgetreten, der nichts mit Ihrer Funktionskonfiguration zu tun hat.

**Behebung:** Versuchen Sie die Anfrage erneut. Wenn der Fehler weiterhin besteht, wenden Sie sich an den AWS Support.