使用常駐程式策略部署 - Amazon CloudWatch

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

使用常駐程式策略部署

步驟 1:在您的帳戶中啟用 Application Signals

如果尚未在此帳戶中啟用 Application Signals,則必須授予 Application Signals 所需的許可,以探索您的服務。為此,請執行下列操作。您的帳戶只需執行一次此操作。

為您的應用程式啟用 Application Signals
  1. 在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 在導覽窗格中,選擇服務

  3. 選擇開始探索您的服務

  4. 選取核取方塊,然後選擇開始探索服務

    首次在帳戶中完成此步驟會建立AWSServiceRoleForCloudWatchApplicationSignals服務連結角色。此角色會授予 Application Signals 下列許可:

    • xray:GetServiceGraph

    • logs:StartQuery

    • logs:GetQueryResults

    • cloudwatch:GetMetricData

    • cloudwatch:ListMetrics

    • tag:GetResources

    如需有關此角色的詳細資訊,請參閱 CloudWatch Application Signals 的服務連結角色許可

步驟 2:建立 IAM 角色

您必須建立IAM角色。如果您已建立此角色,您可能需要為其新增許可。

  • ECS 任務角色 — 容器使用此角色執行。許可應該是您的應用程式所需的任何項目,加上 CloudWatchAgentServerPolicy

如需建立IAM角色的詳細資訊,請參閱建立IAM角色

步驟 3:準備 CloudWatch 客服人員組態

首先,在啟用 Application Signals 的情況下準備代理程式組態。若要執行此操作,請建立名為 /tmp/ecs-cwagent.json 的本機檔案。

{ "traces": { "traces_collected": { "application_signals": {} } }, "logs": { "metrics_collected": { "application_signals": {} } } }

然後將此組態上傳至SSM參數存放區。若要進行這項動作,請輸入下列指令。在 檔案中,取代 $REGION 使用您實際的區域名稱。

aws ssm put-parameter \ --name "ecs-cwagent" \ --type "String" \ --value "`cat /tmp/ecs-cwagent.json`" \ --region "$REGION"

步驟 4:部署 CloudWatch 代理程式常駐程式服務

建立下列任務定義,並將其部署到您的應用程式叢集。Replace (取代) $REGION 使用您實際的區域名稱。Replace (取代) $TASK_ROLE_ARN 以及 $EXECUTION_ROLE_ARN 您在 中準備IAM的角色步驟 2:建立 IAM 角色。Replace (取代) $IMAGE Amazon Elastic Container Registry 上最新 CloudWatch 容器映像的路徑。如需詳細資訊,請參閱 Amazon 上的 cloudwatch-agentECR。

注意

常駐程式服務會公開主機上的兩個連接埠,其中 4316 用作接收指標和追蹤的端點,而 2000 作為 CloudWatch 追蹤取樣器端點。此設定可讓代理程式從主機上執行的所有應用程式任務收集和傳輸遙測資料。確保主機上的其他服務不會使用這些連接埠,以避免衝突。

{ "family": "ecs-cwagent-daemon", "taskRoleArn": "$TASK_ROLE_ARN", "executionRoleArn": "$EXECUTION_ROLE_ARN", "networkMode": "bridge", "containerDefinitions": [ { "name": "ecs-cwagent", "image": "$IMAGE", "essential": true, "portMappings": [ { "containerPort": 4316, "hostPort": 4316 }, { "containerPort": 2000, "hostPort": 2000 } ], "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/ecs-cwagent", "awslogs-region": "$REGION", "awslogs-stream-prefix": "ecs" } } } ], "requiresCompatibilities": [ "EC2" ], "cpu": "128", "memory": "64" }

步驟 5:測試您的應用程式

下一步是測試 Application Signals 的應用程式。

Java
ECS 使用 CloudWatch 代理程式在 Amazon 上測試您的應用程式
  1. 首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。

    "volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
  2. 將新容器 init 附加到應用程式的任務定義。Replace (取代) $IMAGE 使用 AWS Distro for OpenTelemetry Amazon 映像儲存庫 的最新ECR映像

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "/javaagent.jar", "/otel-auto-instrumentation/javaagent.jar" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }
  3. 將下列環境變數新增至應用程式容器。您必須使用適用於 Java 的 AWS Distro for Auto-intrumentation 代理程式的 1.32.2 版或更新版本。 OpenTelemetry https://opentelemetry.io/docs/zero-code/java/agent/

    環境變數 啟用 Application Signals 的設定

    OTEL_RESOURCE_ATTRIBUTES

    將下列資訊指定為鍵值對:

    • service.name 會設定服務名稱。這將顯示為 Application Signals 儀表板中應用程式的服務名稱。如果您不提供此索引鍵的值,則會使用預設值 UnknownService

    • deployment.environment 會設定執行應用程式的環境。這將顯示為 Application Signals 儀表板中應用程式的 Hosted In 環境。如果您未指定此項目,則會generic:default使用 的預設值。

    此屬性索引鍵僅供 Application Signals 使用,並轉換為 X-Ray 追蹤註釋和 CloudWatch 指標維度。

    (選用) 若要啟用 Application Signals 的日誌關聯,aws.log.group.names請將額外的環境變數設定為應用程式日誌的日誌群組名稱。如此一來,您應用程式的追蹤和指標就可以與日誌群組的相關日誌項目建立關聯。對於此變數,請取代 $YOUR_APPLICATION_LOG_GROUP 包含您應用程式的日誌群組名稱。如果您有多個日誌群組,您可以使用 ampersand (&) 來分隔它們,如本範例所示:aws.log.group.names=log-group-1&log-group-2。若要啟用指標來記錄關聯,設定此目前環境變數就足夠了。如需詳細資訊,請參閱啟用指標以記錄關聯。若要啟用追蹤至日誌關聯,您還需要變更應用程式中的日誌組態。如需詳細資訊,請參閱啟用追蹤至日誌關聯

    OTEL_AWS_APPLICATION_SIGNALS_ENABLED

    設定為 true,讓您的容器開始將 X-Ray 追蹤和 CloudWatch 指標傳送至 Application Signals。

    OTEL_METRICS_EXPORTER

    設定為 none 以停用其他指標匯出工具。

    OTEL_LOGS_EXPORTER

    設定為 none以停用其他日誌匯出工具。

    OTEL_EXPORTER_OTLP_PROTOCOL

    設定為 http/protobuf ,使用 將指標和追蹤傳送至 Application SignalsHTTP。

    OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT

    將指標傳送至 CloudWatch 常駐容器。

    • 對於在 host 模式下執行的應用程式,請將此設定為 http://localhost:4316/v1/metrics

    • 對於在 bridge 模式或 awsvpc 模式下執行的應用程式,請將此設定為 http://CW_CONTAINER_IP:4316/v1/metrics,其中 CW_CONTAINER_IP 是EC2容器執行個體的私有 IP 地址。您可以從執行個體中繼資料服務 () 擷取此地址IMDS。

    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT

    將追蹤傳送至 CloudWatch 常駐程式容器。

    • 對於在 host 模式下執行的應用程式,請將此設定為 http://localhost:4316/v1/traces

    • 對於在 bridge 模式或 awsvpc 模式下執行的應用程式,請將此設定為 http://CW_CONTAINER_IP:4316/v1/traces,其中 CW_CONTAINER_IP 是EC2容器執行個體的私有 IP 地址。您可以從執行個體中繼資料服務 () 擷取此地址IMDS。

    OTEL_TRACES_SAMPLER

    將此設定為 xray,將 X-Ray 設定為追蹤取樣器。

    OTEL_PROPAGATORS

    xray 設定為其中一個傳播器。

    JAVA_TOOL_OPTIONS

    設定為" -javaagent:$AWS_ADOT_JAVA_INSTRUMENTATION_PATH"取代 AWS_ADOT_JAVA_INSTRUMENTATION_PATH 以及儲存 AWS Distro for OpenTelemetry Java 自動儀器代理程式的路徑。例如 /otel-auto-instrumentation/javaagent.jar

  4. 掛載您在此程序步驟 1 中定義的磁碟區 opentelemetry-auto-instrumentation。如果您不需要啟用與指標和追蹤的日誌關聯,請在 Java 應用程式中使用下列範例。如果您想要啟用日誌關聯,請改為參閱下一個步驟。

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "JAVA_TOOL_OPTIONS", "value": " -javaagent:/otel-auto-instrumentation/javaagent.jar" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }
Python

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

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

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

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

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

  • 如果您使用 Python 應用程式的WSGI伺服器,除了本節中的下列步驟之外,請參閱 沒有使用WSGI伺服器的 Python 應用程式適用的 Application Signals 資料 以取得可讓 Application Signals 運作的資訊。

ECS 使用 CloudWatch 代理程式在 Amazon 上測試 Python 應用程式
  1. 首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。

    "volumes": [ { "name": "opentelemetry-auto-instrumentation-python" } ]
  2. 將新容器 init 附加到應用程式的任務定義。Replace (取代) $IMAGE 使用 AWS Distro for OpenTelemetry Amazon 映像儲存庫 的最新ECR映像

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "-a", "/autoinstrumentation/.", "/otel-auto-instrumentation-python" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }
  3. 將下列環境變數新增至應用程式容器。

    環境變數 啟用 Application Signals 的設定

    OTEL_RESOURCE_ATTRIBUTES

    將下列資訊指定為鍵值對:

    • service.name 會設定服務名稱。這將顯示為 Application Signals 儀表板中應用程式的服務名稱。如果您不提供此索引鍵的值,則會使用預設值 UnknownService

    • deployment.environment 會設定執行應用程式的環境。這將顯示為 Application Signals 儀表板中應用程式的 Hosted In 環境。如果您未指定此項目,則會generic:default使用 的預設值。

    此屬性索引鍵僅供 Application Signals 使用,並轉換為 X-Ray 追蹤註釋和 CloudWatch 指標維度。

    (選用) 若要啟用 Application Signals 的日誌關聯,aws.log.group.names請將額外的環境變數設定為應用程式日誌的日誌群組名稱。如此一來,您應用程式的追蹤和指標就可以與日誌群組的相關日誌項目建立關聯。對於此變數,請取代 $YOUR_APPLICATION_LOG_GROUP 包含您應用程式的日誌群組名稱。如果您有多個日誌群組,您可以使用 ampersand (&) 來分隔它們,如本範例所示:aws.log.group.names=log-group-1&log-group-2。若要啟用指標來記錄關聯,設定此目前環境變數就足夠了。如需詳細資訊,請參閱啟用指標以記錄關聯。若要啟用追蹤至日誌關聯,您還需要變更應用程式中的日誌組態。如需詳細資訊,請參閱啟用追蹤至日誌關聯

    OTEL_AWS_APPLICATION_SIGNALS_ENABLED

    設定為 true,讓您的容器開始將 X-Ray 追蹤和 CloudWatch 指標傳送至 Application Signals。

    OTEL_METRICS_EXPORTER

    設定為 none 以停用其他指標匯出工具。

    OTEL_EXPORTER_OTLP_PROTOCOL

    設定為 http/protobuf , CloudWatch 使用 將指標和追蹤傳送至 HTTP。

    OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT

    將指標傳送至 CloudWatch 常駐容器。

    • 對於在 host 模式下執行的應用程式,請將此設定為 http://localhost:4316/v1/metrics

    • 對於在 bridge 模式或 awsvpc 模式下執行的應用程式,請將此設定為 http://CW_CONTAINER_IP:4316/v1/metrics,其中 CW_CONTAINER_IP 是EC2容器執行個體的私有 IP 地址。您可以從執行個體中繼資料服務 () 擷取此地址IMDS。

    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT

    將追蹤傳送至 CloudWatch 常駐程式容器。

    • 對於在 host 模式下執行的應用程式,請將此設定為 http://localhost:4316/v1/traces

    • 對於在 bridge 模式或 awsvpc 模式下執行的應用程式,請將此設定為 http://CW_CONTAINER_IP:4316/v1/traces,其中 CW_CONTAINER_IP 是EC2容器執行個體的私有 IP 地址。您可以從執行個體中繼資料服務 () 擷取此地址IMDS。

    OTEL_TRACES_SAMPLER

    將此設定為 xray,將 X-Ray 設定為追蹤取樣器。

    OTEL_TRACES_SAMPLER_ARG

    設定追蹤採樣器端點。

    • 對於在 host 模式下執行的應用程式,請將此設定為 http://localhost:2000

    • 對於在 bridge 模式或 awsvpc 模式下執行的應用程式,請將此設定為 http://CW_CONTAINER_IP:2000,其中 CW_CONTAINER_IP 是EC2容器執行個體的私有 IP 地址。您可以從執行個體中繼資料服務 () 擷取此地址IMDS。

    OTEL_PROPAGATORS

    新增 xray作為傳播器之一。

    OTEL_PYTHON_DISTRO

    設定為 aws_distro以使用 ADOT Python 儀器。

    OTEL_PYTHON_CONFIGURATOR

    設定為 aws_configuration以使用 ADOT Python 組態。

    PYTHONPATH

    $APP_PATH 將 取代為容器內應用程式工作目錄的位置。這是 Python 解譯器尋找應用程式模組的必要項目。

    DJANGO_SETTINGS_MODULE

    僅 Django 應用程式需要。將其設定為 Django 應用程式settings.py檔案的位置。取代 $PATH_TO_SETTINGS

  4. 掛載您在此程序步驟 1 中定義的磁碟區 opentelemetry-auto-instrumentation-python。如果您不需要啟用與指標和追蹤的日誌關聯,請在 Python 應用程式中使用下列範例。如果您想要啟用日誌關聯,請改為參閱下一個步驟。

    { "name": "my-app", ... "environment": [ { "name": "PYTHONPATH", "value": "/otel-auto-instrumentation-python/opentelemetry/instrumentation/auto_instrumentation:$APP_PATH:/otel-auto-instrumentation-python" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_PYTHON_DISTRO", "value": "aws_distro" }, { "name": "OTEL_PYTHON_CONFIGURATOR", "value": "aws_configurator" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "DJANGO_SETTINGS_MODULE", "value": "$PATH_TO_SETTINGS.settings" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }
  5. (選用) 若要啟用日誌關聯,請在掛載磁碟區之前執行下列動作。在 中OTEL_RESOURCE_ATTRIBUTESaws.log.group.names為應用程式的日誌群組設定額外的環境變數。如此一來,您應用程式的追蹤和指標就可以與這些日誌群組的相關日誌項目建立關聯。對於此變數,請取代 $YOUR_APPLICATION_LOG_GROUP 包含您應用程式的日誌群組名稱。如果您有多個日誌群組,您可以使用 ampersand (&) 來分隔它們,如本範例所示:aws.log.group.names=log-group-1&log-group-2。若要啟用指標來記錄關聯,設定此目前環境變數就足夠了。如需詳細資訊,請參閱啟用指標以記錄關聯。若要啟用追蹤至日誌關聯,您還需要變更應用程式中的日誌組態。如需詳細資訊,請參閱啟用追蹤至日誌關聯

    以下是範例。若要啟用日誌關聯,請在掛載opentelemetry-auto-instrumentation-python您在此程序步驟 1 中定義的磁碟區時使用此範例。

    { "name": "my-app", ... "environment": [ { "name": "PYTHONPATH", "value": "/otel-auto-instrumentation-python/opentelemetry/instrumentation/auto_instrumentation:$APP_PATH:/otel-auto-instrumentation-python" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_PYTHON_DISTRO", "value": "aws_distro" }, { "name": "OTEL_PYTHON_CONFIGURATOR", "value": "aws_configurator" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=$SVC_NAME" }, { "name": "DJANGO_SETTINGS_MODULE", "value": "$PATH_TO_SETTINGS.settings" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }
.NET
ECS 使用 CloudWatch 代理程式在 Amazon 上測試您的應用程式
  1. 首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。

    "volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
  2. 將新容器 init 附加到應用程式的任務定義。Replace (取代) $IMAGE 使用 AWS Distro for OpenTelemetry Amazon 映像儲存庫 的最新ECR映像

    針對 Linux 容器執行個體,請使用下列各項。

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "-a", "autoinstrumentation/.", "/otel-auto-instrumentation" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }

    對於 Windows Server 容器執行個體,請使用下列各項。

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "CMD", "/c", "xcopy", "/e", "C:\\autoinstrumentation\\*", "C:\\otel-auto-instrumentation", "&&", "icacls", "C:\\otel-auto-instrumentation", "/grant", "*S-1-1-0:R", "/T" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "C:\\otel-auto-instrumentation", "readOnly": false } ] }
  3. init容器上新增相依性,以確保容器在應用程式容器啟動之前完成。

    "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]
  4. 將下列環境變數新增至應用程式容器。您必須使用 1.1.0 版或更新版本的 AWS Distro for OpenTelemetry Auto-intrumentation agent for 。NET

    環境變數 啟用 Application Signals 的設定

    OTEL_RESOURCE_ATTRIBUTES

    將下列資訊指定為鍵值對:

    • service.name 會設定服務名稱。這將顯示為 Application Signals 儀表板中應用程式的服務名稱。如果您不提供此索引鍵的值,則會使用預設值 UnknownService

    • deployment.environment 會設定執行應用程式的環境。這將顯示為 Application Signals 儀表板中應用程式的 Hosted In 環境。如果您未指定此項目,則會generic:default使用 的預設值。

    此屬性索引鍵僅供 Application Signals 使用,並轉換為 X-Ray 追蹤註釋和 CloudWatch 指標維度。

    OTEL_AWS_APPLICATION_SIGNALS_ENABLED

    設定為 true,讓您的容器開始將 X-Ray 追蹤和 CloudWatch 指標傳送至 Application Signals。

    OTEL_METRICS_EXPORTER

    設定為 none 以停用其他指標匯出工具。

    OTEL_LOGS_EXPORTER

    設定為 none以停用其他日誌匯出工具。

    OTEL_EXPORTER_OTLP_PROTOCOL

    設定為 http/protobuf ,使用 將指標和追蹤傳送至 Application SignalsHTTP。

    OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT

    將指標傳送至 CloudWatch 常駐容器。

    • 對於在 host 模式下執行的應用程式,請將此設定為 http://localhost:4316/v1/metrics

    • 對於在 bridge 模式或 awsvpc 模式下執行的應用程式,請將此設定為 http://CW_CONTAINER_IP:4316/v1/metrics,其中 CW_CONTAINER_IP 是EC2容器執行個體的私有 IP 地址。您可以從執行個體中繼資料服務 () 擷取此地址IMDS。

    OTEL_EXPORTER_OTLP_ENDPOINT

    將追蹤傳送至 CloudWatch 常駐程式容器。

    • 對於在 host 模式下執行的應用程式,請將此設定為 http://localhost:4316

    • 對於在 bridge 模式或 awsvpc 模式下執行的應用程式,請將此設定為 http://CW_CONTAINER_IP:4316,其中 CW_CONTAINER_IP 是EC2容器執行個體的私有 IP 地址。您可以從執行個體中繼資料服務 () 擷取此地址IMDS。

    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT

    將追蹤傳送至 CloudWatch 常駐程式容器。

    • 對於在 host 模式下執行的應用程式,請將此設定為 http://localhost:4316/v1/traces

    • 對於在 bridge 模式或 awsvpc 模式下執行的應用程式,請將此設定為 http://CW_CONTAINER_IP:4316/v1/traces,其中 CW_CONTAINER_IP 是EC2容器執行個體的私有 IP 地址。您可以從執行個體中繼資料服務 () 擷取此地址IMDS。

    OTEL_TRACES_SAMPLER_ARG

    設定追蹤採樣器端點。

    • 對於在 host 模式下執行的應用程式,請將此設定為 http://localhost:2000

    • 對於在 bridge 模式或 awsvpc 模式下執行的應用程式,請將此設定為 http://CW_CONTAINER_IP:2000,其中 CW_CONTAINER_IP 是EC2容器執行個體的私有 IP 地址。您可以從執行個體中繼資料服務 () 擷取此地址IMDS。

    OTEL_DOTNET_AUTO_HOME

    將 設定為 .NETauto instrumentation ADOT 的安裝位置。

    OTEL_DOTNET_AUTO_PLUGINS

    將 設定為 AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation以啟用 Application Signals 外掛程式。

    CORECLR_ENABLE_PROFILING

    設定為 1 以啟用分析器。

    CORECLR_PROFILER

    將 設為 {918728DD-259F-4A6A-AC2B-B85E1B658318}作為分析器CLSID的 。

    CORECLR_PROFILER_PATH

    將此設定為分析器的路徑。

    在 Linux 上,將其設定為 ${OTEL_DOTNET_AUTO_HOME}/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so

    在 Windows Server 上,將其設定為 ${OTEL_DOTNET_AUTO_HOME}/win-x64/OpenTelemetry.AutoInstrumentation.Native.dll

    DOTNET_ADDITIONAL_DEPS

    將此設定為 的資料夾路徑${OTEL_DOTNET_AUTO_HOME}/AdditionalDeps

    DOTNET_SHARED_STORE

    將此設定為 的資料夾路徑${OTEL_DOTNET_AUTO_HOME}/store

    DOTNET_STARTUP_HOOKS

    將此設定為受管組件的路徑${OTEL_DOTNET_AUTO_HOME}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll,以便在主要應用程式的進入點之前執行。

  5. 掛載您在此程序步驟 1 中定義的磁碟區 opentelemetry-auto-instrumentation。針對 Linux,請使用下列各項。

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "CORECLR_ENABLE_PROFILING", "value": "1" }, { "name": "CORECLR_PROFILER", "value": "{918728DD-259F-4A6A-AC2B-B85E1B658318}" }, { "name": "CORECLR_PROFILER_PATH", "value": "/otel-auto-instrumentation/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so" }, { "name": "DOTNET_ADDITIONAL_DEPS", "value": "/otel-auto-instrumentation/AdditionalDeps" }, { "name": "DOTNET_SHARED_STORE", "value": "/otel-auto-instrumentation/store" }, { "name": "DOTNET_STARTUP_HOOKS", "value": "/otel-auto-instrumentation/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll" }, { "name": "OTEL_DOTNET_AUTO_HOME", "value": "/otel-auto-instrumentation" }, { "name": "OTEL_DOTNET_AUTO_PLUGINS", "value": "AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=aws-otel-integ-test" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }

    針對 Windows Server,請使用下列各項。

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "CORECLR_ENABLE_PROFILING", "value": "1" }, { "name": "CORECLR_PROFILER", "value": "{918728DD-259F-4A6A-AC2B-B85E1B658318}" }, { "name": "CORECLR_PROFILER_PATH", "value": "C:\\otel-auto-instrumentation\\win-x64\\OpenTelemetry.AutoInstrumentation.Native.dll" }, { "name": "DOTNET_ADDITIONAL_DEPS", "value": "C:\\otel-auto-instrumentation\\AdditionalDeps" }, { "name": "DOTNET_SHARED_STORE", "value": "C:\\otel-auto-instrumentation\\store" }, { "name": "DOTNET_STARTUP_HOOKS", "value": "C:\\otel-auto-instrumentation\\net\\OpenTelemetry.AutoInstrumentation.StartupHook.dll" }, { "name": "OTEL_DOTNET_AUTO_HOME", "value": "C:\\otel-auto-instrumentation" }, { "name": "OTEL_DOTNET_AUTO_PLUGINS", "value": "AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=aws-otel-integ-test" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "C:\\otel-auto-instrumentation", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }
Node.js
注意

如果您使用 為 Node.js 應用程式啟用 Application SignalsESM,請在開始這些步驟Setting up a Node.js application with the ESM module format之前參閱 。

ECS 使用 CloudWatch 代理程式在 Amazon 上測試您的應用程式
  1. 首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。

    "volumes": [ { "name": "opentelemetry-auto-instrumentation-node" } ]
  2. 將新容器 init 附加到應用程式的任務定義。Replace (取代) $IMAGE 使用 AWS Distro for OpenTelemetry Amazon 映像儲存庫 的最新ECR映像

    { "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "-a", "/autoinstrumentation/.", "/otel-auto-instrumentation-node" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], }
  3. 將下列環境變數新增至應用程式容器。

    環境變數 啟用 Application Signals 的設定

    OTEL_RESOURCE_ATTRIBUTES

    將下列資訊指定為鍵值對:

    • service.name 會設定服務名稱。這將顯示為 Application Signals 儀表板中應用程式的服務名稱。如果您不提供此索引鍵的值,則會使用預設值 UnknownService

    • deployment.environment 會設定執行應用程式的環境。這將顯示為 Application Signals 儀表板中應用程式的 Hosted In 環境。如果您未指定此項目,則會generic:default使用 的預設值。

    此屬性索引鍵僅供 Application Signals 使用,並轉換為 X-Ray 追蹤註釋和 CloudWatch 指標維度。

    (選用) 若要啟用 Application Signals 的日誌關聯,aws.log.group.names請將額外的環境變數設定為應用程式日誌的日誌群組名稱。如此一來,您應用程式的追蹤和指標就可以與日誌群組的相關日誌項目建立關聯。對於此變數,請取代 $YOUR_APPLICATION_LOG_GROUP 包含您應用程式的日誌群組名稱。如果您有多個日誌群組,您可以使用 ampersand (&) 來分隔它們,如本範例所示:aws.log.group.names=log-group-1&log-group-2。若要啟用指標來記錄關聯,設定此目前環境變數就足夠了。如需詳細資訊,請參閱啟用指標以記錄關聯。若要啟用追蹤至日誌關聯,您還需要變更應用程式中的日誌組態。如需詳細資訊,請參閱啟用追蹤至日誌關聯

    OTEL_AWS_APPLICATION_SIGNALS_ENABLED

    設定為 true,讓您的容器開始將 X-Ray 追蹤和 CloudWatch 指標傳送至 Application Signals。

    OTEL_METRICS_EXPORTER

    設定為 none 以停用其他指標匯出工具。

    OTEL_LOGS_EXPORTER

    設定為 none以停用其他日誌匯出工具。

    OTEL_EXPORTER_OTLP_PROTOCOL

    設定為 ,使用 OTLP/HTTP 和 protobuf http/protobuf將指標和追蹤傳送至 Application Signals。

    OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT

    將指標傳送至 CloudWatch 常駐容器。

    • 對於在 host 模式下執行的應用程式,請將此設定為 http://localhost:4316/v1/metrics

    • 對於在 bridge 模式或 awsvpc 模式下執行的應用程式,請將此設定為 http://CW_CONTAINER_IP:4316/v1/metrics,其中 CW_CONTAINER_IP 是EC2容器執行個體的私有 IP 地址。您可以從執行個體中繼資料服務 () 擷取此地址IMDS。

    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT

    將追蹤傳送至 CloudWatch 常駐程式容器。

    • 對於在 host 模式下執行的應用程式,請將此設定為 http://localhost:4316/v1/traces

    • 對於在 bridge 模式或 awsvpc 模式下執行的應用程式,請將此設定為 http://CW_CONTAINER_IP:4316/v1/traces,其中 CW_CONTAINER_IP 是EC2容器執行個體的私有 IP 地址。您可以從執行個體中繼資料服務 () 擷取此地址IMDS。

    OTEL_TRACES_SAMPLER

    將此設定為 xray,將 X-Ray 設定為追蹤取樣器。

    OTEL_TRACES_SAMPLER_ARG

    設定追蹤採樣器端點。

    • 對於在 host 模式下執行的應用程式,請將此設定為 http://localhost:2000

    • 對於在 bridge 模式或 awsvpc 模式下執行的應用程式,請將此設定為 http://CW_CONTAINER_IP:2000,其中 CW_CONTAINER_IP 是EC2容器執行個體的私有 IP 地址。您可以從執行個體中繼資料服務 () 擷取此地址IMDS。

    OTEL_PROPAGATORS

    xray 設定為其中一個傳播器。

    NODE_OPTIONS

    設定為 --require AWS_ADOT_NODE_INSTRUMENTATION_PATH。Replace (取代) AWS_ADOT_NODE_INSTRUMENTATION_PATH 以及儲存 AWS Distro for OpenTelemetry Node.js 自動儀器的路徑。例如 /otel-auto-instrumentation-node/autoinstrumentation.js

  4. 掛載您在此程序步驟 1 中定義的磁碟區 opentelemetry-auto-instrumentation-node。如果您不需要啟用與指標和追蹤的日誌關聯,請針對 Node.js 應用程式使用下列範例。如果您想要啟用日誌關聯,請改為參閱下一個步驟。

    針對您的應用程式容器,在init容器上新增相依性,以確保容器在應用程式容器啟動之前完成。

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "NODE_OPTIONS", "value": "--require /otel-auto-instrumentation-node/autoinstrumentation.js" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }
  5. (選用) 若要啟用日誌關聯,請在掛載磁碟區之前執行下列動作。在 中OTEL_RESOURCE_ATTRIBUTESaws.log.group.names為應用程式的日誌群組設定其他環境變數。如此一來,您應用程式的追蹤和指標就可以與這些日誌群組的相關日誌項目建立關聯。對於此變數,請取代 $YOUR_APPLICATION_LOG_GROUP 包含您應用程式的日誌群組名稱。如果您有多個日誌群組,您可以使用 ampersand (&) 來分隔它們,如本範例所示:aws.log.group.names=log-group-1&log-group-2。若要啟用指標來記錄關聯性,設定此目前環境變數就足夠了。如需詳細資訊,請參閱啟用指標以記錄關聯。若要啟用追蹤至日誌關聯,您還需要變更應用程式中的日誌組態。如需詳細資訊,請參閱啟用追蹤至日誌關聯

    以下是範例。當您掛載您在此程序步驟 opentelemetry-auto-instrumentation 1 中定義的磁碟區時,請使用此範例來啟用日誌關聯。

    { "name": "my-app", ... "environment": [ { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=$SVC_NAME" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "NODE_OPTIONS", "value": "--require /otel-auto-instrumentation-node/autoinstrumentation.js" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }

使用ESM模組格式設定 Node.js 應用程式

我們提供ESM模組格式的 Node.js 應用程式有限支援。如需詳細資訊,請參閱 使用 的 Node.js 的已知限制 ESM

對於ESM模組格式,使用init容器注入 Node.js 儀器SDK不適用。若要使用 啟用 Node.js 的 Application SignalsESM,請略過先前程序中的步驟 1 和 2,然後改為執行下列動作。

使用 為 Node.js 應用程式啟用 Application Signals ESM
  1. 將相關的相依性安裝到您的 Node.js 應用程式以進行自動儀器操作:

    npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0
  2. 在先前程序中的步驟 4 和 5 中,移除磁碟區 的掛載opentelemetry-auto-instrumentation-node

    "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ]

    將節點選項取代為下列項目。

    { "name": "NODE_OPTIONS", "value": "--import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs" }

步驟 6:部署您的應用程式

建立任務定義的新修訂版本,並將其部署到應用程式叢集。您應該會在新建立的任務中看到兩個容器:

  • init– 初始化 Application Signals 所需的容器

  • my-app– 這是我們文件中的範例應用程式容器。在您實際的工作負載中,此特定容器可能不存在,或可能以您自己的服務容器取代。