支援的系統 - Amazon CloudWatch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

支援的系統

Application Signals 在 Amazon EKS、原生 Kubernetes、Amazon ECS 和 Amazon EC2 上受到支援和測試。在 Amazon EC2 上啟用 Application Signals 的指示,應該適用於支援 CloudWatch 代理程式和 AWS Distro for OpenTelemetry 的任何平台。

Java 相容性

Application Signals 支援 Java 應用程式,並支援與 AWS Distro for OpenTelemetry 相同的 Java 程式庫和架構。如需詳細資訊,請參閱支援的程式庫、架構、應用程式伺服器和 JVM

.NET 相容性

Application Signals 支援與 AWS Distro for OpenTelemetry 相同的 .NET 程式庫和架構。如需詳細資訊,請參閱支援的檢測

Application Signals 支援在 x86-64 或 ARM64 CPUs 上執行的 .NET 應用程式,並支援 Linux x64、Linux ARM64 和 Microsoft Windows Server 2022 x64。

PHP 相容性

Application Signals 支援具有 OpenTelemetry 零代碼檢測的 PHP 應用程式。沒有可用於此目的的 AWS Distro for Open Telemetry (ADOT) SDK。您應該使用標準 OpenTelemetry Instrumentation SDK 並啟用交易搜尋。若要在 PHP 中開始使用零代碼檢測,請遵循 OpenTelemetry PHP Instrumentation 文件 PHP 零代碼檢測中的下列步驟。自動檢測適用於許多常用的 PHP 程式庫。如需詳細資訊,請參閱 OpenTelemetry 登錄檔。

Ruby 相容性

Application Signals 支援使用 OpenTelemetry 零代碼檢測的 Ruby 應用程式。沒有可用於此目的的 AWS Distro for Open Telemetry (ADOT) SDK。您應該使用標準 OpenTelemetry Instrumentation SDK 並啟用交易搜尋。若要在 Ruby 中開始使用零代碼檢測,請遵循 OpenTelemetry Ruby Instrumentation 文件 Ruby 零代碼檢測中的下列步驟。如需已發行檢測程式庫的清單,請參閱 登錄檔。

Python 相容性

Application Signals 支援與 AWS Distro for OpenTelemetry 相同的程式庫和架構。如需詳細資訊,請參閱 opentelemetry-python-contrib支援的套件

為 Python 應用程式啟用 Application Signals 之前,請注意下列考量。

  • 在某些容器化應用程式中,缺少PYTHONPATH環境變數有時可能會導致應用程式無法啟動。若要解決此問題,請確定您將PYTHONPATH環境變數設定為應用程式工作目錄的位置。這是因為 OpenTelemetry 自動檢測的已知問題。如需此問題的詳細資訊,請參閱 PYTHONPATH 的 Python 自動檢測設定不合規

  • 對於 Django 應用程式,還有其他必要的組態,如 OpenTelemetry Python 文件所述。

    • 使用 --noreload旗標來防止自動重新載入。

    • DJANGO_SETTINGS_MODULE環境變數設定為 Django 應用程式settings.py檔案的位置。這可確保 OpenTelemetry 可以正確存取並與您的 Django 設定整合。

Node.js 相容性

Application Signals 支援與 AWS Distro for OpenTelemetry 相同的 Node.js 程式庫和架構。如需詳細資訊,請參閱支援的檢測

使用 ESM 的 Node.js 已知限制

AWS Distro for Opentelemetry Node.js 支援兩個模組系統:ECMAScript Modules (ESM) 和 CommonJS (CJS)。若要啟用 Application Signals,我們建議您使用 CJS 模組格式,因為 OpenTelemetry JavaScript 對 ESM 的支援是實驗性的,並且正在進行的工作。如需詳細資訊,請參閱 GitHub 上的 ECMAScript 模組與 CommonJS

若要判斷您的應用程式是否使用 CJS 而非 ESM,請確定您的應用程式不符合啟用 ESM 的條件。如需這些條件的詳細資訊,請參閱 Node.js 文件中的啟用

AWS Distro for Opentelemetry Node.js 根據 OpenTelemetry JavaScript 的 ESM 實驗性支援,提供有限的 ESM 支援。這表示下列事項:

  • Node.js 版本必須是 18.19.0 或更新版本。

  • 您要檢測的 Node.js 應用程式必須包含 @aws/aws-distro-opentelemetry-node-autoinstrumentation@opentelemetry/instrumentation做為相依性。

  • 您要檢測的 Node.js 應用程式必須以下列節點選項開頭:

    NODE_OPTIONS=' --import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs'

若要使用 Node.js ESM 模組格式啟用 Application Signals,我們為不同的平台提供不同的設定:

GoLang 相容性

Application Signals 支援使用 OpenTelemetry 零代碼檢測的 GoLang 應用程式。沒有可用於此目的的 AWS Distro for Open Telemetry (ADOT) SDK。您應該使用標準 OpenTelemetry Instrumentation SDK 並啟用交易搜尋。若要在 GoLang 中開始使用零程式碼檢測,請遵循 OpenTelemetry GoLang 檢測文件,OpenTelemetry Go Automatic Instrumentation 入門中的下列步驟。

實作考量 GoLang 檢測

了解使用 GoLang 檢測的重要實作詳細資訊。本指南說明如何在 GoLang 應用程式中實作明確的內容傳播,並設定 Application Signals。正確實作 GoLang 檢測可協助您有效追蹤和分析應用程式的效能。

檢測 AWS SDK

Golang 自動檢測程式庫不支援開箱即用的 AWS SDK 檢測。您必須搭配自動檢測代理程式使用otelaws程式庫檢測:

  1. 安裝所需的相依性:

    go get go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws
  2. 將以下行新增至應用程式:

    otelaws.AppendMiddlewares(&cfg.APIOptions)
  3. 使用上一個aws.Config物件建立後續 AWS 用戶端:

    s3Client := s3.NewFromConfig(cfg)

下列範例將產生 AWS 呼叫的範圍,並與自動檢測整合。

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 }

如需設定自動檢測可執行檔的資訊,請參閱組態方法

檢測 HTTP 呼叫

當內容未在請求之間傳遞時,HTTP 呼叫可以分割追蹤 – HTTP 用戶端必須使用 NewRequestWithContext(),而不是 NewRequest()以確保下游服務使用相同的內容。當這兩個服務都有檢測代理程式時, 範圍會使用相同的追蹤 ID 來連線,以提供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() }

檢測 SQL 呼叫

SQL 範圍可能會與其父範圍中斷連線,導致將用戶端呼叫推斷為伺服器範圍。當 SQL 呼叫未從其上游處理常式接收內容時,就會發生這種情況。根據context.Background()預設,像 Query和 的標準 SQL 呼叫Exec會使用 ,而不是上游呼叫者的內容。將標準 SQL 呼叫取代為其內容感知對等項目:

  • 使用 QueryContext而非 Query

  • 使用 ExecContext而非 Exec

這些方法會將上游請求內容傳遞至資料庫呼叫,以維持適當的追蹤連續性。

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 }
注意

SQL 呼叫目前不支援 db.system 屬性。此限制會影響 CloudWatch 準確識別資料庫用戶端的能力。因此,相依性會顯示 UnknownRemoteService,而不是進行查詢的資料庫用戶端名稱。

資源偵測器

Go 自動檢測目前不支援在執行時間設定資源偵測器。OpenTelemetry 社群正在處理使用環境變數設定資源偵測器的功能。在未來的更新中尋找此功能。同時,您可以使用 CloudWatch Agent 搭配自動檢測來自動產生主機資源屬性。

執行時間版本支援矩陣

語言 執行時間版本

Java

JVM 版本 8、11、17、21 和 23

Python

支援 Python 3.9 版和更新版本

.NET

1.6.0 及更新版本支援 .NET 6、8 和 .NET Framework 4.6.2 及更新版本

1.7.0 版和更新版本支援 .NET 8、9 和 .NET Framework 4.6.2 和更新版本

Node.js

Node.js 第 14、16、18、20 和 22 版

PHP

PHP 8.0 版及更新版本

Ruby

CRuby >= 3.1、JRuby >= 9.3.2.0 或 TruffleRuby >= 22.1

GoLang

Golang 1.18 版及更新版本

已知問題

Java SDK 1.32.5 版中的執行時間指標集合已知無法使用 JBoss Wildfly 的應用程式。此問題延伸到 Amazon CloudWatch 可觀測性 EKS 附加元件,2.3.0-eksbuild.1透過 影響版本2.6.0-eksbuild.1。此問題已在 Java SDK 版本 v1.32.6和 Amazon CloudWatch 可觀測性 EKS 附加元件版本 中修正v3.0.0-eksbuild.1

如果您受到影響,請升級 Java 開發套件版本,或透過將環境變數OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED=false新增至應用程式來停用執行時間指標集合。