使用挎斗策略进行部署
步骤 1:在账户中启用 Application Signals
如果您尚未在此账户中启用 Application Signals,则必须向 Application Signals 授予发现您的服务所需的权限。为此,请执行以下操作:您的账户只需执行一次该操作。
为您的应用程序启用 Application Signals
访问 https://console.aws.amazon.com/cloudwatch/
打开 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 代理检测您的应用程序
下一步是为 CloudWatch Application Signals 检测您的应用程序。
- Java
-
使用 CloudWatch 代理检测您在 Amazon ECS 上的应用程序
首先,指定绑定挂载。在接下来的步骤中,该卷将用于跨容器共享文件。您将在此过程的稍后部分使用此绑定挂载。
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
添加 CloudWatch 代理 sidecar 定义。为此,请在应用程序的任务定义中追加一个名为
ecs-cwagent
的新容器。将$REGION
替换为您的实际区域名称。将$IMAGE
替换为 Amazon Elastic Container Registry 上最新 CloudWatch 容器映像的路径。有关更多信息,请参阅 Amazon ECR 上的 cloudwatch-agent。 如果要改为启用使用进程守护程序策略的 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 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 } ] }将以下环境变量添加到您的应用程序容器中。您必须使用适用于 OpenTelemetry 的 AWS Distro Java 自动仪表化代理
版本 1.32.2 或更高版本。 环境变量 启用 Application Signals 的设置 OTEL_RESOURCE_ATTRIBUTES
将以下信息指定为键值对:
service.name
设置服务的名称。这将作为应用程序的服务名称显示在 Application Signals 控制面板中。如果您不提供此键的值,将使用默认值UnknownService
。deployment.environment
设置应用程序运行所在的环境。这将作为应用程序的托管环境显示在 Application Signals 控制面板中。如果您未指定此项,则使用默认值generic:default
。
此属性键仅供 Application Signals 使用,并转换为 X-Ray 跟踪注释和 CloudWatch 指标维度。
(可选)要启用 Application Signals 的日志关联,请将其他环境变量
aws.log.group.names
设置为应用程序日志的日志组名称。这样,应用程序的跟踪和指标便可与该特定日志组的相关日志条目相关联。对于此变量,将$YOUR_APPLICATION_LOG_GROUP
替换为应用程序的日志组名称。如果您有多个日志组,则可以使用和号(&
)分隔它们,如以下示例所示:aws.log.group.names=log-group-1&log-group-2
。要启用指标与日志关联的功能,设置此当前环境变量已足够。有关更多信息,请参阅 启用指标与日志关联。要启用跟踪与日志关联,您还需要更改应用程序中的日志记录配置。有关更多信息,请参阅 启用跟踪与日志关联。OTEL_AWS_APPLICATION_SIGNALS_ENABLED
设置为
true
可使您的容器开始向 Application Signals 发送 X-Ray 跟踪和 CloudWatch 指标。OTEL_METRICS_EXPORTER
设置为
none
可禁用其他指标导出程序。OTEL_LOGS_EXPORTER
设置为
none
以禁用其他日志导出程序。OTEL_EXPORTER_OTLP_PROTOCOL
设置为
http/protobuf
以使用 HTTP 将指标和跟踪发送到 Application Signals。OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT
设置为
http://localhost:4316/v1/metrics
可将指标发送到 CloudWatch sidecar。OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
设置为
http://localhost:4316/v1/traces
可向 CloudWatch sidecar 发送跟踪。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://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 autoinstrumentation setting of PYTHONPATH is not compliant(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" } ]
添加 CloudWatch 代理 sidecar 定义。为此,请在应用程序的任务定义中追加一个名为
ecs-cwagent
的新容器。将$REGION
替换为您的实际区域名称。将$IMAGE
替换为 Amazon Elastic Container Registry 上最新 CloudWatch 容器映像的路径。有关更多信息,请参阅 Amazon ECR 上的 cloudwatch-agent。 如果要改为启用使用进程守护程序策略的 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 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 控制面板中。如果您未指定此项,则使用默认值generic:default
。
此属性键仅供 Application Signals 使用,并转换为 X-Ray 跟踪注释和 CloudWatch 指标维度。
(可选)要启用 Application Signals 的日志关联,请将其他环境变量
aws.log.group.names
设置为应用程序日志的日志组名称。这样,应用程序的跟踪和指标便可与该特定日志组的相关日志条目相关联。对于此变量,将$YOUR_APPLICATION_LOG_GROUP
替换为应用程序的日志组名称。如果您有多个日志组,则可以使用和号(&
)分隔它们,如以下示例所示:aws.log.group.names=log-group-1&log-group-2
。要启用指标与日志关联的功能,设置此当前环境变量已足够。有关更多信息,请参阅 启用指标与日志关联。要启用跟踪与日志关联,您还需要更改应用程序中的日志记录配置。有关更多信息,请参阅 启用跟踪与日志关联。OTEL_AWS_APPLICATION_SIGNALS_ENABLED
设置为
true
可使您的容器开始向 Application Signals 发送 X-Ray 跟踪和 CloudWatch 指标。OTEL_METRICS_EXPORTER
设置为
none
可禁用其他指标导出程序。OTEL_EXPORTER_OTLP_PROTOCOL
设置为
http/protobuf
以使用 HTTP 向 CloudWatch 发送指标和跟踪。OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT
设置为
http://127.0.0.1:4316/v1/metrics
可将指标发送到 CloudWatch sidecar。OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
设置为
http://127.0.0.1:4316/v1/traces
可向 CloudWatch sidecar 发送跟踪。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
替换为应用程序的日志组名称。如果您有多个日志组,则可以使用和号(&
)分隔它们,如以下示例所示:aws.log.group.names=log-group-1&log-group-2
。要启用指标与日志关联的功能,设置此当前环境变量已足够。有关更多信息,请参阅 启用指标与日志关联。要启用跟踪与日志关联,您还需要更改应用程序中的日志记录配置。有关更多信息,请参阅 启用跟踪与日志关联。示例如下:要启用日志关联,请在挂载您于此过程的步骤 1 中定义的卷
opentelemetry-auto-instrumentation-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": "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
-
使用 CloudWatch 代理检测您在 Amazon ECS 上的应用程序
首先,指定绑定挂载。在接下来的步骤中,该卷将用于跨容器共享文件。您将在此过程的稍后部分使用此绑定挂载。
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
添加 CloudWatch 代理 sidecar 定义。为此,请在应用程序的任务定义中追加一个名为
ecs-cwagent
的新容器。将$REGION
替换为您的实际区域名称。将$IMAGE
替换为 Amazon Elastic Container Registry 上最新 CloudWatch 容器映像的路径。有关更多信息,请参阅 Amazon ECR 上的 cloudwatch-agent。 如果要改为启用使用进程守护程序策略的 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 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" } ]
将以下环境变量添加到您的应用程序容器中。您必须使用适用于 OpenTelemetry 的 AWS Distro .NET 自动仪表化代理
版本 1.1.0 或更高版本。 环境变量 启用 Application Signals 的设置 OTEL_RESOURCE_ATTRIBUTES
将以下信息指定为键值对:
service.name
设置服务的名称。这将作为应用程序的服务名称显示在 Application Signals 控制面板中。如果您不提供此键的值,将使用默认值UnknownService
。deployment.environment
设置应用程序运行所在的环境。这将作为应用程序的托管环境显示在 Application Signals 控制面板中。如果您未指定此项,则使用默认值generic:default
。
此属性键仅供 Application Signals 使用,并转换为 X-Ray 跟踪注释和 CloudWatch 指标维度。
OTEL_AWS_APPLICATION_SIGNALS_ENABLED
设置为
true
可使您的容器开始向 Application Signals 发送 X-Ray 跟踪和 CloudWatch 指标。OTEL_METRICS_EXPORTER
设置为
none
可禁用其他指标导出程序。OTEL_LOGS_EXPORTER
设置为
none
以禁用其他日志导出程序。OTEL_EXPORTER_OTLP_PROTOCOL
设置为
http/protobuf
以使用 HTTP 将指标和跟踪发送到 Application Signals。OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT
设置为
http://localhost:4316/v1/metrics
可将指标发送到 CloudWatch sidecar。OTEL_EXPORTER_OTLP_ENDPOINT
设置为
http://localhost:4316/
可向 CloudWatch sidecar 发送跟踪。OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
设置为
http://localhost:4316/v1/traces
可向 CloudWatch sidecar 发送跟踪。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 (Preview)
-
使用 CloudWatch 代理检测您在 Amazon ECS 上的应用程序
首先,指定绑定挂载。在接下来的步骤中,该卷将用于跨容器共享文件。您将在此过程的稍后部分使用此绑定挂载。
"volumes": [ { "name": "opentelemetry-auto-instrumentation-node" } ]
添加 CloudWatch 代理 sidecar 定义。为此,请在应用程序的任务定义中追加一个名为
ecs-cwagent
的新容器。将$REGION
替换为您的实际区域名称。将$IMAGE
替换为 Amazon Elastic Container Registry 上最新 CloudWatch 容器映像的路径。有关更多信息,请参阅 Amazon ECR 上的 cloudwatch-agent。 如果要改为启用使用进程守护程序策略的 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 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 控制面板中。如果您未指定此项,则使用默认值generic:default
。
此属性键仅供 Application Signals 使用,并转换为 X-Ray 跟踪注释和 CloudWatch 指标维度。
(可选)要启用 Application Signals 的日志关联,请将其他环境变量
aws.log.group.names
设置为应用程序日志的日志组名称。这样,应用程序的跟踪和指标便可与该特定日志组的相关日志条目相关联。对于此变量,将$YOUR_APPLICATION_LOG_GROUP
替换为应用程序的日志组名称。如果您有多个日志组,则可以使用和号(&
)分隔它们,如以下示例所示:aws.log.group.names=log-group-1&log-group-2
。要启用指标与日志关联的功能,设置此当前环境变量已足够。有关更多信息,请参阅 启用指标与日志关联。要启用跟踪与日志关联,您还需要更改应用程序中的日志记录配置。有关更多信息,请参阅 启用跟踪与日志关联。OTEL_AWS_APPLICATION_SIGNALS_ENABLED
设置为
true
可使您的容器开始向 Application Signals 发送 X-Ray 跟踪和 CloudWatch 指标。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 sidecar。OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
设置为
http://localhost:4316/v1/traces
可向 CloudWatch sidecar 发送跟踪。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
替换为应用程序的日志组名称。如果您有多个日志组,则可以使用和号(&
)分隔它们,如以下示例所示: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://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" } ] }
步骤 5:部署应用程序
创建任务定义的新修订版并将其部署到您的应用程序集群。您应该在新创建的任务中看到三个容器:
init
– Application Signals 初始化所必需的容器。ecs-cwagent
– 运行 CloudWatch 代理的容器
– 这是我们文档中的示例应用程序容器。在实际工作负载中,此特定的容器可能不存在,或者可能被您自己的服务容器所取代。my-app