本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用附屬策略部署
步驟 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 代理程式檢測您的應用程式
下一個步驟是檢測 Application Signals CloudWatch 的應用程式。
- Java
-
ECS 使用 CloudWatch 代理程式在 Amazon 上檢測您的應用程式
首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
新增 CloudWatch 客服人員附屬定義。因此,請將名為
ecs-cwagent
的新容器附加到應用程式的任務定義。將 取代$REGION
為您實際的區域名稱。$IMAGE
將 取代為 Amazon Elastic Container Registry 上最新 CloudWatch 容器映像的路徑。如需詳細資訊,請參閱 Amazon 上的 cloudwatch-agentECR。 如果您想要改用協助程式策略啟用 CloudWatch 代理程式,請參閱 中的說明使用協助程式策略部署。
{ "name": "ecs-cwagent", "image": "
$IMAGE
", "essential": true, "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" } } }將新容器
init
附加到應用程式的任務定義。$IMAGE
將 取代為 AWS Distro for Amazon OpenTelemetry 映像儲存庫的最新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 forauto-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
將 設定為
http://localhost:4316/v1/metrics
以將指標傳送至 CloudWatch 附屬項目。OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
設定為
http://localhost:4316/v1/traces
以將追蹤傳送至 CloudWatch 附屬項目。OTEL_TRACES_SAMPLER
將此設定為
xray
,將 X-Ray 設定為追蹤採樣器。OTEL_PROPAGATORS
xray
設定為其中一個傳播器。JAVA_TOOL_OPTIONS
將 設定為
AWS_ADOT_JAVA_INSTRUMENTATION_PATH
以儲存 AWS Distro for OpenTelemetry Java 自動儀器代理程式的路徑" -javaagent:$
取代 。例如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://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost: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 設定並將其與您的 Django 設定整合。
如果您使用 Python 應用程式的WSGI伺服器,除了本節中的下列步驟之外,請參閱 沒有使用WSGI伺服器的 Python 應用程式 Application Signals 資料 以取得可讓 Application Signals 運作的資訊。
ECS 使用 CloudWatch 代理程式在 Amazon 上檢測 Python 應用程式
首先,指定綁定掛載。在接下來的步驟中,該磁碟區將用於跨容器共用檔案。將在此程序的後續步驟中使用此綁定掛載。
"volumes": [ { "name": "opentelemetry-auto-instrumentation-python" } ]
新增 CloudWatch 客服人員附屬定義。因此,請將名為
ecs-cwagent
的新容器附加到應用程式的任務定義。將 取代$REGION
為您實際的區域名稱。$IMAGE
將 取代為 Amazon Elastic Container Registry 上最新 CloudWatch 容器映像的路徑。如需詳細資訊,請參閱 Amazon 上的 cloudwatch-agentECR。 如果您想要改用協助程式策略啟用 CloudWatch 代理程式,請參閱 中的說明使用協助程式策略部署。
{ "name": "ecs-cwagent", "image": "
$IMAGE
", "essential": true, "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" } } }將新容器
init
附加到應用程式的任務定義。$IMAGE
將 取代為 AWS Distro for Amazon OpenTelemetry 映像儲存庫的最新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
將 設定為
http://127.0.0.1:4316/v1/metrics
以將指標傳送至 CloudWatch 附屬項目。OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
設定為
http://127.0.0.1:4316/v1/traces
以將追蹤傳送至 CloudWatch 附屬項目。OTEL_TRACES_SAMPLER
將此設定為
xray
,將 X-Ray 設定為追蹤採樣器。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://localhost: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://localhost:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost: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://localhost: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://localhost:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost: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" } ]
新增 CloudWatch 客服人員附屬定義。因此,請將名為
ecs-cwagent
的新容器附加到應用程式的任務定義。將 取代$REGION
為您實際的區域名稱。$IMAGE
將 取代為 Amazon Elastic Container Registry 上最新 CloudWatch 容器映像的路徑。如需詳細資訊,請參閱 Amazon 上的 cloudwatch-agentECR。 如果您想要改用協助程式策略啟用 CloudWatch 代理程式,請參閱 中的說明使用協助程式策略部署。
{ "name": "ecs-cwagent", "image": "
$IMAGE
", "essential": true, "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" } } }將新容器
init
附加到應用程式的任務定義。$IMAGE
將 取代為 AWS Distro for Amazon OpenTelemetry 映像儲存庫的最新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
將 設定為
http://localhost:4316/v1/metrics
以將指標傳送至 CloudWatch 附屬項目。OTEL_EXPORTER_OTLP_ENDPOINT
將 設定為
http://localhost:4316/
以將追蹤傳送至 CloudWatch 附屬項目。OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
設定為
http://localhost:4316/v1/traces
以將追蹤傳送至 CloudWatch 附屬項目。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=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://localhost:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://localhost:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost: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://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://localhost:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost: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" } ]
新增 CloudWatch 客服人員附屬定義。因此,請將名為
ecs-cwagent
的新容器附加到應用程式的任務定義。將 取代$REGION
為您實際的區域名稱。$IMAGE
將 取代為 Amazon Elastic Container Registry 上最新 CloudWatch 容器映像的路徑。如需詳細資訊,請參閱 Amazon 上的 cloudwatch-agentECR。 如果您想要改用協助程式策略啟用 CloudWatch 代理程式,請參閱 中的說明使用協助程式策略部署。
{ "name": "ecs-cwagent", "image": "
$IMAGE
", "essential": true, "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" } } }將新容器
init
附加到應用程式的任務定義。$IMAGE
將 取代為 AWS Distro for Amazon OpenTelemetry 映像儲存庫的最新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
設定為
http/protobuf
以使用 OTLP/HTTP 和 protobuf 將指標和追蹤傳送至 Application Signals。OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT
將 設定為
http://localhost:4316/v1/metrics
以將指標傳送至 CloudWatch 附屬項目。OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
設定為
http://localhost:4316/v1/traces
以將追蹤傳送至 CloudWatch 附屬項目。OTEL_TRACES_SAMPLER
將此設定為
xray
,將 X-Ray 設定為追蹤採樣器。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.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://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost: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://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://localhost:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://localhost: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 和 3,然後改為執行下列動作。使用 為 Node.js 應用程式啟用 Application Signals ESM
將相關的相依性安裝到您的 Node.js 應用程式以進行自動檢測:
npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0
在先前程序中的步驟 5 和 6 中,移除磁碟區 的掛載
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" }
步驟 5:部署應用程式
建立任務定義的新修訂版本,並將其部署到應用程式叢集。應該會在新建立的任務中看到三個容器:
init
– 初始化 Application Signals 所需的容器。ecs-cwagent
– 執行 CloudWatch 代理程式的容器
– 這是我們文件中的範例應用程式容器。在您實際的工作負載中,此特定容器可能不存在,或可能以您自己的服務容器取代。my-app