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 Problembehandlung und Überwachung
Diese Seite hilft Ihnen bei der Diagnose häufiger Funktionsfehler und bei der Überwachung der Funktionsleistung in der Produktion. Der Abschnitt zur Problembehandlung ist nach Symptomen gegliedert. Beginnen Sie mit dem, was Sie beobachten, gehen Sie dann der Ursache nach und beheben Sie das Problem.
Überwachen
CloudWatch Metriken
MediaTailor veröffentlicht Metriken für die Funktionsausführung bei 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 |
PostAdsResponseHook.Invocations | Anzahl der Hook-Ausführungen | ConfigurationName |
PostAdsResponseHook.Errors | Anzahl der Hook-Fehler | ConfigurationName |
PostAdsResponseHook.Latency | Ausführungszeit des Hooks (ms) | ConfigurationName |
PreManifestInsertionHook.Invocations | Anzahl der Hook-Ausführungen | ConfigurationName |
PreManifestInsertionHook.Errors | Anzahl der Hook-Fehler | ConfigurationName |
PreManifestInsertionHook.Latency | Ausführungszeit des Hooks (ms) | ConfigurationName |
Function-level Metriken — ein Datenpunkt pro Ausführung einer einzelnen Funktion:
| 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.
Protokollereignisse
MediaTailor gibt Protokollereignisse für die Funktionsausführung aus. Fehlerereignisse werden standardmäßig ausgegeben. Abgeschlossene und zusammenfassende Ereignisse sind optional.
| Ereignistyp | Standard/ 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 | Individueller Funktionsausfall |
POST_ADS_RESPONSE_HOOK_SUMMARY | Opt-in | ADS-Interaktionsprotokoll | Zusammenfassung der Hook-Ausführung (success/error) |
POST_ADS_RESPONSE_HOOK_ERROR | Standard | ADS-Interaktionsprotokoll | Hook-Fehler mit ErrorType und Ursache |
POST_ADS_RESPONSE_FUNCTION_COMPLETED | Opt-in | ADS-Interaktionsprotokoll | Individuelle Funktion abgeschlossen mit input/output |
POST_ADS_RESPONSE_FUNCTION_ERROR | Standard | ADS-Interaktionsprotokoll | Individueller Funktionsausfall |
PRE_MANIFEST_INSERTION_HOOK_SUMMARY | Opt-in | ADS-Interaktionsprotokoll | Zusammenfassung der Hook-Ausführung (success/error) |
PRE_MANIFEST_INSERTION_HOOK_ERROR | Standard | ADS-Interaktionsprotokoll | Hook-Fehler mit ErrorType und Ursache |
PRE_MANIFEST_INSERTION_FUNCTION_COMPLETED | Opt-in | ADS-Interaktionsprotokoll | Individuelle Funktion abgeschlossen mit input/output |
PRE_MANIFEST_INSERTION_FUNCTION_ERROR | Standard | ADS-Interaktionsprotokoll | Individueller Funktionsausfall |
Informationen zum Aktivieren von Opt-in-Log-Ereignissen finden Sie unterÜberwachen AWS Elemental MediaTailor mit CloudWatch Amazon-Metriken.
Verwenden Sie das eventId Feld, um Ereignisse auf Hook- und Funktionsebene für dieselbe Ausführung miteinander zu korrelieren.
Die folgende Amazon CloudWatch Logs Insights-Abfrage filtert Funktionsfehlerereignisse nach, eventId um eine einzelne Ausführung nachzuverfolgen:
fields @timestamp, eventType, functionId, errorType, cause | filter eventId = "5dc6f040-0f72-4e8c-a64e-25eeef62708c" | sort @timestamp asc
Fehlerbehebung
Wenn eine Funktion fehlschlägt, wird ein errorType Feld im 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 Laufzeittypfehler 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-Nutzlast wurde überschritten |
TIMEOUT_ERROR | Die Ausführung der Funktion hat das 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 beziehen sich gegebenenfalls auf diese Fehlertypen.
Der Ausdruck gibt unerwartet Null zurück
Symptom: Ein Ausgabewert, von dem Sie erwartet hatten, dass er aufgefüllt wird, ist in den Player-Parametern enthalten null oder fehlt.
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 beim Sitzungsstart nicht verfügbar. |
Verschieben Sie die Funktion in den PRE_ADS_REQUEST Lifecycle-Hook, oder verwenden Sie ein anderes Eingabefeld. Siehe Lebenszyklus-Hooks. |
| 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 $exists() zur Überprüfung vor dem Zugriff:{%$exists(player_params.campaign_id) ?
player_params.campaign_id : 'default'%}. |
| Sie haben ein Objekt oder 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 temp.* und extrahieren Sie Zeichenketten, Zahlen oder boolesche Werte in einem nachfolgenden Schritt. |
RESOURCE_LIMIT_ERROR: Stapelüberlauf
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 passiert in der Regel bei tief verschachtelten bedingten Ausdrücken (if/then/else) oder komplexen Variablenzuweisungen.
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
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 passieren, 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 sie mit einer HTTP_REQUEST Funktion aufzurufen.
RESTRICTION_ERROR: Funktion nicht erlaubt
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 zulässigen Liste von 44 Funktionen enthalten ist. Zu den gängigen Beispielen gehören$eval,,$assert,$error. $sift
Behebung: Überprüfen Sie das cause Feld auf den Namen der blockierten Funktion. Ersetzen Sie es durch eine zulässige Alternative. Die JSONataReferenz für Ausdrücke vollständige Liste der 44 erlaubten Funktionen finden Sie unter.
Zu den häufig verwendeten erlaubten Funktionen gehören $string $number$substring,$contains, und$encodeUrlComponent.
RESTRICTION_ERROR: Ausdruck zu lang
Symptom: Die Funktion kann nicht erstellt oder aktualisiert werden. cause: "Expression length <actual> exceeds limit
<limit>"
Ursache: Ein einzelner Ausdruck enthält 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 Variablenbindung (:=), um die Wiederholung langer Unterausdrücke zu vermeiden.
HTTP-Fehler: Der Statuscode ist Null
Symptom: In der Ausgabe einer HTTP_REQUEST Funktion response.statusCode istnull.
Ursache: Die externe API war nicht erreichbar, die Verbindung wurde unterbrochen oder es ist ein Netzwerkfehler aufgetreten. In diesem Fall werden response.statusCode auf nullnull, response.body bis und response.text auf MediaTailor gesetzt. "Internal Error"
Behebung: Überprüfen Sie dies immer, response.statusCode bevor Sie auf die Antwortdaten zugreifen:
{%response.statusCode = 200 ? response.body.value : 'default'%}
Dieser Ausdruck überprüft, ob der HTTP-Aufruf einen 200-Statuscode zurückgegeben hat. Wenn ja, 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, den Wert zu erhöhen, RequestTimeoutMilliseconds wenn die API langsam ist, oder ihn zu verringern, wenn Sie schnell ausfallen möchten.
HTTP-Fehler: Der Antworttext ist Null
Symptom: response.statusCode ist 200, response.body ist es abernull.
Ursache: Der Antworttext ist entweder kein gültiges JSON oder überschreitet 20.000 Zeichen. MediaTailor analysiert nur JSON-Antworten mit einer Länge von bis zu 20.000 Zeichen. response.body
Fix: response.text Als Fallback verwenden. Das response.text Feld enthält den Rohtext der Antwort, der auf 20.000 Zeichen gekürzt ist:
{%response.statusCode = 200 ? ($exists(response.body.id) ? response.body.id : $substring(response.text, 0, 100)) : 'error'%}
Wenn die von Ihnen benötigten Daten die Grenze von 20.000 Zeichen überschreiten, sollten Sie erwägen, die externe API zu bitten, eine kleinere Antwort zurückzugeben (z. B. indem Sie bestimmte Felder anfordern).
HTTP-Fehler: Fehler bei der URL-Validierung
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 überschreitet.
Mögliche Ursachen:
| Ursache | Korrigieren |
|---|---|
Die URL verwendet nicht http oderhttps. |
Stellen Sie sicher, dass der URL-Ausdruck eine URL erzeugt, die mit http:// oder beginnthttps://. |
| Die URL überschreitet nach der Auswertung des Ausdrucks 2.048 Zeichen. | Kürzen Sie die URL. Verschieben Sie große Parameterwerte mithilfe einer POST-Methode in den Anforderungstext. |
| 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
Symptom: Die Funktion schlägt fehl mit. errorType: "VALIDATION_ERROR" Dieser Fehler kann bei der Erstellung (wenn Sie die Funktion erstellen oder aktualisieren) oder zur Ausführungszeit (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. | adsRequest.urlIn eine Funktion schreiben, die an angehängt ist. PRE_SESSION_INITIALIZATION |
Prüfen Sie, welche Ausgabe-Namespaces an Ihrem Lifecycle-Hook zulässig sind. PRE_SESSION_INITIALIZATIONerlaubt nur. player_params.* Verschieben Sie entweder die Funktion auf den richtigen Hook oder ändern Sie die Ausgabetaste. Siehe Lebenszyklus-Hooks. |
| 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 zulässig. |
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 hat einen Syntaxfehler. | Ein fehlendes abschließendes Anführungszeichen 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://, überschreitet 2.048 Zeichen oder ist falsch formatiert. |
Stellen Sie sicher, dass der URL-Ausdruck eine gültige URL generiert. http:// https:// Wird $encodeUrlComponent() für Abfrageparameterwerte verwendet, 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 lautet host odertransfer-encoding. |
Entfernen Sie ungültige Zeichen aus Header-Werten. Vermeiden Sie eingeschränkte Header-Namen. Informationen zu HTTP-Anfrage Header-Grenzwerten finden Sie unter. |
Überprüfen Sie das cause Feld im Fehlerprotokollereignis — es identifiziert, welches Feld oder welcher Ausdruck die Überprüfung nicht bestanden hat.
INTERNAL_ERROR
Symptom: Die Funktion schlägt mit fehlerrorType: "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 AWS sich an den Support.
Eine Änderung der Anzeigenliste hat keine Auswirkung
Symptom: Ihre Funktion läuft ohne Fehler bei POST_ADS_RESPONSE oderPRE_MANIFEST_INSERTION, aber die Anzeigen im Stream sind unverändert. Ein Filter, eine Neuanordnung oder eine Änderung scheint ignoriert zu werden.
Mögliche Ursachen:
| Ursache | Wie identifiziere ich | Reparieren |
|---|---|---|
| Der Filterausdruck lieferte kein oder ein Ergebnis ohne Array-Zwang, sodass der Ausgabeschlüssel weggelassen oder falsch angewendet wurde. | Der Ausdruck ist ein Prädikatfilter, z. B. adsResponse.ads[adSystem != 'BLOCKED'] ohne einen abschließenden [] oder einschließenden Array-Konstruktor. Bei einer Übereinstimmung wird ein einzelnes Objekt erzeugt; bei null Übereinstimmungen wird kein Wert erzeugt, und der Ausgabeschlüssel wird weggelassen, was vom System als „keine Änderung“ behandelt wird. |
Fügt Filterergebnisse immer in ein Array um: adsResponse.ads[adSystem != 'BLOCKED'][] oder. [adsResponse.ads[predicate]] |
Der Werbeblock kann nicht geändert werden (). PRE_MANIFEST_INSERTION |
Das mutable Eingabefeld für die Werbeunterbrechung istfalse. Änderungen an diesen Werbeunterbrechungen werden verworfen. |
Checken Sie mutable Ihren Ausdruck ein und ändern Sie die Werbeblöcke nur dort, wo er sich befindet. true |
| Der Hook wurde übersprungen, weil das gemeinsame Hook-Budget ausgeschöpft war oder die Eingabe die Größenbeschränkung überschritten hat. | Kein HOOK_SUMMARY Ereignis für den Hook im ADS-Interaktionsprotokoll für diese Anfrage. |
Reduzieren Sie die Zeit, die Sie für frühere Hooks aufgewendet haben, oder reduzieren Sie die Eingabegröße. Siehe Einschränkungen. |
Um zu überprüfen, was Ihre Funktion tatsächlich zurückgegeben hat, wählen Sie die FUNCTION_COMPLETED Ereignistypen für den Hook aus und überprüfen Sie die Funktionsausgabe im ADS-Interaktionsprotokoll.
Die injizierte Anzeige erscheint nicht im Manifest
Symptom: Ihre PRE_MANIFEST_INSERTION Funktion gibt eine injizierte Anzeige zurück und wird erfolgreich abgeschlossen, aber die Anzeige ist nicht im gerenderten Manifest enthalten.
Injection-Checks werden ausgeführt, nachdem Ihre Funktion zurückgekehrt ist, sodass die Protokollereignisse der Funktion auch dann erfolgreich sind, wenn eine Injektion abgebrochen wurde. Prüfen Sie die folgenden Ursachen der Reihe nach:
| Ursache | Korrigieren |
|---|---|
Das creativeUrl Creative ist noch nicht transkodiert. MediaTailor löscht die Injektion für die aktuelle Werbeunterbrechung, anstatt zu warten, aber der Versuch initiiert die Transcodierung. |
Das Einfügen derselben URL in eine spätere Werbeunterbrechung ist nach Abschluss der Transcodierung erfolgreich. Verwenden Sie für eine sofortige Insertion ein MediaTailor bereits transkodiertes Werbemittel (ein Werbemittel aus einer früheren Werbeunterbrechung oder einen skippedAds[].creativeUrl Wert, der nichts vastAdId mit der Transcodierung zu tun hat), oder fügen Sie mithilfe einer VAST_REQUEST Funktion in derselben Kette ein, die die Medienauswahl und die Transcode-Registrierung übernimmt. reason MediaTailor |
Der Eintrag hat weder einen verwendbaren creativeUrl noch einen, der zu einer Anzeige passtvastAdId, die durch einen VAST_REQUEST Aufruf im selben Hook-Aufruf analysiert wurde. |
VAST_REQUESTRuft dieselbe Funktionskette wie die Injektion auf und injiziert mit dem Wert der analysierten Anzeige als. adId vastAdId |
| Der Aufruf hat das Injection-Limit von 10 Anzeigen überschritten. | Injektionen, die das Limit überschreiten, werden verworfen. Reduzieren Sie die Anzahl der injizierten Anzeigen pro Aufruf. |
Die Ziel-Werbeunterbrechung kann nicht geändert werden ()mutable: false. |
Fügen Sie nur in Werbeunterbrechungen ein, wo sie mutable vorhanden sind. true |
| Die Wiedergabeversionen der eingeblendeten Anzeige entsprechen nicht den Varianten des Streams, oder die hinzugefügte Dauer läuft über die Werbeunterbrechung hinaus. | Für injizierte Anzeigen gelten dieselben Richtlinien zum Abgleich und zur Ausfüllung von Varianten wie für Anzeigen aus den ADS. Vergewissern Sie sich, dass die Wiedergabeformate des Werbemittels mit dem Stream übereinstimmen, und achten Sie darauf, dass die Gesamtdauer der Anzeige innerhalb der Werbeunterbrechung liegt. |