Sistemi supportati
Application Signals è supportato e testato su Amazon EKS, Kubernetes nativo, Amazon ECS e Amazon EC2. Le istruzioni per abilitare Application Signals su Amazon EC2 dovrebbero funzionare su qualsiasi piattaforma che supporti l'agente CloudWatch e AWS Distro per OpenTelemetry.
Argomenti
Compatibilità con Java
Application Signals supporta le applicazioni Java e le stesse librerie e framework Java di AWS Distro per OpenTelemetry. Per ulteriori informazioni, consulta Librerie, framework, server di applicazioni e JVM supportati
Compatibilità .NET
Application Signals supporta le stesse librerie e framework .NET di AWS Distro per OpenTelemetry. Per ulteriori informazioni, consulta Supported instrumentations
Application Signals supporta applicazioni .NET in esecuzione su CPU x86-64 o ARM64 e supporta Linux x64, Linux ARM64 e Microsoft Windows Server 2022 x64.
Compatibilità PHP
Application Signals supporta applicazioni PHP con instrumentazione OpenTelemetry Zero Code. A tale scopo non è disponibile alcun SDK AWS Distro per Open Telemetry (ADOT). È necessario utilizzare l'SDK standard di OpenTelemetry Instrumentation con Transaction Search abilitato. Per iniziare a utilizzare l'instrumentazione a codice zero in PHP, segui questi passaggi dalla documentazione di instrumentazione PHP di OpenTelemetry, PHP zero-code instrumentation
Compatibilità con Ruby
Application Signals supporta le applicazioni Ruby con instrumentazione OpenTelemetry Zero Code. A tale scopo non è disponibile alcun SDK AWS Distro per Open Telemetry (ADOT). È necessario utilizzare l'SDK standard di OpenTelemetry Instrumentation con Transaction Search abilitato. Per iniziare a utilizzare l'instrumentazione a codice zero in Ruby, segui questi passaggi dalla documentazione di instrumentazione Ruby di OpenTelemetry, Ruby zero-code instrumentation
Compatibilità con Python
Application Signals supporta le stesse librerie e framework di AWS Distro per OpenTelemetry. Per ulteriori informazioni, consulta Supported packages sulla pagina opentelemetry-python-contrib
Prima di abilitare Application Signals per le applicazioni Python, tieni presente le considerazioni riportate di seguito.
In alcune applicazioni containerizzate, una variabile di ambiente
PYTHONPATHmancante a volte può impedire l'avvio dell'applicazione. Per risolvere questo problema, assicurati di impostare la variabile di ambientePYTHONPATHsulla posizione della directory di lavoro dell'applicazione. Ciò è dovuto a un problema noto con l'instrumentazione automatica di OpenTelemetry. Per ulteriori informazioni su questo problema, consulta Python autoinstrumentation setting of PYTHONPATH is not compliant. Per le applicazioni Django sono richieste alcune configurazioni aggiuntive, che sono descritte nella documentazione di OpenTelemetry Python
. Usa il flag
--noreloadper impedire il ricaricamento automatico.Imposta la variabile di ambiente
DJANGO_SETTINGS_MODULEsulla posizione del filesettings.pydell'applicazione Django. Ciò garantisce che OpenTelemetry possa accedere e integrarsi correttamente con le impostazioni di Django.
Compatibilità con Node.js
Application Signals supporta le stesse librerie e framework Node.js di AWS Distro per OpenTelemetry. Per ulteriori informazioni, consulta Supported instrumentations
Limitazioni note di Node.js con ESM
AWS Distro per OpenTelemetry Node.js supporta due sistemi di moduli: ECMAScript Modules (ESM) e CommonJS (CJS). Per abilitare Application Signals, ti consigliamo di utilizzare il formato del modulo CJS poiché il supporto di OpenTelemetry JavaScript per ESM è sperimentale e ancora in fase di sviluppo. Per maggiori dettagli, consulta ECMAScript Modules vs. CommonJS
Per determinare se la tua applicazione utilizza CJS e non ESM, assicurati che non soddisfi le condizioni per abilitare ESM. Per ulteriori informazioni su queste condizioni, consulta Enabling
AWS Distro per OpenTelemetry Node.js fornisce un supporto limitato per ESM basato sul supporto sperimentale di OpenTelemetry JavaScript per ESM. Ciò significa che:
La versione di Node.js deve essere 18.19.0 o successiva.
L'applicazione Node.js che desideri instrumentare deve includere
@aws/aws-distro-opentelemetry-node-autoinstrumentatione@opentelemetry/instrumentationcome dipendenze.L'applicazione Node.js che desideri instrumentare deve iniziare con la seguente opzione di nodo:
NODE_OPTIONS=' --import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs'
Per abilitare Application Signals con il formato del modulo ESM Node.js, forniamo diverse configurazioni per diverse piattaforme:
Amazon EKS – Configurazione di un'applicazione Node.js con il formato del modulo ESM
Amazon ECS con strategia sidecar: Setting up a Node.js application with the ESM module format
Amazon ECS con strategia daemon: Setting up a Node.js application with the ESM module format
Amazon ECS con AWS CDK
Amazon EC2 – Setting up a Node.js application with the ESM module format
Kubernetes – Configurazione di un'applicazione Node.js con il formato del modulo ESM
Compatibilità con GoLang
Application Signals supporta le applicazioni GoLang con instrumentazione OpenTelemetry Zero Code. A tale scopo non è disponibile alcun SDK AWS Distro per Open Telemetry (ADOT). È necessario utilizzare l'SDK standard di OpenTelemetry Instrumentation con Transaction Search abilitato. Per iniziare a utilizzare l'instrumentazione a codice zero in GoLang, segui questi passaggi nella documentazione di instrumentazione GoLang di OpenTelemetry, Getting Started with OpenTelemetry Go Automatic Instrumentation
Considerazioni di implementazione per l'istrumentazione in GoLang
Scopri importanti dettagli relativi all'implementazione per l'utilizzo dell'instrumentazione GoLang. Questa guida spiega come implementare la propagazione contestuale esplicita nelle applicazioni GoLang e configurare Application Signals. L'implementazione corretta dell'instrumentazione GoLang consente di tracciare e analizzare efficacemente le prestazioni dell'applicazione.
Instrumentazione dell'SDK AWS
La libreria di instrumentazione automatica Golang non supporta nativamente l'instrumentazione dell'SDK AWS. È necessario utilizzare l'instrumentazione della libreria otelaws insieme all'agente di instrumentazione automatica:
-
Installa la dipendenza richiesta:
go get go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws -
Aggiungi la seguente linea all'applicazione:
otelaws.AppendMiddlewares(&cfg.APIOptions) -
Crea client AWS successivi con l'oggetto
aws.Configprecedente:s3Client := s3.NewFromConfig(cfg)
L'esempio seguente genererà intervalli per le chiamate AWS e si integra con l'instrumentazione automatica.
func handleRequest(ctx context.Context) error { cfg, err := config.LoadDefaultConfig(ctx) if err != nil { return err } // Add OpenTelemetry instrumentation middleware to the AWS config otelaws.AppendMiddlewares(&cfg.APIOptions) // Create S3 client with the instrumented config s3Client := s3.NewFromConfig(cfg) // Now any operations with this client will be traced // with the context from the upstream call _, err = s3Client.ListBuckets(ctx, &s3.ListBucketsInput{}) return err }
Per informazioni sulla configurazione dell'eseguibile di instrumentazione automatica, consulta Configuration methods
Instrumentazione delle chiamate HTTP
Le chiamate HTTP possono dividere le tracce quando il contesto non viene passato tra le richieste: i client HTTP devono utilizzare NewRequestWithContext() invece di NewRequest() per garantire che il servizio downstream utilizzi lo stesso contesto. Quando entrambi i servizi dispongono di agenti di instrumentazione, gli intervalli si connettono allo stesso ID di traccia per fornire visibilità end-to-end.
func makeDownstreamCall(ctx context.Context, url string) ([]byte, error) { client := &http.Client{} // Create request with context from the upstream call req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { return nil, err } // Execute the request resp, err := client.Do(req) if err != nil { return nil, err } defer resp.Body.Close() }
Instrumentazione delle chiamate SQL
Gli intervalli SQL possono disconnettersi dall'intervallo principale, facendo sì che le chiamate del client vengano dedotte come intervalli del server. Ciò si verifica quando le chiamate SQL non ricevono il contesto dai rispettivi gestori a monte. Le chiamate SQL standard come Query e Exec utilizzano context.Background() per impostazione predefinita, non il contesto di chi effettua la chiamata a monte. Sostituisci le chiamate SQL standard con i loro equivalenti sensibili al contesto:
-
Utilizza
QueryContextal posto diQuery -
Utilizza
ExecContextal posto diExec
Questi metodi passano il contesto della richiesta a monte alle chiamate DB, mantenendo la corretta continuità di traccia.
func queryDatabase(ctx context.Context, db *sql.DB, userID string) (*sql.Rows, error) { // This breaks the trace context // row := db.Query("SELECT name FROM users WHERE id = $1", userID) // This passes the context from the upstream call for trace continuity rows, err := db.QueryContext(ctx, "SELECT name FROM users WHERE id = $1", userID) return rows, error }
Nota
L'attributo db.system non è attualmente supportato per le chiamate SQL. Questa limitazione influisce sulla capacità di CloudWatch di identificare con precisione i client del database. Di conseguenza, nelle dipendenze verrà visualizzato UnknownRemoteService anziché il nome del client di database che effettua la query.
Rilevatori di risorse
L'instrumentazione automatica Go attualmente non supporta la configurazione dei rilevatori di risorse in fase di runtime. La community di OpenTelemetry sta lavorando a una funzionalità per configurare i rilevatori di risorse utilizzando variabili di ambiente. Cerca questa funzionalità in uno dei prossimi aggiornamenti. Nel frattempo, puoi utilizzare CloudWatch Agent con instrumentazione automatica per generare automaticamente gli attributi delle risorse host.
Tabella per il supporto della versione del runtime
| Lingua | Versione di runtime |
|---|---|
|
Java |
JVM versioni 8, 11, 17, 21 e 23 |
|
Python |
Sono supportate le versioni di Python 3.9 e successive |
|
.NET |
La versione 1.6.0 e precedenti supportano .NET 6, 8 e .NET Framework 4.6.2 e versioni successive La versione 1.7.0 e successive supportano .NET 8, 9 e .NET Framework 4.6.2 e versioni successive |
|
Node.js |
Node.js versioni 14, 16, 18, 20 e 22 |
|
PHP |
PHP versione 8.0 e successive |
|
Ruby |
CRuby >= 3.1, JRuby >= 9.3.2.0 oppure TruffleRuby >= 22.1 |
GoLang |
Golang versione 1.18 e successive |
Problemi noti
È noto che la raccolta delle metriche di runtime nella versione dell'SDK Java v1.32.5 non funziona con le applicazioni che utilizzano JBoss Wildfly. Questo problema si estende al componente aggiuntivo Amazon CloudWatch Observability EKS e riguarda le versioni da 2.3.0-eksbuild.1 a 2.6.0-eksbuild.1. Questo problema è risolto nell'SDK per Java versione v1.32.6 e nel componente aggiuntivo Amazon CloudWatch Observability EKS versione v3.0.0-eksbuild.1.
Se riscontri problemi, esegui l'upgrade della versione dell'SDK per Java o disabilita la raccolta delle metriche di runtime aggiungendo la variabile di ambiente OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED=false all'applicazione.