Aktivierung der Entminimierung von JavaScript Error-Stack-Traces - Amazon CloudWatch

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.

Aktivierung der Entminimierung von JavaScript Error-Stack-Traces

Wenn der JavaScript Quellcode Ihrer Webanwendung minimiert ist, kann es schwierig sein, Fehler-Stack-Traces zu lesen. Sie können die Entminimierung der Stack-Traces aktivieren, indem Sie Ihre Quellzuordnungen auf Amazon S3 hochladen. CloudWatch RUM ruft die Quellzuordnungen ab, um die Zeilen- und Spaltennummern im minimierten Quellcode wieder dem ursprünglichen, nicht minimierten Quellcode zuzuordnen. Das verbessert die Lesbarkeit Ihrer Fehler-Stack-Traces und hilft dabei, den Ort des Fehlers im ursprünglichen Quellcode zu identifizieren.

Anforderungen und Syntax

Quellkarten sind entscheidend für das Debuggen und Nachverfolgen von Problemen in Ihrer Webanwendung in verschiedenen Versionen. Stellen Sie sicher, dass jede Webanwendungsversion über eine eindeutige Quellkarte verfügt. Jede Version sollte eine eigene eindeutige releaseId haben. Eine releaseId muss eine Zeichenfolge mit einer Länge zwischen 1 und 200 Zeichen sein und darf nur Buchstaben, Zahlen, Unterstriche, Bindestriche, Doppelpunkte, Schrägstriche und Punkte enthalten. Um die releaseId AS-Metadaten zu RUM-Ereignissen hinzuzufügen, konfigurieren Sie den CloudWatch RUM-Webclient.

Es wird erwartet, dass es sich bei den Quellkarten um einfache JSON-Dateien handelt, die der in der Source-Map-V3-Spezifikation definierten Struktur folgen. Die Felder version, file, sources, names und mappings sind erforderlich.

Stellen Sie sicher, dass die Größe der einzelnen Quellkarten die Grenze von 50 MB nicht überschreitet. Darüber hinaus ruft der RUM-Service nur bis zu 50 MB an Quellkarten pro Stack-Trace ab. Teilen Sie den Quellcode bei Bedarf in mehrere kleinere Teile auf. Weitere Informationen finden Sie unter Codesplitting mit WebpackJS.

Konfigurieren Sie Ihre Amazon-S3-Bucket-Ressourcenrichtlinie, um dem RUM-Service Zugriff zu gewähren

Stellen Sie sicher, dass sich Ihr Amazon-S3-Bucket in derselben Region wie Ihre RUM-App-Überwachung befindet. Konfigurieren Sie Ihren Amazon-S3-Bucket, um dem RUM-Service Zugriff auf das Abrufen von Quellkartendateien zu gewähren. Fügen Sie die globalen Bedingungskontextschlüssel aws:SourceArn und aws:SourceAccount hinzu, um die Berechtigungen des Services auf die Ressource zu beschränken. Dies ist der effektivste Weg, um sich vor dem verwirrtes Stellvertreterproblem zu schützen.

Das folgende Beispiel zeigt, wie Sie die globalen Bedingungskontextschlüssel aws:SourceArn und aws:SourceAccount in Amazon S3 verwenden können, um das Problem des verwirrten Stellvertreters zu verhindern.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "RUM Service S3 Read Permissions", "Effect": "Allow", "Principal": { "Service": "rum.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ], "Condition": { "StringEquals": { "aws:SourceAccount": "ACCOUNT_ID", "aws:SourceArn": "arn:aws:rum:REGION:ACCOUNT_ID:appmonitor/APP_MONITOR_NAME" } } } ] }

Wenn Sie AWS KMS Schlüssel zum Verschlüsseln der Daten verwenden, stellen Sie sicher, dass die Ressourcenrichtlinie des Schlüssels ähnlich konfiguriert ist, sodass sie die Kontextschlüssel aws:SourceArn und die aws:SourceAccount globalen Bedingungsschlüssel enthält, damit der RUM-Dienst Zugriff darauf hat, die Schlüssel zum Abrufen der Quellzuordnungsdateien zu verwenden.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "RUM Service KMS Read Permissions", "Effect": "Allow", "Principal": { "Service": "rum.amazonaws.com" }, "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-1:123456789012:key/KEY_ID", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012", "aws:SourceArn": "arn:aws:rum:us-east-1:123456789012/APP_MONITOR_NAME" } } } ] }

Quellkarten hochladen

Konfigurieren Sie Ihr JavaScript Paket so, dass bei der Minimierung Quellzuordnungen generiert werden. Wenn Sie Ihre Anwendung erstellen, erstellt das Bundle ein Verzeichnis (z. B. dist), das die minimierten JavaScript Dateien und die entsprechenden Quellzuordnungen enthält. Ein Beispiel finden Sie unten.

./dist |-index.d5a07c87.js |-index.d5a07c87.js.map

Laden Sie die Quellkartendatei in Ihren Amazon-S3-Bucket hoch. Die Dateien sollten sich in einem Ordner mit der releaseId als Namen befinden. Wenn mein Bucket-Name beispielsweise my-application-source-maps lautet und die releaseId 2.0.0 ist, dann befindet sich die Quellkartendatei am folgenden Speicherort:

my-application-source-maps |-2.0.0 |-index.d5a07c87.js.map

Um das Hochladen Ihrer Quellkarten zu automatisieren, können Sie das folgende Bash-Skript erstellen und es als Teil Ihres Build-Prozesses ausführen.

#!/bin/bash # Ensure the script is called with required arguments if [ "$#" -ne 2 ]; then echo "Usage: $0 S3_BUCKET_NAME RELEASE_ID" exit 1 fi # Read arguments S3_BUCKET="$1" RELEASE_ID="$2" # Set the path to your build directory BUILD_DIR="./dist" # Upload all .map files recursively if aws s3 cp "$BUILD_DIR" "s3://$S3_BUCKET/$RELEASE_ID/" --recursive --exclude "*" --include "*.map"; then echo "Successfully uploaded all source map files" else echo "Failed to upload source map files" fi

Konfigurieren Sie ReleaseID in Ihrem CloudWatch RUM-Webclient

CloudWatch RUM verwendet die KonfigurationreleaseId, um den Ordner zum Abrufen der Quellzuordnungsdateien zu ermitteln. Benennen Sie die releaseId genauso wie Ihren Ordner mit Quellkartendateien. Wenn Sie das oben angegebene Bash-Skript oder ein ähnliches verwendet haben, sollte das im Skript releaseId konfigurierte Skript mit dem in Ihrem CloudWatch RUM-Webclient konfigurierten identisch sein. Sie müssen Version 1.21.0 oder höher des CloudWatch RUM-Webclients verwenden.

import { AwsRum, AwsRumConfig } from "aws-rum-web"; try { const config: AwsRumConfig = { sessionSampleRate: 1, endpoint: "https://dataplane.rum.us-west-2.amazonaws.com", telemetries: ["performance", "errors", "http"], allowCookies: true, releaseId: "RELEASE_ID", //Add this }; const APPLICATION_ID: string = "APP_MONITOR_ID"; const APPLICATION_VERSION: string = "1.0.0"; const APPLICATION_REGION: string = "us-west-2"; new AwsRum(APPLICATION_ID, APPLICATION_VERSION, APPLICATION_REGION, config); } catch (error: any) { // Ignore errors thrown during CloudWatch RUM web client initialization }

CloudWatch RUM-App-Monitor aktivieren, um Stack-Traces zu deminifizieren JavaScript

Um JavaScript Stack-Traces zu deminifizieren, setzen Sie den Status des App-Monitors auf. SourceMap ENABLED Geben Sie die Amazon-S3-URI für den Bucket oder Ordner an, der alle Quellkarten für Ihre App-Überwachung enthält.

Wenn Quellkarten direkt im Haupt-Bucket (nicht in einem Unterordner) gespeichert werden, sollte die Amazon-S3-URI als Amazon S3://BUCKET_NAME formatiert werden. In diesem Fall sollten sich die Quellkartendateien am folgenden Speicherort befinden.

BUCKET_NAME |- RELEASE_ID |-index.d5a07c87.js.map

Wenn ein untergeordnetes Verzeichnis das Stammverzeichnis ist, sollte die Amazon-S3-URI als Amazon S3://BUCKET_NAME/DIRECTORY formatiert werden. In diesem Fall sollten sich die Quellkartendateien am folgenden Speicherort befinden.

BUCKET_NAME |- DIRECTORY |-RELEASE_ID |-index.d5a07c87.js.map

Anzeigen von nicht minimierten Stack-Traces in der RUM-Konsole

Nachdem Sie Ihre Quellzuordnungen auf Amazon S3 hochgeladen, Quellzuordnungen auf Ihrem RUM-App-Monitor aktiviert und Ihre Webanwendung mit dem im CloudWatch RUM-Webclient releaseId konfigurierten bereitgestellt haben, wählen Sie in der RUM-Konsole Ereignisse aus. Auf dieser Registerkarte werden die Rohdaten der RUM-Ereignisse angezeigt. Filtern Sie nach dem JS-Fehlerereignistyp und sehen Sie sich das neueste JS-Fehlerereignis an. Sie werden den nicht minimierten Stack-Trace im neuen event_details.unminifiedStack-Feld für Ereignisse sehen, die nach der Aktivierung des Features aufgenommen wurden.

Unminimierte Stack-Traces in Logs anzeigen CloudWatch

Aktivieren Sie die Speicherung von RUM-Ereignissen in den CloudWatch Protokollen, indem Sie die Datenspeicherung aktivieren. Nach der Aktivierung können Sie das neue Feld event_details.unminifiedStack durchsuchen. Auf diese Weise können Sie mithilfe von CloudWatch Log-Abfragen Trends analysieren und Probleme in mehreren Sitzungen miteinander verknüpfen.

Fehlerbehebung bei Quellkarten

CloudWatch RUM bietet sofort einsatzbereite Metriken zur Fehlerbehebung bei der Einrichtung Ihrer Quellenkarte. Diese Metriken werden im Metrik-Namespace namens AWS/RUM veröffentlicht. Alle der folgenden Metriken werden mit einer application_name-Dimension veröffentlicht. Der Wert dieser Dimension ist der Name der App-Überwachung. Die Metriken werden auch mit einer aws:releaseId-Dimension veröffentlicht. Der Wert dieser Dimension ist dem JavaScript Fehlerereignis releaseId zugeordnet.

MetricName Einheit Description

UnminifyLineFailureCount

Anzahl

Die Anzahl der Stack-Trace-Zeilen im JS-Fehlerereignis, deren Minimierung nicht aufgehoben werden konnte. Zusätzliche Details zu dem Fehler werden der spezifischen fehlgeschlagenen Zeile im Feld event_details.UnminifiedStack hinzugefügt.

UnminifyLineSuccessCount

Anzahl

Die Anzahl der Stack-Trace-Zeilen im JS-Fehlerereignis, deren Minimierung erfolgreich aufgehoben wurde.

UnminifyEventFailureCount

Anzahl

Die Anzahl der JS-Fehlerereignisse, bei denen die Minimierung bei keiner Zeile aufgehoben werden konnte. Zusätzliche Details zum Fehler werden im Feld event_details.unminifiedStack hinzugefügt.

UnminifyEventSuccessCount

Anzahl

Die Anzahl der JS-Fehlerereignisse, bei denen die Minimierung bei mindestens einer Stack-Trace-Zeile erfolgreich aufgehoben wurde.

CloudWatch RUM kann aus verschiedenen Gründen nicht in der Lage sein, eine Zeile im Stack-Trace zu deminifizieren, unter anderem aus folgenden Gründen:

  • Die entsprechende Quellkartendatei konnte aufgrund von Berechtigungsproblemen nicht abgerufen werden. Stellen Sie sicher, dass die Bucket-Ressourcenrichtlinie korrekt konfiguriert ist.

  • Die entsprechende Quellkartendatei ist nicht vorhanden. Stellen Sie sicher, dass die Quellzuordnungsdateien in den richtigen Bucket oder Ordner hochgeladen wurden, der denselben Namen hat wie die in Ihrem CloudWatch RUM-Webclient konfigurierte ReleaseID.

  • Die entsprechende Quellkartendatei ist zu groß. Teilen Sie Ihren Quellcode in kleinere Teile auf.

  • Quellkartendateien mit einer Größe von 50 MB wurden bereits für den Stack-Trace abgerufen. Reduzieren Sie die Länge des Stack-Trace, da 50 MB eine serviceseitige Beschränkung darstellen.

  • Die Quellkarte ist ungültig und konnte nicht indiziert werden. Stellen Sie sicher, dass es sich bei der Quellkarte um eine einfache JSON-Datei handelt, die der in der Source Map-V3-Spezifikation definierten Struktur folgt und die folgenden Felder enthält: Version, Datei, Quellen, Namen, Zuordnungen.

  • Die Quellkarte konnte den minimierten Quellcode nicht dem nicht minimierten Stack-Trace zuordnen. Stellen Sie sicher, dass die Quellkarte die richtige Quellkarte für die angegebene releaseId ist.