使用挎斗策略进行部署
步骤 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 代理检测您的应用程序
下一步是为 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 } ] }在
init容器上添加依赖项,以确保此容器在应用程序容器启动之前完成。"dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]将以下环境变量添加到您的应用程序容器中。您必须使用适用于 OpenTelemetry 的 AWS Distro Java 自动仪表化代理
版本 1.32.2 或更高版本。 环境变量 启用 Application Signals 的设置 OTEL_RESOURCE_ATTRIBUTES将以下信息指定为键值对:
service.name设置服务的名称。这将作为应用程序的服务名称显示在 Application Signals 控制面板中。如果您不提供此键的值,则将使用默认值UnknownServicedeployment.environment参数可定义应用程序的运行时环境,并控制 CloudWatch 中 Amazon ECS 应用程序指标的Environment维度。如果未指定,CloudWatch 代理将自动使用 Amazon ECS 集群名称
此属性键仅供 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" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "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 应用程序采用 Gunicorn、uWSGI、Uvicorn 这类预派生服务端(WSGI/ASGI),除完成本节下述步骤外,请参阅 采用预派生服务端(WSGI/ASGI)的 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 } ] }在
init容器上添加依赖项,以确保此容器在应用程序容器启动之前完成。"dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]将以下环境变量添加到您的应用程序容器中。
环境变量 启用 Application Signals 的设置 OTEL_RESOURCE_ATTRIBUTES将以下信息指定为键值对:
service.name设置服务的名称。这将作为应用程序的服务名称显示在 Application Signals 控制面板中。如果您不提供此键的值,将使用默认值UnknownService。deployment.environment参数可定义应用程序的运行时环境,并控制 CloudWatch 中 Amazon ECS 应用程序指标的Environment维度。如果未指定,CloudWatch 代理将自动使用 Amazon ECS 集群名称
此属性键仅供 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_configurator以使用 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参数可定义应用程序的运行时环境,并控制 CloudWatch 中 Amazon ECS 应用程序指标的Environment维度。如果未指定,CloudWatch 代理将自动使用 Amazon ECS 集群名称
此属性键仅供 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.dllDOTNET_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-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://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" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }对于 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://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
-
注意
要为使用 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" } ]添加 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 } ], }在
init容器上添加依赖项,以确保此容器在应用程序容器启动之前完成。"dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]将以下环境变量添加到您的应用程序容器中。
环境变量 启用 Application Signals 的设置 OTEL_RESOURCE_ATTRIBUTES将以下信息指定为键值对:
service.name设置服务的名称。这将作为应用程序的服务名称显示在 Application Signals 控制面板中。如果您不提供此键的值,将使用默认值UnknownService。deployment.environment参数可定义应用程序的运行时环境,并控制 CloudWatch 中 Amazon ECS 应用程序指标的Environment维度。如果未指定,CloudWatch 代理将自动使用 Amazon ECS 集群名称
此属性键仅供 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_PATHAWS_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" } ] }
设置采用 ESM 模块格式的 Node.js 应用程序
我们对采用 ESM 模块格式的 Node.js 应用程序提供有限的支持。有关更多信息,请参阅 使用 ESM 的 Node.js 的已知限制。
对于 ESM 模块格式,使用
init容器注入 Node.js 检测 SDK 不适用。要为使用 ESM 的 Node.js 应用程序启用 Application Signals,请跳过之前程序的步骤 1 和 3,改为执行以下操作。为使用 ESM 的 Node.js 应用程序启用 Application Signals
将相关依赖项安装到您的 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
(可选)第 6 步:监控应用程序运行状况
在 Amazon ECS 上启用应用程序后,便可监控应用程序的运行状况。有关更多信息,请参阅 使用 Application Signals 监控应用程序的运行状况。