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=truein Ihrer Anwendung ein.Setzen Sie die Umgebungsvariable
OTEL_SERVICE_NAMEauf Ihren Dienstnamen.Legen Sie die
OTEL_RESOURCE_ATTRIBUTES=deployment.environment.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.my_deployment_env_nameDer 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:
Wo im Code, der überwacht werden soll — Die Codeposition, an der der Breakpoint oder die Probe angewendet wird.
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-type—BREAKPOINToderPROBEservice— Der Dienstname, wie er von Application Signals gemeldet wurdeenvironment— Der Name der Umgebungsignal-type—SNAPSHOTlocation— 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
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/ (wobei der Wert Ihrer service-nameOTEL_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.