Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Eseguire il debug delle applicazioni con Dynamic Instrumentation
Con Dynamic Instrumentation, è possibile acquisire lo stato di runtime da un'applicazione live senza riavviare o ridistribuire. Lo stato di runtime include valori variabili, argomenti del metodo, valori restituiti e tracce dello stack. Si definiscono configurazioni di strumentazione che specificano dove nel codice acquisire i dati e gli strumenti dell'agente in esecuzione l'applicazione in fase di esecuzione.
Concetti
- Punto di interruzione
Strumentazione temporanea con scadenza automatica. La scadenza predefinita è 24 ore, configurabile da 5 minuti a 24 ore. Utilizza i punti di interruzione per il debug e le indagini.
- Sonda
Strumentazione permanente che persiste fino all'eliminazione esplicita. Usa le sonde per un'osservabilità continua.
- Istantanea
Un'acquisizione puntuale dello stato del programma che include variabili locali, argomenti, valore restituito, eccezioni e traccia dello stack. Dynamic Instrumentation emette istantanee come record di registro in Logs. CloudWatch
- Location (Ubicazione)
La posizione del codice in cui viene applicata la strumentazione. I campi obbligatori variano in base alla lingua.
Lingue supportate
Java
Python
JavaScript oppure TypeScript
Prerequisiti
Per utilizzare Dynamic Instrumentation, aggiorna i componenti della strumentazione alla versione più recente in base al tipo di implementazione:
-
Clienti Amazon EKS: aggiorna il componente aggiuntivo Amazon CloudWatch Observability EKS alla versione più recente. Il componente aggiuntivo include ADOT SDK e Agent. CloudWatch Per ulteriori informazioni, consulta Installare il componente aggiuntivo CloudWatch Observability EKS.
-
Tutti gli altri clienti: aggiorna entrambi i seguenti componenti:
L'SDK di strumentazione AWS Distro for OpenTelemetry (ADOT) per il tuo linguaggio (Java, Python o). Node.js
L' CloudWatch agente alla versione più recente.
Devono inoltre essere soddisfatte le seguenti condizioni:
CloudWatch Gli Application Signals devono essere abilitati per l'applicazione.
Imposta la variabile di ambiente
OTEL_AWS_DYNAMIC_INSTRUMENTATION_ENABLED=truesulla tua applicazione.Imposta la variabile
OTEL_SERVICE_NAMEdi ambiente sul nome del servizio.Imposta la variabile di ambiente
OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=. Per gli utenti esistenti di Application Signals, il valore deve corrispondere al nome dell'ambiente del servizio visualizzato nella console Application Signals.my_deployment_env_nameL' CloudWatch agente deve essere in esecuzione con la configurazione Application Signals.
La strumentazione dinamica non è supportata negli ambienti Lambda.
Aggiungi strumentazione dinamica alla tua applicazione
Dopo aver strumentato l'applicazione (vediPrerequisiti), create una configurazione di strumentazione che specifica in quale parte del codice desiderate introdurre la telemetria dinamica. Ogni configurazione definisce due elementi:
Posizione del codice da monitorare: la posizione del codice in cui viene applicato il punto di interruzione o la sonda.
Quali dati acquisire: lo stato di runtime acquisito durante l'esecuzione del punto di interruzione o della sonda.
Nota
Per impostazione predefinita, Dynamic Instrumentation acquisisce solo dati limitati. Per massimizzare il valore di questa funzionalità, prendete in considerazione l'espansione della configurazione di acquisizione utilizzando le opzioni descritte in. Limiti di acquisizione
Puoi creare configurazioni utilizzando la AWS CLI o l'SDK o utilizzando il server Model Context Protocol (MCP) con un assistente di codifica AI nel tuo IDE.
Crea configurazioni utilizzando la CLI o l'SDK
Usa la AWS CLI o l' AWS SDK per creare configurazioni di strumentazione a livello di codice.
Specificate la posizione del codice
La posizione definisce dove nel codice viene applicata la strumentazione. I campi obbligatori variano in base alla lingua:
| Lingua | Campi obbligatori | Campi opzionali |
|---|---|---|
| Java | CodeUnit(pacchetto)ClassName,MethodName, FilePath |
LineNumber |
| Python | CodeUnit(modulo)MethodName, FilePath |
LineNumber, ClassName |
| JavaScript oppure TypeScript | FilePath, LineNumber |
Nessuna. Sono supportati solo i breakpoint a livello di riga. Le sonde e i punti di interruzione a livello di funzione non sono supportati. TypeScript è supportato quando si forniscono mappe di origine. |
Configura quali dati acquisire
La configurazione di acquisizione controlla lo stato di runtime raccolto quando la strumentazione si attiva. Opzioni disponibili:
CaptureArguments— Elenco dei nomi degli argomenti dei metodi da acquisire.CaptureReturn— Cattura il valore restituito (booleano).CaptureStackTrace— Cattura la traccia dello stack (booleano).CaptureLocals— Elenco dei nomi delle variabili locali da acquisire.CaptureLimits— Controlla la profondità e le dimensioni dell'acquisizione (vediLimiti di acquisizione).
Parametri di configurazione
Parametri chiave per la creazione di una configurazione:
instrumentation-type—BREAKPOINToppurePROBEservice— Il nome del servizio riportato da Application Signalsenvironment— Il nome dell'ambientesignal-type—SNAPSHOTlocation— Campi di posizione del codice (vedi sopra)capture-configuration— Opzioni di acquisizione (vedi sopra)
Esempio
L'esempio seguente crea un punto di interruzione su un metodo Java:
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 } } }'
Crea configurazioni utilizzando il server MCP
L'approccio consigliato all'utilizzo di Dynamic Instrumentation prevede l'utilizzo del server CloudWatch Application Signals MCP (Model Context Protocol). L'MCP consente agli assistenti e agli agenti di codifica AI dell'IDE di creare, gestire e interrogare le configurazioni di Dynamic Instrumentation direttamente dall'ambiente di sviluppo.
Utilizzando l'MCP, il tuo assistente AI può:
Crea punti di interruzione e sonde in posizioni di codice specifiche senza uscire dall'editor.
Interroga le istantanee acquisite per esaminare i valori delle variabili di runtime e i percorsi delle chiamate.
Correla automaticamente i dati delle istantanee con il codice su cui stai lavorando per suggerire correzioni.
Gestisci il ciclo di vita delle configurazioni della strumentazione (visualizzazione dello stato, eliminazione dei punti di interruzione scaduti).
Per istruzioni di configurazione e utilizzo, consultate il server MCP Application Signals sul sito Web
Archiviazione di dati
Quando si attiva un breakpoint o una sonda, Dynamic Instrumentation crea un gruppo di log in CloudWatch Logs con il prefisso /aws/application-signals/ (service-nameservice-namedov'è il valore della variabile di OTEL_SERVICE_NAME ambiente) e scrive le istantanee acquisite come record di registro in quel gruppo di log.
Se il gruppo di log non esiste già, Dynamic Instrumentation lo crea automaticamente la prima volta che viene emessa un'istantanea. L'inserimento e lo storage dei log vengono fatturati alle tariffe standard di Logs. CloudWatch
Visualizza e gestisci le configurazioni
Nella CloudWatch console, vai alla pagina dei dettagli del servizio e scegli la scheda Strumentazione.
Passa da Breakpoint a Probes per visualizzare le configurazioni per tipo.
Visualizza i dettagli della configurazione, tra cui descrizione, configurazione di acquisizione, posizione, ARN e ora di scadenza.
Visualizza la cronologia dello stato per tenere traccia delle transizioni: Ready to Active to. Error/Disabled
Elimina le configurazioni che non sono più necessarie.
Comprendi lo stato
Ogni configurazione della strumentazione ha uno stato che indica lo stato attuale.
| Stato | Description |
|---|---|
| PRONTA | L'agente ha ricevuto la configurazione. |
| ACTIVE | L'agente ha applicato la strumentazione all'applicazione in esecuzione. |
| ERRORE | La strumentazione non è stata applicata. Vedi la causa dell'errore per i dettagli. |
| DISABILITATO | La strumentazione è scaduta o l'hai rimossa. |
Quando una strumentazione entra nello stato ERROR, potrebbero essere segnalate le seguenti cause:
| Causa dell'errore | Description |
|---|---|
| FILE_NOT_FOUND | Il percorso del file specificato non esiste nell'applicazione. |
| METHOD_NOT_FOUND | Il metodo specificato non esiste nella classe o nel modulo di destinazione. |
| LINE_NOT_EXECUTABLE | Il numero di riga specificato non corrisponde a un'istruzione eseguibile. |
| OVERLOADED_METHODS | Più metodi corrispondono al nome specificato. Fornisci ulteriori dettagli sulla posizione per identificare il metodo corretto. |
| LANGUAGE_MISMATCH | I campi di posizione non corrispondono alla lingua dell'applicazione in esecuzione. |
| RUNTIME_ERROR | Si è verificato un errore imprevisto durante l'applicazione della strumentazione. |
Limiti di acquisizione
I limiti di acquisizione controllano le dimensioni e la profondità dei dati acquisiti. Configura questi valori nel capture-limits campo della configurazione di acquisizione.
| Limite | Predefinita | Intervallo | Description |
|---|---|---|---|
| max StringLength | 255 | 1—255 | Numero massimo di caratteri catturati per valore di stringa. |
| max CollectionWidth | 20 | 1-20 | Numero massimo di elementi catturati per raccolta o array. |
| max ObjectDepth | 3 | 1—5 | Profondità massima per l'attraversamento di oggetti annidati. |
| max FieldsPerObject | 20 | 1-20 | Numero massimo di campi acquisiti per oggetto. |
| max StackFrames | 20 | 1-20 | Numero massimo di fotogrammi dello stack catturati. |
| MaxHits | 100 | 1—1000 | Numero massimo di acquisizioni prima della disattivazione automatica. Solo punti di interruzione. |
Ogni punto di strumentazione ha una frequenza limitata a 5 acquisizioni al secondo.