Use una configuración personalizada para habilitar Application Signals en Amazon ECS
Utilice estas instrucciones de configuración personalizadas para incorporar aplicaciones de Amazon ECS a CloudWatch Application Signals. Usted instala y configura el agente y la distribución de CloudWatch para AWS OpenTelemetry.
importante
Solo se admite el modo de red awsvpc
. Ambos tipos de lanzamiento, EC2 y Fargate, son compatibles.
En los clústeres de Amazon ECS, Application Signals no descubre automáticamente los nombres de sus servicios. Debe especificar los nombres de sus servicios durante la configuración personalizada; los nombres que especifique son los que aparecen en los paneles de Application Signals.
Paso 1: habilitar Application Signals en la cuenta
Si aún no ha activado Application Signals en esta cuenta, debe conceder a Application Signals los permisos que necesita para descubrir los servicios. Para ello, haga lo siguiente. Solo es necesario hacerlo una vez para la cuenta.
Para habilitar Application Signals para las aplicaciones
Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/
. En el panel de navegación, elija Servicios.
Elija Comenzar a descubrir sus servicios.
Seleccione la casilla de verificación y elija Empezar a descubrir servicios.
Al completar este paso por primera vez en la cuenta, se crea el rol vinculado al servicio AWSServiceRoleForCloudWatchApplicationSignals. Este rol otorga a Application Signals los siguientes permisos:
-
xray:GetServiceGraph
-
logs:StartQuery
-
logs:GetQueryResults
-
cloudwatch:GetMetricData
-
cloudwatch:ListMetrics
-
tag:GetResources
Para obtener más información acerca de este rol, consulte Permisos de roles vinculados a un servicio para CloudWatch Application Signals.
-
Paso 2: crear roles de IAM
Debe crear un rol de IAM. Si ya creó este rol, es posible que deba agregarle permisos.
-
ECS task role— (Función de tarea de ECS) Los contenedores utilizan esta función para ejecutarse. Los permisos deben ser los que necesiten las aplicaciones, además de CloudWatchAgentServerPolicy.
Para obtener más información acerca de cómo crear Roles de IAM, consulte Creating IAM Roles (Creación de Roles de IAM).
Paso 3: preparar la configuración del agente de CloudWatch
En primer lugar, prepare la configuración del agente con Application Signals habilitada. Para ello, cree un archivo local denominado /tmp/ecs-cwagent.json
.
{ "traces": { "traces_collected": { "application_signals": {} } }, "logs": { "metrics_collected": { "application_signals": {} } } }
Luego, cargue esta configuración en el almacén de parámetros SSM. Para ello, ejecute el siguiente comando. En el archivo, sustituya $REGION
por el nombre de la región actual.
aws ssm put-parameter \ --name "ecs-cwagent" \ --type "String" \ --value "`cat /tmp/ecs-cwagent.json`" \ --region "
$REGION
"
Paso 4: instrumentar la aplicación con el agente de CloudWatch
El siguiente paso es configurar la aplicación para CloudWatch Application Signals.
- Java
-
Para instrumentar la aplicación en Amazon ECS con el agente CloudWatch
En primer lugar, especifique un montaje de enlace. El volumen se utilizará para compartir archivos entre contenedores en los siguientes pasos. Usará este montaje de enlace más tarde en este procedimiento.
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
Añada una definición de sidecar de agente de CloudWatch. Para ello, añada un nuevo contenedor llamado
ecs-cwagent
a la definición de tareas de la aplicación. Sustituya$REGION
por el nombre de la región actual. Sustituya$IMAGE
por la ruta a la imagen más reciente del contenedor de CloudWatch en Amazon Elastic Container Registry. Para obtener más información, consulte cloudwatch-agenten Amazon ECR. { "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" } } }Añada un nuevo contenedor
init
a la definición de tareas de la aplicación. Sustituya$IMAGE
por la imagen más reciente del repositorio de imágenes AWS Distro para OpenTelemetryde 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 } ] }Añada las siguientes variables de entorno al contenedor de aplicaciones. Debe utilizar la versión 1.32.2 o una posterior del agente de autoinstrumentación de Distro para OpenTelemetry de AWS para Java
. Variable de entorno Configuración para habilitar Application Signals OTEL_RESOURCE_ATTRIBUTES
Especifique la siguiente información como pares clave-valor:
service.name
establece el nombre del servicio. Se mostrará como el nombre del servicio de la aplicación en los paneles de Application Signals. Si no proporciona ningún valor para esta clave, se utiliza el valor predeterminado deUnknownService
.deployment.environment
establece el entorno en el que se ejecuta la aplicación. Se mostrará como el entorno alojado en de la aplicación en los paneles de Application Signals. Si no lo especifica, se utiliza el valor predeterminado degeneric:default
.
Esta clave de atributo solo la usa Application Signals y se convierte en anotaciones de trazas de X-Ray y dimensiones métricas de CloudWatch.
(Opcional) Para habilitar la correlación para Application Signals, defina una variable de entorno adicional
aws.log.group.names
como nombre del grupo de registro para el registro de aplicación. De este modo, los seguimientos y métricas de su aplicación se pueden correlacionar con las entradas de registro correspondientes del grupo de registro. En esta variable, sustituya$YOUR_APPLICATION_LOG_GROUP
con los nombres de los grupos de registro de su aplicación. Si tiene varios grupos de registro, puede usar el signo&
para separarlos, como en este ejemplo:aws.log.group.names=log-group-1&log-group-2
. Para habilitar la correlación entre métricas y registros, basta con establecer esta variable de entorno actual. Para obtener más información, consulte Habilitación de la correlación entre métricas y registros. Para habilitar la correlación entre seguimientos y registros, también debe cambiar la configuración de registro de su aplicación. Para obtener más información, consulte Habilitación de la correlación entre seguimientos y registros.OTEL_AWS_APPLICATION_SIGNALS_ENABLED
Establézcalo en
true
para que su contenedor comience a enviar seguimientos de X-Ray y métricas de CloudWatch a Application Signals.OTEL_METRICS_EXPORTER
Configúrelo en
none
para deshabilitar otros exportadores de métricas.OTEL_LOGS_EXPORTER
Establézcalo en
none
para deshabilitar otros exportadores de registros.OTEL_EXPORTER_OTLP_PROTOCOL
Establézcalo en
http/protobuf
para que envíe métricas y seguimientos a Application Signals con HTTP.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT
Configúrelo en
http://localhost:4316/v1/metrics
para enviar las métricas al sidecar de CloudWatch.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
Configúrelo en
http://localhost:4316/v1/traces
para enviar seguimientos al sidecar de CloudWatch.OTEL_TRACES_SAMPLER
Establézcalo en
xray
para configurar X-Ray como el muestreador de seguimientos.OTEL_PROPAGATORS
Establézcalo en
xray
como uno de los propagadores.JAVA_TOOL_OPTIONS
Establézcalo en
" -javaagent:$
y reemplaceAWS_ADOT_JAVA_INSTRUMENTATION_PATH
"AWS_ADOT_JAVA_INSTRUMENTATION_PATH
con la ruta en la que se almacena el agente de autoinstrumentación de AWS Distro para OpenTelemetry para Java. Por ejemplo,/otel-auto-instrumentation/javaagent.jar
Monte el volumen
opentelemetry-auto-instrumentation
que definió en el paso 1 de este procedimiento. Si no necesita habilitar la correlación de registros con métricas y seguimientos, utilice el siguiente ejemplo para una aplicación de Java. Si desea habilitar la correlación de registros, consulte el siguiente paso en su lugar.{ "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 } ] }(Opcional) Para habilitar la correlación de registros, haga lo siguiente antes de montar el volumen. En
OTEL_RESOURCE_ATTRIBUTES
, defina una variable de entorno adicionalaws.log.group.names
para los grupos de registro de su aplicación. De este modo, los seguimientos y métricas de su aplicación se pueden correlacionar con las entradas de registro correspondientes de estos grupos de registro. En esta variable, sustituya$YOUR_APPLICATION_LOG_GROUP
con los nombres de los grupos de registro de su aplicación. Si tiene varios grupos de registro, puede usar el signo&
para separarlos, como en este ejemplo:aws.log.group.names=log-group-1&log-group-2
. Para habilitar la correlación entre métricas y registros, basta con establecer esta variable de entorno actual. Para obtener más información, consulte Habilitación de la correlación entre métricas y registros. Para habilitar la correlación entre seguimientos y registros, también debe cambiar la configuración de registro de su aplicación. Para obtener más información, consulte Habilitación de la correlación entre seguimientos y registros.A continuación, se muestra un ejemplo. Utilice este ejemplo para habilitar la correlación de registros cuando monte el volumen
opentelemetry-auto-instrumentation
que definió en el paso 1 de este procedimiento.{ "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": "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
-
Antes de activar las señales de aplicación para sus aplicaciones Python, debe tener en cuenta las consideraciones siguientes.
En algunas aplicaciones en contenedores, la falta de una variable de entorno
PYTHONPATH
a veces puede provocar que la aplicación no se inicie. Para solucionar este problema, asegúrese de configurar la variable de entornoPYTHONPATH
en la ubicación del directorio de trabajo de la aplicación. Esto se debe a un problema conocido con la instrumentación automática de OpenTelemetry. Para obtener más información sobre este problema, consulte Python autoinstrumentation setting of PYTHONPATH is not compliant. Para las aplicaciones de Django, se requieren configuraciones adicionales, que se describen en la documentación de Python de OpenTelemetry
. Use el indicador
--noreload
para evitar la recarga automática.Establezca la variable de entorno
DJANGO_SETTINGS_MODULE
en la ubicación del archivosettings.py
de su aplicación Django. Esto garantiza que OpenTelemetry pueda acceder correctamente a la configuración de Django e integrarse correctamente con ella.
Si utiliza un servidor WSGI para su aplicación de Python, además de los siguientes pasos de esta sección, consulte No hay datos de Application Signals para la aplicación de Python que usa un servidor WSGI para obtener información sobre cómo hacer que Application Signals funcione.
Instrumentación de la aplicación Python en Amazon ECS con el agente de CloudWatch
En primer lugar, especifique un montaje de enlace. El volumen se utilizará para compartir archivos entre contenedores en los siguientes pasos. Usará este montaje de enlace más tarde en este procedimiento.
"volumes": [ { "name": "opentelemetry-auto-instrumentation-python" } ]
Añada una definición de sidecar de agente de CloudWatch. Para ello, añada un nuevo contenedor llamado
ecs-cwagent
a la definición de tareas de la aplicación. Sustituya$REGION
por el nombre de la región actual. Sustituya$IMAGE
por la ruta a la imagen más reciente del contenedor de CloudWatch en Amazon Elastic Container Registry. Para obtener más información, consulte cloudwatch-agenten Amazon ECR. { "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" } } }Añada un nuevo contenedor
init
a la definición de tareas de la aplicación. Sustituya$IMAGE
por la imagen más reciente del repositorio de imágenes AWS Distro para OpenTelemetryde 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 } ] }
Añada las siguientes variables de entorno al contenedor de aplicaciones.
Variable de entorno Configuración para habilitar Application Signals OTEL_RESOURCE_ATTRIBUTES
Especifique la siguiente información como pares clave-valor:
service.name
establece el nombre del servicio. Se mostrará como el nombre del servicio de la aplicación en los paneles de Application Signals. Si no proporciona ningún valor para esta clave, se utiliza el valor predeterminado deUnknownService
.deployment.environment
establece el entorno en el que se ejecuta la aplicación. Se mostrará como el entorno alojado en de la aplicación en los paneles de Application Signals. Si no lo especifica, se utiliza el valor predeterminado degeneric:default
.
Esta clave de atributo solo la usa Application Signals y se convierte en anotaciones de trazas de X-Ray y dimensiones métricas de CloudWatch.
(Opcional) Para habilitar la correlación para Application Signals, defina una variable de entorno adicional
aws.log.group.names
como nombre del grupo de registro para el registro de aplicación. De este modo, los seguimientos y métricas de su aplicación se pueden correlacionar con las entradas de registro correspondientes del grupo de registro. En esta variable, sustituya$YOUR_APPLICATION_LOG_GROUP
con los nombres de los grupos de registro de su aplicación. Si tiene varios grupos de registro, puede usar el signo&
para separarlos, como en este ejemplo:aws.log.group.names=log-group-1&log-group-2
. Para habilitar la correlación entre métricas y registros, basta con establecer esta variable de entorno actual. Para obtener más información, consulte Habilitación de la correlación entre métricas y registros. Para habilitar la correlación entre seguimientos y registros, también debe cambiar la configuración de registro de su aplicación. Para obtener más información, consulte Habilitación de la correlación entre seguimientos y registros.OTEL_AWS_APPLICATION_SIGNALS_ENABLED
Establézcalo en
true
para que su contenedor comience a enviar seguimientos de X-Ray y métricas de CloudWatch a Application Signals.OTEL_METRICS_EXPORTER
Configúrelo en
none
para deshabilitar otros exportadores de métricas.OTEL_EXPORTER_OTLP_PROTOCOL
Establézcalo en
http/protobuf
para enviar métricas y seguimientos a CloudWatch mediante HTTP.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT
Configúrelo en
http://127.0.0.1:4316/v1/metrics
para enviar las métricas al sidecar de CloudWatch.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
Configúrelo en
http://127.0.0.1:4316/v1/traces
para enviar seguimientos al sidecar de CloudWatch.OTEL_TRACES_SAMPLER
Establézcalo en
xray
para configurar X-Ray como el muestreador de seguimientos.OTEL_PROPAGATORS
Agregue
xray
como uno de los propagadores.OTEL_PYTHON_DISTRO
Establézcalo en
aws_distro
para usar la instrumentación de Python de ADOT.OTEL_PYTHON_CONFIGURATOR
Establézcalo en
aws_configuration
para usar la configuración de Python de ADOT.PYTHONPATH
Sustituya
$APP_PATH
por la ubicación del directorio de trabajo de la aplicación dentro del contenedor. Esto es necesario para que el intérprete Python encuentre los módulos de la aplicación.DJANGO_SETTINGS_MODULE
Necesario solo para las aplicaciones Django. Configúrelo en la ubicación del archivo
settings.py
de su aplicación Django. Sustituya$PATH_TO_SETTINGS
.Monte el volumen
opentelemetry-auto-instrumentation-python
que definió en el paso 1 de este procedimiento. Si no necesita habilitar la correlación de registros con métricas y seguimientos, utilice el siguiente ejemplo para una aplicación de Python. Si desea habilitar la correlación de registros, consulte el siguiente paso en su lugar.{ "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 } ] }(Opcional) Para habilitar la correlación de registros, haga lo siguiente antes de montar el volumen. En
OTEL_RESOURCE_ATTRIBUTES
, defina una variable de entorno adicionalaws.log.group.names
para los grupos de registro de su aplicación. De este modo, los seguimientos y métricas de su aplicación se pueden correlacionar con las entradas de registro correspondientes de estos grupos de registro. En esta variable, sustituya$YOUR_APPLICATION_LOG_GROUP
con los nombres de los grupos de registro de su aplicación. Si tiene varios grupos de registro, puede usar el signo&
para separarlos, como en este ejemplo:aws.log.group.names=log-group-1&log-group-2
. Para habilitar la correlación entre métricas y registros, basta con establecer esta variable de entorno actual. Para obtener más información, consulte Habilitación de la correlación entre métricas y registros. Para habilitar la correlación entre seguimientos y registros, también debe cambiar la configuración de registro de su aplicación. Para obtener más información, consulte Habilitación de la correlación entre seguimientos y registros.A continuación, se muestra un ejemplo. Para habilitar la correlación de registros, utilice este ejemplo cuando monte el volumen
opentelemetry-auto-instrumentation-python
que definió en el paso 1 de este procedimiento.{ "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
-
Para instrumentar la aplicación en Amazon ECS con el agente CloudWatch
En primer lugar, especifique un montaje de enlace. El volumen se utilizará para compartir archivos entre contenedores en los siguientes pasos. Usará este montaje de enlace más tarde en este procedimiento.
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]
Añada una definición de sidecar de agente de CloudWatch. Para ello, añada un nuevo contenedor llamado
ecs-cwagent
a la definición de tareas de la aplicación. Sustituya$REGION
por el nombre de la región actual. Sustituya$IMAGE
por la ruta a la imagen más reciente del contenedor de CloudWatch en Amazon Elastic Container Registry. Para obtener más información, consulte cloudwatch-agenten Amazon ECR. { "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" } } }Añada un nuevo contenedor
init
a la definición de tareas de la aplicación. Sustituya$IMAGE
por la imagen más reciente del repositorio de imágenes AWS Distro para OpenTelemetryde Amazon ECR. Para una instancia de contenedor de Linux, utilice lo siguiente.
{ "name": "init", "image": "
$IMAGE
", "essential": false, "command": [ "cp", "-a", "autoinstrumentation/.", "/otel-auto-instrumentation" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }Para una instancia de contenedor de Windows Server, utilice lo siguiente.
{ "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 } ] }Agregue una dependencia al contenedor de
init
para asegurarse de que el contenedor finalice antes de que se inicie el contenedor de la aplicación."dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]
Añada las siguientes variables de entorno al contenedor de aplicaciones. Debe utilizar la versión 1.1.0 o una posterior del agente de autoinstrumentación de Distro para OpenTelemetry de AWS para .NET
. Variable de entorno Configuración para habilitar Application Signals OTEL_RESOURCE_ATTRIBUTES
Especifique la siguiente información como pares clave-valor:
service.name
establece el nombre del servicio. Se mostrará como el nombre del servicio de la aplicación en los paneles de Application Signals. Si no proporciona ningún valor para esta clave, se utiliza el valor predeterminado deUnknownService
.deployment.environment
establece el entorno en el que se ejecuta la aplicación. Se mostrará como el entorno alojado en de la aplicación en los paneles de Application Signals. Si no lo especifica, se utiliza el valor predeterminado degeneric:default
.
Esta clave de atributo solo la usa Application Signals y se convierte en anotaciones de trazas de X-Ray y dimensiones métricas de CloudWatch.
OTEL_AWS_APPLICATION_SIGNALS_ENABLED
Establézcalo en
true
para que su contenedor comience a enviar seguimientos de X-Ray y métricas de CloudWatch a Application Signals.OTEL_METRICS_EXPORTER
Configúrelo en
none
para deshabilitar otros exportadores de métricas.OTEL_LOGS_EXPORTER
Establézcalo en
none
para deshabilitar otros exportadores de registros.OTEL_EXPORTER_OTLP_PROTOCOL
Establézcalo en
http/protobuf
para que envíe métricas y seguimientos a Application Signals con HTTP.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT
Configúrelo en
http://localhost:4316/v1/metrics
para enviar las métricas al sidecar de CloudWatch.OTEL_EXPORTER_OTLP_ENDPOINT
Configúrelo en
http://localhost:4316/
para enviar seguimientos al sidecar de CloudWatch.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
Configúrelo en
http://localhost:4316/v1/traces
para enviar seguimientos al sidecar de CloudWatch.OTEL_DOTNET_AUTO_HOME
Establézcalo en la ubicación de instalación de la instrumentación automática de ADOT .NET.
OTEL_DOTNET_AUTO_PLUGINS
Establézcalo en
AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentation
para habilitar el complemento de Application Signals.CORECLR_ENABLE_PROFILING
Establézcalo en
1
para habilitar el generador de perfiles.CORECLR_PROFILER
Establézcalo en
{918728DD-259F-4A6A-AC2B-B85E1B658318}
como el CLSID del generador de perfiles.CORECLR_PROFILER_PATH
Establézcalo en la ruta del generador de perfiles.
En Linux, establézcalo en
${OTEL_DOTNET_AUTO_HOME}/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so
En Windows Server, establézcalo en
${OTEL_DOTNET_AUTO_HOME}/win-x64/OpenTelemetry.AutoInstrumentation.Native.dll
DOTNET_ADDITIONAL_DEPS
Establézcalo en la ruta de la carpeta de
${OTEL_DOTNET_AUTO_HOME}/AdditionalDeps
.DOTNET_SHARED_STORE
Establézcalo en la ruta de la carpeta de
${OTEL_DOTNET_AUTO_HOME}/store
.DOTNET_STARTUP_HOOKS
Establézcalo en la ruta del ensamblaje administrado
${OTEL_DOTNET_AUTO_HOME}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll
para que se ejecute antes del punto de entrada de la aplicación principal.Monte el volumen
opentelemetry-auto-instrumentation
que definió en el paso 1 de este procedimiento. En Linux, utilice lo que se indica a continuación.{ "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" } ] }
En Windows, utilice lo que se indica a continuación.
{ "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)
-
Para instrumentar la aplicación en Amazon ECS con el agente CloudWatch
En primer lugar, especifique un montaje de enlace. El volumen se utilizará para compartir archivos entre contenedores en los siguientes pasos. Usará este montaje de enlace más tarde en este procedimiento.
"volumes": [ { "name": "opentelemetry-auto-instrumentation-node" } ]
Añada una definición de sidecar de agente de CloudWatch. Para ello, añada un nuevo contenedor llamado
ecs-cwagent
a la definición de tareas de la aplicación. Sustituya$REGION
por el nombre de la región actual. Sustituya$IMAGE
por la ruta a la imagen más reciente del contenedor de CloudWatch en Amazon Elastic Container Registry. Para obtener más información, consulte cloudwatch-agenten Amazon ECR. { "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" } } }Añada un nuevo contenedor
init
a la definición de tareas de la aplicación. Sustituya$IMAGE
por la imagen más reciente del repositorio de imágenes AWS Distro para OpenTelemetryde 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 } ], }Añada las siguientes variables de entorno al contenedor de aplicaciones.
Variable de entorno Configuración para habilitar Application Signals OTEL_RESOURCE_ATTRIBUTES
Especifique la siguiente información como pares clave-valor:
service.name
establece el nombre del servicio. Se mostrará como el nombre del servicio de la aplicación en los paneles de Application Signals. Si no proporciona ningún valor para esta clave, se utiliza el valor predeterminado deUnknownService
.deployment.environment
establece el entorno en el que se ejecuta la aplicación. Se mostrará como el entorno alojado en de la aplicación en los paneles de Application Signals. Si no lo especifica, se utiliza el valor predeterminado degeneric:default
.
Esta clave de atributo solo la usa Application Signals y se convierte en anotaciones de trazas de X-Ray y dimensiones métricas de CloudWatch.
(Opcional) Para habilitar la correlación para Application Signals, defina una variable de entorno adicional
aws.log.group.names
como nombre del grupo de registro para el registro de aplicación. De este modo, los seguimientos y métricas de su aplicación se pueden correlacionar con las entradas de registro correspondientes del grupo de registro. En esta variable, sustituya$YOUR_APPLICATION_LOG_GROUP
con los nombres de los grupos de registro de su aplicación. Si tiene varios grupos de registro, puede usar el signo&
para separarlos, como en este ejemplo:aws.log.group.names=log-group-1&log-group-2
. Para habilitar la correlación entre métricas y registros, basta con establecer esta variable de entorno actual. Para obtener más información, consulte Habilitación de la correlación entre métricas y registros. Para habilitar la correlación entre seguimientos y registros, también debe cambiar la configuración de registro de su aplicación. Para obtener más información, consulte Habilitación de la correlación entre seguimientos y registros.OTEL_AWS_APPLICATION_SIGNALS_ENABLED
Establézcalo en
true
para que su contenedor comience a enviar seguimientos de X-Ray y métricas de CloudWatch a Application Signals.OTEL_METRICS_EXPORTER
Configúrelo en
none
para deshabilitar otros exportadores de métricas.OTEL_LOGS_EXPORTER
Establézcalo en
none
para deshabilitar otros exportadores de registros.OTEL_EXPORTER_OTLP_PROTOCOL
Establézcalo en
http/protobuf
para que envíe métricas y seguimientos a Application Signals con OTLP/HTTP y ProtoBuf.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT
Configúrelo en
http://localhost:4316/v1/metrics
para enviar las métricas al sidecar de CloudWatch.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
Configúrelo en
http://localhost:4316/v1/traces
para enviar seguimientos al sidecar de CloudWatch.OTEL_TRACES_SAMPLER
Establézcalo en
xray
para configurar X-Ray como el muestreador de seguimientos.OTEL_PROPAGATORS
Establézcalo en
xray
como uno de los propagadores.NODE_OPTIONS
Configurado en
--require
. SustituyaAWS_ADOT_NODE_INSTRUMENTATION_PATH
AWS_ADOT_NODE_INSTRUMENTATION_PATH
con la ruta en la que se almacena la instrumentación automática de Node.js de AWS Distro para OpenTelemetry. Por ejemplo,/otel-auto-instrumentation-node/autoinstrumentation.js
Monte el volumen
opentelemetry-auto-instrumentation
que definió en el paso 1 de este procedimiento. Si no necesita habilitar la correlación de registros con métricas y seguimientos, utilice el siguiente ejemplo para una aplicación de Node.js. Si desea habilitar la correlación de registros, consulte el siguiente paso en su lugar.Para el contenedor de aplicaciones, agregue una dependencia al contenedor de
init
para asegurarse de que el contenedor finalice antes de que se inicie el contenedor de la aplicación.{ "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" } ] }(Opcional) Para habilitar la correlación de registros, haga lo siguiente antes de montar el volumen. En
OTEL_RESOURCE_ATTRIBUTES
, defina una variable de entorno adicionalaws.log.group.names
para los grupos de registro de su aplicación. De este modo, los seguimientos y métricas de su aplicación se pueden correlacionar con las entradas de registro correspondientes de estos grupos de registro. En esta variable, sustituya$YOUR_APPLICATION_LOG_GROUP
con los nombres de los grupos de registro de su aplicación. Si tiene varios grupos de registro, puede usar el signo&
para separarlos, como en este ejemplo:aws.log.group.names=log-group-1&log-group-2
. Para habilitar la correlación entre métricas y registros, basta con establecer esta variable de entorno actual. Para obtener más información, consulte Habilitación de la correlación entre métricas y registros. Para habilitar la correlación entre seguimientos y registros, también debe cambiar la configuración de registro de su aplicación. Para obtener más información, consulte Habilitación de la correlación entre seguimientos y registros.A continuación, se muestra un ejemplo. Utilice este ejemplo para habilitar la correlación de registros cuando monte el volumen
opentelemetry-auto-instrumentation
que definió en el paso 1 de este procedimiento.{ "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" } ] }
Paso 5: implementar la aplicación
Cree una nueva revisión de la definición de la tarea e impleméntela en el clúster de aplicaciones. Debería ver tres contenedores en la tarea recién creada:
init
ecs-cwagent
my-app