本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用常駐程式策略部署
步驟 1:在您的帳戶中啟用 Application Signals
如果尚未在此帳戶中啟用 Application Signals,則必須授予 Application Signals 所需的許可,以探索您的服務。為此,請執行下列操作。您的帳戶只需執行一次此操作。
為您的應用程式啟用 Application Signals
在 開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/
。 在導覽窗格中,選擇服務。
選擇開始探索您的服務。
選取核取方塊,然後選擇開始探索服務。
首次在帳戶中完成此步驟會建立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-agent
注意
常駐程式服務會公開主機上的兩個連接埠,其中 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 上測試您的應用程式
首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
將新容器
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 } ] }將下列環境變數新增至應用程式容器。您必須使用適用於 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
掛載您在此程序步驟 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 應用程式
首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。
"volumes": [ { "name": "opentelemetry-auto-instrumentation-python" } ]
將新容器
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 } ] }
將下列環境變數新增至應用程式容器。
環境變數 啟用 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
:2000CW_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
。掛載您在此程序步驟 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 } ] }(選用) 若要啟用日誌關聯,請在掛載磁碟區之前執行下列動作。在 中
OTEL_RESOURCE_ATTRIBUTES
,aws.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 上測試您的應用程式
首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
將新容器
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 } ] }在
init
容器上新增相依性,以確保容器在應用程式容器啟動之前完成。"dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]
將下列環境變數新增至應用程式容器。您必須使用 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
:2000CW_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
,以便在主要應用程式的進入點之前執行。掛載您在此程序步驟 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 上測試您的應用程式
首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。
"volumes": [ { "name": "opentelemetry-auto-instrumentation-node" } ]
將新容器
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 } ], }將下列環境變數新增至應用程式容器。
環境變數 啟用 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
:2000CW_CONTAINER_IP
是EC2容器執行個體的私有 IP 地址。您可以從執行個體中繼資料服務 () 擷取此地址IMDS。
OTEL_PROPAGATORS
xray
設定為其中一個傳播器。NODE_OPTIONS
設定為
--require
。Replace (取代)AWS_ADOT_NODE_INSTRUMENTATION_PATH
AWS_ADOT_NODE_INSTRUMENTATION_PATH
以及儲存 AWS Distro for OpenTelemetry Node.js 自動儀器的路徑。例如/otel-auto-instrumentation-node/autoinstrumentation.js
掛載您在此程序步驟 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" } ] }(選用) 若要啟用日誌關聯,請在掛載磁碟區之前執行下列動作。在 中
OTEL_RESOURCE_ATTRIBUTES
,aws.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
將相關的相依性安裝到您的 Node.js 應用程式以進行自動儀器操作:
npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0
在先前程序中的步驟 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