本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用常駐程式策略部署
步驟 1:在您的帳戶中啟用 Application Signals
您必須先在帳戶中啟用 Application Signals。如果您還沒有,請參閱 在帳戶中啟用 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 代理程式協助程式服務
建立下列任務定義,並將其部署到您的應用程式叢集。將 $REGION
取代為實際區域名稱。將 $TASK_ROLE_ARN
和 $EXECUTION_ROLE_ARN
取代為您在 中準備的 IAM 角色步驟 2:建立 IAM 角色。將 $IMAGE
取代為 Amazon Elastic Container Registry 上最新 CloudWatch 容器映像的路徑。如需詳細資訊,請參閱 Amazon ECR 上的 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
-
使用 CloudWatch 代理程式檢測您 Amazon ECS 上的應用程式
首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
將新容器
init
附加到應用程式的任務定義。將$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 } ] }在
init
容器上新增相依性,以確保此容器在應用程式容器啟動之前完成。"dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]
將下列環境變數新增至應用程式容器。您必須使用適用於 Java 的 AWS Distro for OpenTelemetry 自動檢測代理程式 1.32.2 版或更新版本。 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
以使用 HTTP 將指標和追蹤傳送至 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_PROPAGATORS
xray
設定為其中一個傳播器。JAVA_TOOL_OPTIONS
設定為將
AWS_ADOT_JAVA_INSTRUMENTATION_PATH
" -javaagent:$
取代為儲存 AWS Distro for OpenTelemetry Java 自動檢測代理程式的路徑。例如AWS_ADOT_JAVA_INSTRUMENTATION_PATH
"/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" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }
- Python
-
為 Python 應用程式啟用 Application Signals 之前,請注意下列考量。
在某些容器化應用程式中,缺少
PYTHONPATH
環境變數有時會導致應用程式無法啟動。若要解決此問題,請確定您將PYTHONPATH
環境變數設定為應用程式工作目錄的位置。這是因為 OpenTelemetry 自動檢測的已知問題。如需此問題的詳細資訊,請參閱 PYTHONPATH 的 Python 自動檢測設定不合規。 對於 Django 應用程式,還有其他必要的組態,如 OpenTelemetry Python 文件
所述。 使用
--noreload
旗標來防止自動重新載入。將
DJANGO_SETTINGS_MODULE
環境變數設定為 Django 應用程式settings.py
檔案的位置。這可確保 OpenTelemetry 可以正確存取並與您的 Django 設定整合。
如果您使用 Python 應用程式的 WSGI 伺服器,除了本節中的下列步驟之外,請參閱 沒有使用 WSGI 伺服器的 Python 應用程式 Application Signals 資料 以取得可讓 Application Signals 運作的資訊。
使用 CloudWatch 代理程式在 Amazon ECS 上檢測 Python 應用程式
首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。
"volumes": [ { "name": "opentelemetry-auto-instrumentation-python" } ]
將新容器
init
附加到應用程式的任務定義。將$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 } ] }
在
init
容器上新增相依性,以確保此容器在應用程式容器啟動之前完成。"dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]
將下列環境變數新增至應用程式容器。
環境變數 啟用 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
以使用 HTTP 將指標和追蹤傳送至 CloudWatch。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" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "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" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }
- .NET
-
使用 CloudWatch 代理程式檢測您 Amazon ECS 上的應用程式
首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
將新容器
init
附加到應用程式的任務定義。將$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" } ]
將下列環境變數新增至應用程式容器。您必須使用適用於 .NET 的 AWS Distro for OpenTelemetry 自動檢測代理程式的 1.1.0 版或更新版本。https://opentelemetry.io/docs/zero-code/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
以使用 HTTP 將指標和追蹤傳送至 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_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
設定為 ADOT .NET 自動檢測的安裝位置。
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=dotnet-service-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://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" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "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=dotnet-service-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_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
-
注意
如果您使用 ESM 為 Node.js 應用程式啟用 Application Signals,請在開始這些步驟Setting up a Node.js application with the ESM module format之前參閱 。
使用 CloudWatch 代理程式檢測您 Amazon ECS 上的應用程式
首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。
"volumes": [ { "name": "opentelemetry-auto-instrumentation-node" } ]
將新容器
init
附加到應用程式的任務定義。將$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 } ], }在
init
容器上新增相依性,以確保此容器在應用程式容器啟動之前完成。"dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]
將下列環境變數新增至應用程式容器。
環境變數 啟用 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
以使用 OTLP/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
。將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
。若要啟用指標來記錄相互關聯,設定此目前環境變數就已足夠。如需詳細資訊,請參閱啟用指標以記錄相互關聯。若要啟用追蹤以記錄相互關聯,您也需要在應用程式中變更記錄組態。如需詳細資訊,請參閱啟用追蹤以記錄相互關聯。以下是範例。當您掛載您在此程序的步驟 1 中定義的磁碟區時
opentelemetry-auto-instrumentation
,請使用此範例來啟用日誌相互關聯。{ "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 應用程式有限支援。如需詳細資訊,請參閱使用 ESM 的 Node.js 已知限制。
對於 ESM 模組格式,使用
init
容器注入 Node.js 檢測 SDK 不適用。若要使用 ESM 啟用 Node.js 的 Application Signals,請略過先前程序中的步驟 1 和 2,然後改為執行下列動作。使用 ESM 啟用 Node.js 應用程式的 Application Signals
將相關的相依性安裝到您的 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
(選用) 步驟 7:監控您的應用程式運作狀態
在 Amazon ECS 上啟用應用程式後,您就可以監控應用程式的運作狀態。如需詳細資訊,請參閱使用 Application Signals 監控應用程式的運作狀態。