View a markdown version of this page

Eseguire il debug delle applicazioni con Dynamic Instrumentation - Amazon CloudWatch

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=true sulla tua applicazione.

  • Imposta la variabile OTEL_SERVICE_NAME di ambiente sul nome del servizio.

  • Imposta la variabile di ambiente OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=my_deployment_env_name. Per gli utenti esistenti di Application Signals, il valore deve corrispondere al nome dell'ambiente del servizio visualizzato nella console Application Signals.

  • L' 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:

  1. Posizione del codice da monitorare: la posizione del codice in cui viene applicato il punto di interruzione o la sonda.

  2. 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-typeBREAKPOINT oppure PROBE

  • service— Il nome del servizio riportato da Application Signals

  • environment— Il nome dell'ambiente

  • signal-typeSNAPSHOT

  • location— 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. GitHub

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-name (service-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.