View a markdown version of this page

Debuggen von Anwendungen mit dynamischer Instrumentierung - 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.

Debuggen von Anwendungen mit dynamischer Instrumentierung

Mit Dynamic Instrumentation können Sie den Laufzeitstatus einer Live-Anwendung erfassen, ohne sie neu starten oder erneut bereitstellen zu müssen. Der Laufzeitstatus umfasst Variablenwerte, Methodenargumente, Rückgabewerte und Stack-Traces. Sie definieren Instrumentierungskonfigurationen, die angeben, wo in Ihrem Code Daten erfasst werden sollen, und der ausgeführte Agent instrumentiert die Anwendung zur Laufzeit.

Konzepte

Breakpoint

Temporäre Instrumentierung, die automatisch abläuft. Das Standardablaufdatum ist 24 Stunden und kann von 5 Minuten bis 24 Stunden konfiguriert werden. Verwenden Sie Breakpoints für Debugging und Untersuchungen.

Sonde

Permanente Instrumentierung, die so lange bestehen bleibt, bis sie explizit gelöscht wird. Verwenden Sie Sonden für kontinuierliche Beobachtbarkeit.

Schnappschuss

Eine zeitgenaue Erfassung des Programmstatus, einschließlich lokaler Variablen, Argumente, Rückgabewerte, Ausnahmen und Stack-Trace. Dynamic Instrumentation gibt Snapshots als Protokolldatensätze in Logs aus. CloudWatch

Speicherort

Die Codestelle, an der die Instrumentierung angewendet wird. Die erforderlichen Felder unterscheiden sich je nach Sprache.

Unterstützte Sprachen

  • Java

  • Python

  • JavaScript oder TypeScript

Voraussetzungen

Um Dynamic Instrumentation zu verwenden, aktualisieren Sie Ihre Instrumentierungskomponenten auf die neueste Version, die Ihrem Bereitstellungstyp entspricht:

  • Amazon EKS-Kunden — Aktualisieren Sie das Amazon CloudWatch Observability EKS-Add-on auf die neueste Version. Das Add-on umfasst das ADOT SDK und CloudWatch den ADOT-Agent. Weitere Informationen finden Sie unter Installieren des CloudWatch Observability EKS-Add-ons.

  • Alle anderen Kunden — Aktualisieren Sie die beiden folgenden Komponenten:

    • Das Instrumentierungs-SDK für AWS Distro for OpenTelemetry (ADOT) für Ihre Sprache (Java, Python oder Node.js).

    • Der CloudWatch Agent auf die neueste Version.

Die folgenden Bedingungen müssen ebenfalls erfüllt sein:

  • CloudWatch Anwendungssignale müssen für Ihre Anwendung aktiviert sein.

  • Stellen Sie die Umgebungsvariable OTEL_AWS_DYNAMIC_INSTRUMENTATION_ENABLED=true in Ihrer Anwendung ein.

  • Setzen Sie die Umgebungsvariable OTEL_SERVICE_NAME auf Ihren Dienstnamen.

  • Legen Sie die OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=my_deployment_env_name-Umgebungsvariable fest. Für bestehende Application Signals-Benutzer muss der Wert mit dem Umgebungsnamen für Ihren Service übereinstimmen, wie er in der Application Signals-Konsole angezeigt wird.

  • Der CloudWatch Agent muss mit der Application Signals-Konfiguration ausgeführt werden.

  • Dynamische Instrumentierung wird in Lambda-Umgebungen nicht unterstützt.

Fügen Sie Ihrer Anwendung dynamische Instrumentierung hinzu

Nachdem Sie Ihre Anwendung instrumentiert haben (sieheVoraussetzungen), erstellen Sie eine Instrumentierungskonfiguration, die festlegt, für welchen Teil Ihres Codes Sie dynamische Telemetrie einführen möchten. Jede Konfiguration definiert zwei Dinge:

  1. Wo im Code, der überwacht werden soll — Die Codeposition, an der der Breakpoint oder die Probe angewendet wird.

  2. Welche Daten erfasst werden sollen — Der Laufzeitstatus, der bei der Ausführung des Breakpoints oder der Probe erfasst wurde.

Anmerkung

Standardmäßig erfasst Dynamic Instrumentation nur begrenzte Daten. Um den Nutzen dieser Funktion zu maximieren, sollten Sie erwägen, die Erfassungskonfiguration mithilfe der unter beschriebenen Optionen zu erweiternGrenzwerte erfassen.

Sie können Konfigurationen mit der AWS CLI oder dem SDK oder mithilfe des Model Context Protocol (MCP) -Servers mit einem KI-Codierungsassistenten in Ihrer IDE erstellen.

Konfigurationen mit der CLI oder dem SDK erstellen

Verwenden Sie die AWS CLI oder das AWS SDK, um Instrumentierungskonfigurationen programmgesteuert zu erstellen.

Geben Sie den Speicherort des Codes an

Die Position definiert, wo in Ihrem Code die Instrumentierung angewendet wird. Die erforderlichen Felder unterscheiden sich je nach Sprache:

Sprache Pflichtfelder Optionale Felder
Java CodeUnit(Paket),ClassName,MethodName, FilePath LineNumber
Python CodeUnit(Modul)MethodName, FilePath LineNumber, ClassName
JavaScript oder TypeScript FilePath, LineNumber Keine. Es werden nur Breakpoints auf Zeilenebene unterstützt. Prüfpunkte und Breakpoints auf Funktionsebene werden nicht unterstützt. TypeScript wird unterstützt, wenn Sie Quellzuordnungen bereitstellen.

Konfigurieren Sie, welche Daten erfasst werden sollen

Die Capture-Konfiguration steuert, welcher Laufzeitstatus erfasst wird, wenn die Instrumentierung ausgelöst wird. Verfügbare Optionen:

  • CaptureArguments— Liste der Namen der zu erfassenden Methodenargumente.

  • CaptureReturn— Erfasst den Rückgabewert (boolean).

  • CaptureStackTrace— Erfasst den Stack-Trace (boolean).

  • CaptureLocals— Liste der lokalen Variablennamen, die erfasst werden sollen.

  • CaptureLimits— Steuern Sie die Tiefe und Größe der Erfassung (sieheGrenzwerte erfassen).

Konfigurationsparameter

Wichtige Parameter beim Erstellen einer Konfiguration:

  • instrumentation-typeBREAKPOINT oder PROBE

  • service— Der Dienstname, wie er von Application Signals gemeldet wurde

  • environment— Der Name der Umgebung

  • signal-typeSNAPSHOT

  • location— Felder für die Codeposition (siehe oben)

  • capture-configuration— Aufnahmeoptionen (siehe oben)

Beispiel

Das folgende Beispiel erstellt einen Breakpoint für eine Java-Methode:

aws application-signals create-instrumentation-configuration \ --instrumentation-type BREAKPOINT \ --service "my-service" \ --environment "production" \ --signal-type SNAPSHOT \ --location '{ "CodeLocation": { "Language": "Java", "CodeUnit": "com.example.service", "ClassName": "OrderController", "MethodName": "processOrder", "FilePath": "OrderController.java" } }' \ --capture-configuration '{ "CodeCapture": { "CaptureArguments": ["orderId", "user"], "CaptureReturn": true, "CaptureStackTrace": true, "CaptureLimits": { "MaxHits": 100, "MaxStringLength": 255, "MaxCollectionWidth": 20, "MaxObjectDepth": 3, "MaxFieldsPerObject": 20, "MaxStackFrames": 20 } } }'

Erstellen Sie Konfigurationen mithilfe des MCP-Servers

Der empfohlene Ansatz für die Verwendung von Dynamic Instrumentation erfolgt über den MCP-Server (Model Context Protocol) von CloudWatch Application Signals. Mit dem MCP können KI-Codierungsassistenten und -Agenten in Ihrer IDE Konfigurationen für dynamische Instrumentierung direkt in Ihrer Entwicklungsumgebung erstellen, verwalten und abfragen.

Mit dem MCP kann Ihr KI-Assistent:

  • Erstellen Sie Haltepunkte und Sonden an bestimmten Codestellen, ohne Ihren Editor zu verlassen.

  • Fragen Sie aufgezeichnete Schnappschüsse ab, um die Werte und Aufrufpfade von Laufzeitvariablen zu überprüfen.

  • Korrelieren Sie Snapshot-Daten automatisch mit dem Code, an dem Sie gerade arbeiten, um Problemlösungen vorzuschlagen.

  • Verwalten Sie den Lebenszyklus von Instrumentierungskonfigurationen (Status anzeigen, abgelaufene Breakpoints löschen).

Anweisungen zur Einrichtung und Verwendung finden Sie auf der Website auf dem MCP-Server von Application Signals. GitHub

Datenspeicher

Wenn ein Breakpoint oder eine Probe ausgelöst wird, erstellt Dynamic Instrumentation in CloudWatch Logs eine Protokollgruppe mit dem Präfix /aws/application-signals/service-name (wobei der Wert Ihrer OTEL_SERVICE_NAME Umgebungsvariablen service-name ist) und schreibt aufgezeichnete Snapshots als Protokolldatensätze in diese Protokollgruppe.

Wenn die Protokollgruppe noch nicht existiert, erstellt Dynamic Instrumentation sie automatisch, wenn zum ersten Mal ein Snapshot ausgegeben wird. Die Aufnahme und Speicherung von Protokollen wird Ihnen zu den CloudWatch Standardtarifen für Logs in Rechnung gestellt.

Konfigurationen anzeigen und verwalten

Navigieren Sie in der CloudWatch Konsole zur Seite mit den Servicedetails und wählen Sie die Registerkarte Instrumentierung aus.

  • Wechseln Sie zwischen Breakpoints und Probes, um Konfigurationen nach Typ anzuzeigen.

  • Zeigen Sie Konfigurationsdetails an, einschließlich Beschreibung, Erfassungskonfiguration, Speicherort, ARN und Ablaufzeit.

  • Statusverlauf anzeigen, um Übergänge nachzuverfolgen: Bereit bis Aktiv für Error/Disabled.

  • Löschen Sie Konfigurationen, die nicht mehr benötigt werden.

Den Status verstehen

Jede Instrumentierungskonfiguration hat einen Status, der ihren aktuellen Status angibt.

Status Description
BEREIT Der Agent hat die Konfiguration erhalten.
ACTIVE Der Agent hat die Instrumentierung auf die laufende Anwendung angewendet.
ERROR Die Instrumentierung konnte nicht angewendet werden. Einzelheiten finden Sie unter der Fehlerursache.
DISABLED (DEAKTIVIERT) Die Instrumentierung ist abgelaufen, oder Sie haben sie entfernt.

Wenn eine Instrumentierung in den Status ERROR übergeht, können die folgenden Ursachen gemeldet werden:

Ursache des Fehlers Description
FILE_NOT_FOUND Der angegebene Dateipfad ist in der Anwendung nicht vorhanden.
METHOD_NOT_FOUND Die angegebene Methode ist in der Zielklasse oder dem Zielmodul nicht vorhanden.
LINE_NOT_EXECUTABLE Die angegebene Zeilennummer entspricht keiner ausführbaren Anweisung.
ÜBERLADENE_METHODEN Mehrere Methoden entsprechen dem angegebenen Namen. Geben Sie zusätzliche Standortdetails an, um die richtige Methode zu identifizieren.
LANGUAGE_MISMATCH Die Standortfelder stimmen nicht mit der Sprache der laufenden Anwendung überein.
RUNTIME_ERROR Bei der Anwendung der Instrumentierung ist ein unerwarteter Fehler aufgetreten.

Grenzwerte erfassen

Erfassungsgrenzen steuern die Größe und Tiefe der erfassten Daten. Konfigurieren Sie diese Werte im capture-limits Feld der Erfassungskonfiguration.

Limit Standard Range Description
max StringLength 255 1—255 Maximale Anzahl erfasster Zeichen pro Zeichenkettenwert.
max CollectionWidth 20 1–20 Maximale Anzahl der pro Sammlung oder Array erfassten Elemente.
max ObjectDepth 3 1—5 Maximale Tiefe für die Durchquerung verschachtelter Objekte.
max FieldsPerObject 20 1–20 Maximale Anzahl erfasster Felder pro Objekt.
max StackFrames 20 1–20 Maximale Anzahl erfasster Stack-Frames.
Max. Hits 100 1—1000 Maximale Anzahl an Aufnahmen vor der automatischen Deaktivierung. Nur Breakpoints.

Jeder Instrumentierungspunkt ist auf 5 Aufnahmen pro Sekunde begrenzt.