View a markdown version of this page

Sistemi supportati - 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à.

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' CloudWatch agente e AWS Distro per. OpenTelemetry

Compatibilità con Java

Application Signals supporta le applicazioni Java e supporta le stesse librerie e framework Java di Distro for. AWS 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 Distro for. AWS 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.

Nota

L'SDK AWS Distro for Open Telemetry (ADOT) per .NET non supporta l'SDK per .NET V4. AWS Usa AWS SDK.NET V3 per il supporto completo di Application Signals.

Compatibilità PHP

Application Signals supporta le applicazioni PHP con strumentazione Zero Code. OpenTelemetry Non è disponibile alcun AWS SDK Distro for Open Telemetry (ADOT) per questo scopo. È necessario utilizzare lo standard OpenTelemetry Instrumentation SDK con Transaction Search abilitata. AmazonCloudWatch/latest/monitoring/CloudWatch-Transaction-Search.html Per iniziare a utilizzare la strumentazione a codice zero in PHP, segui questi passaggi tratti dai documenti di PHP Instrumentation, OpenTelemetry PHP zero-code instrumentation. https://opentelemetry.io/docs/zero-code/php/ L'instrumentazione automatica è disponibile per diverse librerie PHP di uso comune. Per OpenTelemetry ulteriori informazioni, consultate il registro.

Compatibilità con Ruby

Application Signals supporta le applicazioni Ruby con strumentazione Zero Code. OpenTelemetry Non è disponibile alcun AWS SDK Distro for Open Telemetry (ADOT) per questo scopo. È necessario utilizzare lo standard OpenTelemetry Instrumentation SDK con Transaction Search abilitata. AmazonCloudWatch/latest/monitoring/CloudWatch-Transaction-Search.html Per iniziare a utilizzare la strumentazione a codice zero in Ruby, segui questi passaggi tratti dai documenti di Ruby Instrumentation, OpenTelemetry Ruby zero-code instrumentation. https://opentelemetry.io/docs/languages/ruby/getting-started/#instrumentation Per un elenco delle librerie di instrumentazione rilasciate, consulta Registry.

Compatibilità con Python

Application Signals supporta le stesse librerie e gli stessi framework di Distro for. AWS 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, l'assenza della variabile di ambiente PYTHONPATH può talvolta impedire l'avvio dell'applicazione. Per risolvere questo problema, assicurati di impostare la variabile di PYTHONPATH ambiente sulla posizione della directory di lavoro dell'applicazione. Ciò è dovuto a un problema noto con la OpenTelemetry strumentazione automatica. Per ulteriori informazioni su questo problema, consulta Python autoinstrumentation setting of PYTHONPATH is not compliant.

  • Per le applicazioni Django, sono richieste configurazioni aggiuntive, descritte nella documentazione di Python. OpenTelemetry

    • Usa il flag --noreload per impedire il ricaricamento automatico.

    • Imposta la variabile di ambiente DJANGO_SETTINGS_MODULE sulla posizione del file settings.py dell'applicazione Django. Ciò garantisce che OpenTelemetry possa accedere e integrarsi correttamente con le impostazioni di Django.

Node.js compatibilità

Application Signals supporta le stesse Node.js librerie e framework di AWS Distro for. OpenTelemetry Per ulteriori informazioni, consulta Supported instrumentations.

Limitazioni note relative all'utilizzo di ESM Node.js

La AWS Distro for Opentelemetry Node.js supporta due sistemi di moduli: ECMAScript Modules (ESM) e CommonJS (CJS). Per abilitare Application Signals, si consiglia di utilizzare il formato del modulo CJS perché il supporto di ESM è sperimentale e in fase OpenTelemetry JavaScript di elaborazione. Per maggiori dettagli, consulta Moduli ECMAScript versus CommonJS on. GitHub

Per determinare se la tua applicazione utilizza CJS e non ESM, assicurati che l'applicazione non soddisfi le condizioni per abilitare ESM. Per ulteriori informazioni su queste condizioni, vedere Abilitazione nella documentazione. Node.js

La AWS Distro for Opentelemetry Node.js fornisce un supporto limitato per ESM basato sul OpenTelemetry JavaScript supporto sperimentale per ESM. Ciò significa che:

  • La versione deve essere la 18.19.0 o successiva. Node.js

  • L' Node.js applicazione che si desidera utilizzare deve includere @aws/aws-distro-opentelemetry-node-autoinstrumentation e @opentelemetry/instrumentation come dipendenze.

  • L' Node.js applicazione che si desidera strumentare 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 Node.js ESM, forniamo diverse configurazioni per diverse piattaforme:

GoLang compatibilità

Application Signals supporta le GoLang applicazioni con strumentazione Zero Code. OpenTelemetry Non è disponibile alcun AWS SDK Distro for Open Telemetry (ADOT) per questo scopo. È necessario utilizzare lo standard OpenTelemetry Instrumentation SDK con Transaction Search abilitata. AmazonCloudWatch/latest/monitoring/CloudWatch-Transaction-Search.html Per iniziare a utilizzare la strumentazione a codice zero in GoLang, segui questi passaggi dai documenti Instrumentation, Guida introduttiva a OpenTelemetry GoLang Go Automatic Instrumentation. OpenTelemetry

GoLang Considerazioni sull'implementazione e strumentazione

Scopri importanti dettagli di implementazione per l'utilizzo della strumentazione. GoLang Questa guida spiega come implementare la propagazione esplicita del contesto nelle GoLang applicazioni e configurare Application Signals. L'implementazione corretta della GoLang strumentazione consente di monitorare e analizzare in modo efficace le prestazioni dell'applicazione.

La strumentazione del AWS SDK

La libreria di strumentazione automatica Golang non supporta la strumentazione SDK pronta all'uso. AWS È necessario utilizzare l'instrumentazione della libreria otelaws insieme all'agente di instrumentazione automatica:

  1. Installa la dipendenza richiesta:

    go get go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws
  2. Aggiungi la seguente linea all'applicazione:

    otelaws.AppendMiddlewares(&cfg.APIOptions)
  3. Crea client successivi con l'oggetto precedente: AWS aws.Config

    s3Client := s3.NewFromConfig(cfg)

L'esempio seguente genererà intervalli di AWS chiamate e si integra con la strumentazione 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 Context non viene passato tra le richieste: i client HTTP devono utilizzarlo NewRequestWithContext() invece di NewRequest() per assicurarsi 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 QueryContext al posto di Query

  • Utilizza ExecContext al posto di Exec

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à CloudWatch dell'utente di identificare con precisione i client del database. Di conseguenza, verranno visualizzate le dipendenze UnknownRemoteService al posto del nome del client DB 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 OpenTelemetry comunità 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, è possibile utilizzare l' CloudWatch agente con strumentazione automatica per generare automaticamente gli attributi delle risorse dell'host.

Tabella per il supporto della versione del runtime

Lingua Versione di runtime

Java

Versioni JVM 8, 11, 17, 21, 23 e 25

Python

Versioni Python 3.10, 3.11, 3.12, 3.13, 3.14

.NET

.NET 8, 9, 10 e .NET Framework 4.6.2 e versioni successive

Node.js

Node.js versioni 18, 20, 22 e 24

PHP

PHP versione 8.0 e successive

Ruby

Ruby >= 3.1, JRuby >= 9.3.2.0 o >= 2.1 TruffleRuby

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 Observability EKS, interessando le versioni fino a. CloudWatch 2.3.0-eksbuild.1 2.6.0-eksbuild.1 Il problema è stato risolto nella versione Java SDK v1.32.6 e nella versione aggiuntiva Amazon CloudWatch Observability EKS. 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.