Implementación mediante la estrategia de daemon
Paso 1: habilitar Application Signals en la cuenta
Primero debe habilitar Application Signals en su cuenta. Si no lo ha hecho, consulte Habilitación de Application Signals en su cuenta.
Paso 2: cree 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: implementar el servicio de daemon del agente de CloudWatch
Cree la siguiente definición de tarea e impleméntela en el clúster de aplicaciones. Sustituya $REGION por el nombre de la región actual. Sustituya $TASK_ROLE_ARN y $EXECUTION_ROLE_ARN por los roles de IAM que preparó en Paso 2: cree roles de IAM.. 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-agent
nota
El servicio de daemon expone dos puertos del host: el 4316 se utiliza como punto de conexión para recibir métricas y seguimientos, mientras que el 2000 es el punto de conexión del muestreador de seguimientos de CloudWatch. Esta configuración permite al agente recopilar y transmitir datos de telemetría de todas las tareas de aplicación que se ejecuten en el host. Asegúrese de que otros servicios del host no utilicen estos puertos para evitar conflictos.
{ "family": "ecs-cwagent-daemon", "taskRoleArn": "$TASK_ROLE_ARN", "executionRoleArn": "$EXECUTION_ROLE_ARN", "networkMode": "bridge", "containerDefinitions": [ { "name": "ecs-cwagent", "image": "$IMAGE", "essential": true, "portMappings": [ { "containerPort": 4316, "hostPort": 4316 }, { "containerPort": 2000, "hostPort": 2000 } ], "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-create-group": "true", "awslogs-group": "/ecs/ecs-cwagent", "awslogs-region": "$REGION", "awslogs-stream-prefix": "ecs" } } } ], "requiresCompatibilities": [ "EC2" ], "cpu": "128", "memory": "64" }
Paso 5: instrumentar la aplicación
El siguiente paso consiste en instrumentar la aplicación para 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 un nuevo contenedor
inita la definición de tareas de la aplicación. Sustituya$IMAGEpor 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 } ] }Agregue una dependencia al contenedor de
initpara asegurarse de que este 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.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_ATTRIBUTESEspecifique la siguiente información como pares clave-valor:
service.nameestablece 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.environmentestablece 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.namescomo 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_GROUPcon los nombres de los grupos de registro de su aplicación. Si tiene varios grupos de registro, puede usar el signo¶ 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_ENABLEDEstablézcalo en
truepara que su contenedor comience a enviar seguimientos de X-Ray y métricas de CloudWatch a Application Signals.OTEL_METRICS_EXPORTERConfigúrelo en
nonepara deshabilitar otros exportadores de métricas.OTEL_LOGS_EXPORTEREstablézcalo en
nonepara deshabilitar otros exportadores de registros.OTEL_EXPORTER_OTLP_PROTOCOLEstablézcalo en
http/protobufpara que envíe métricas y seguimientos a Application Signals con HTTP.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTEnvía las métricas al contenedor del daemon de CloudWatch.
Para las aplicaciones que se ejecuten en modo
host, establézcalo enhttp://localhost:4316/v1/metrics.Para las aplicaciones que se ejecuten en modo
bridgeoawsvpc, establézcalo en http://CW_CONTAINER_IP:4316/v1/metrics, dondeCW_CONTAINER_IPes la dirección IP privada de la instancia de contenedor de EC2. Puede recuperar esta dirección del servicio de metadatos de instancias (IMDS).
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTEnvía los seguimientos al contenedor del daemon de CloudWatch.
Para las aplicaciones que se ejecuten en modo
host, establézcalo enhttp://localhost:4316/v1/traces.Para las aplicaciones que se ejecuten en modo
bridgeoawsvpc, establézcalo en http://CW_CONTAINER_IP:4316/v1/traces, dondeCW_CONTAINER_IPes la dirección IP privada de la instancia de contenedor de EC2. Puede recuperar esta dirección del servicio de metadatos de instancias (IMDS).
OTEL_TRACES_SAMPLEREstablézcalo en
xraypara configurar X-Ray como el muestreador de seguimientos.OTEL_PROPAGATORSEstablézcalo en
xraycomo uno de los propagadores.JAVA_TOOL_OPTIONSEstablézcalo en
" -javaagent:$y reemplaceAWS_ADOT_JAVA_INSTRUMENTATION_PATH"AWS_ADOT_JAVA_INSTRUMENTATION_PATHcon 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.jarMonte el volumen
opentelemetry-auto-instrumentationque 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://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }
- Python
-
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
PYTHONPATHa veces puede provocar que la aplicación no se inicie. Para solucionar este problema, asegúrese de configurar la variable de entornoPYTHONPATHen 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
--noreloadpara evitar la recarga automática.Establezca la variable de entorno
DJANGO_SETTINGS_MODULEen la ubicación del archivosettings.pyde 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 un nuevo contenedor
inita la definición de tareas de la aplicación. Sustituya$IMAGEpor 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 } ] }Agregue una dependencia al contenedor de
initpara asegurarse de que este 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.
Variable de entorno Configuración para habilitar Application Signals OTEL_RESOURCE_ATTRIBUTESEspecifique la siguiente información como pares clave-valor:
service.nameestablece 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.environmentestablece 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.namescomo 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_GROUPcon los nombres de los grupos de registro de su aplicación. Si tiene varios grupos de registro, puede usar el signo¶ 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_ENABLEDEstablézcalo en
truepara que su contenedor comience a enviar seguimientos de X-Ray y métricas de CloudWatch a Application Signals.OTEL_METRICS_EXPORTERConfigúrelo en
nonepara deshabilitar otros exportadores de métricas.OTEL_EXPORTER_OTLP_PROTOCOLEstablézcalo en
http/protobufpara enviar métricas y seguimientos a CloudWatch mediante HTTP.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTEnvía las métricas al contenedor del daemon de CloudWatch.
Para las aplicaciones que se ejecuten en modo
host, establézcalo enhttp://localhost:4316/v1/metrics.Para las aplicaciones que se ejecuten en modo
bridgeoawsvpc, establézcalo en http://CW_CONTAINER_IP:4316/v1/metrics, dondeCW_CONTAINER_IPes la dirección IP privada de la instancia de contenedor de EC2. Puede recuperar esta dirección del servicio de metadatos de instancias (IMDS).
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTEnvía los seguimientos al contenedor del daemon de CloudWatch.
Para las aplicaciones que se ejecuten en modo
host, establézcalo enhttp://localhost:4316/v1/traces.Para las aplicaciones que se ejecuten en modo
bridgeoawsvpc, establézcalo en http://CW_CONTAINER_IP:4316/v1/traces, dondeCW_CONTAINER_IPes la dirección IP privada de la instancia de contenedor de EC2. Puede recuperar esta dirección del servicio de metadatos de instancias (IMDS).
OTEL_TRACES_SAMPLEREstablézcalo en
xraypara configurar X-Ray como el muestreador de seguimientos.OTEL_TRACES_SAMPLER_ARGEstablece el punto de conexión del muestreador de seguimientos.
Para las aplicaciones que se ejecuten en modo
host, establézcalo enhttp://localhost:2000.Para las aplicaciones que se ejecuten en modo
bridgeoawsvpc, establézcalo enhttp://, dondeCW_CONTAINER_IP:2000CW_CONTAINER_IPes la dirección IP privada de la instancia de contenedor de EC2. Puede recuperar esta dirección del servicio de metadatos de instancias (IMDS).
OTEL_PROPAGATORSAgregue
xraycomo uno de los propagadores.OTEL_PYTHON_DISTROEstablézcalo en
aws_distropara usar la instrumentación de Python de ADOT.OTEL_PYTHON_CONFIGURATOREstablézcalo en
aws_configurationpara usar la configuración de Python de ADOT.PYTHONPATHSustituya
$APP_PATHpor 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_MODULENecesario solo para las aplicaciones Django. Configúrelo en la ubicación del archivo
settings.pyde su aplicación Django. Sustituya$PATH_TO_SETTINGS.Monte el volumen
opentelemetry-auto-instrumentation-pythonque 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://CW_CONTAINER_IP:2000" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_PYTHON_DISTRO", "value": "aws_distro" }, { "name": "OTEL_PYTHON_CONFIGURATOR", "value": "aws_configurator" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "service.name=$SVC_NAME" }, { "name": "DJANGO_SETTINGS_MODULE", "value": "$PATH_TO_SETTINGS.settings" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }(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.namespara 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_GROUPcon los nombres de los grupos de registro de su aplicación. Si tiene varios grupos de registro, puede usar el signo¶ 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-pythonque 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://CW_CONTAINER_IP:2000" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_PYTHON_DISTRO", "value": "aws_distro" }, { "name": "OTEL_PYTHON_CONFIGURATOR", "value": "aws_configurator" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_RESOURCE_ATTRIBUTES", "value": "aws.log.group.names=$YOUR_APPLICATION_LOG_GROUP,service.name=$SVC_NAME" }, { "name": "DJANGO_SETTINGS_MODULE", "value": "$PATH_TO_SETTINGS.settings" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-python", "containerPath": "/otel-auto-instrumentation-python", "readOnly": false } ] }
- .NET
-
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 un nuevo contenedor
inita la definición de tareas de la aplicación. Sustituya$IMAGEpor 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
initpara 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_ATTRIBUTESEspecifique la siguiente información como pares clave-valor:
service.nameestablece 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.environmentestablece 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_ENABLEDEstablézcalo en
truepara que su contenedor comience a enviar seguimientos de X-Ray y métricas de CloudWatch a Application Signals.OTEL_METRICS_EXPORTERConfigúrelo en
nonepara deshabilitar otros exportadores de métricas.OTEL_LOGS_EXPORTEREstablézcalo en
nonepara deshabilitar otros exportadores de registros.OTEL_EXPORTER_OTLP_PROTOCOLEstablézcalo en
http/protobufpara que envíe métricas y seguimientos a Application Signals con HTTP.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTEnvía las métricas al contenedor del daemon de CloudWatch.
Para las aplicaciones que se ejecuten en modo
host, establézcalo enhttp://localhost:4316/v1/metrics.Para las aplicaciones que se ejecuten en modo
bridgeoawsvpc, establézcalo en http://CW_CONTAINER_IP:4316/v1/metrics, dondeCW_CONTAINER_IPes la dirección IP privada de la instancia de contenedor de EC2. Puede recuperar esta dirección del servicio de metadatos de instancias (IMDS).
OTEL_EXPORTER_OTLP_ENDPOINTEnvía los seguimientos al contenedor del daemon de CloudWatch.
Para las aplicaciones que se ejecuten en modo
host, establézcalo enhttp://localhost:4316.Para las aplicaciones que se ejecuten en modo
bridgeoawsvpc, establézcalo en http://CW_CONTAINER_IP:4316, dondeCW_CONTAINER_IPes la dirección IP privada de la instancia de contenedor de EC2. Puede recuperar esta dirección del servicio de metadatos de instancias (IMDS).
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTEnvía los seguimientos al contenedor del daemon de CloudWatch.
Para las aplicaciones que se ejecuten en modo
host, establézcalo enhttp://localhost:4316/v1/traces.Para las aplicaciones que se ejecuten en modo
bridgeoawsvpc, establézcalo en http://CW_CONTAINER_IP:4316/v1/traces, dondeCW_CONTAINER_IPes la dirección IP privada de la instancia de contenedor de EC2. Puede recuperar esta dirección del servicio de metadatos de instancias (IMDS).
OTEL_TRACES_SAMPLER_ARGEstablece el punto de conexión del muestreador de seguimientos.
Para las aplicaciones que se ejecuten en modo
host, establézcalo enhttp://localhost:2000.Para las aplicaciones que se ejecuten en modo
bridgeoawsvpc, establézcalo enhttp://, dondeCW_CONTAINER_IP:2000CW_CONTAINER_IPes la dirección IP privada de la instancia de contenedor de EC2. Puede recuperar esta dirección del servicio de metadatos de instancias (IMDS).
OTEL_DOTNET_AUTO_HOMEEstablézcalo en la ubicación de instalación de la instrumentación automática de ADOT .NET.
OTEL_DOTNET_AUTO_PLUGINSEstablézcalo en
AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentationpara habilitar el complemento de Application Signals.CORECLR_ENABLE_PROFILINGEstablézcalo en
1para habilitar el generador de perfiles.CORECLR_PROFILEREstablézcalo en
{918728DD-259F-4A6A-AC2B-B85E1B658318}como el CLSID del generador de perfiles.CORECLR_PROFILER_PATHEstablézcalo en la ruta del generador de perfiles.
En Linux, establézcalo en
${OTEL_DOTNET_AUTO_HOME}/linux-x64/OpenTelemetry.AutoInstrumentation.Native.soEn Windows Server, establézcalo en
${OTEL_DOTNET_AUTO_HOME}/win-x64/OpenTelemetry.AutoInstrumentation.Native.dllDOTNET_ADDITIONAL_DEPSEstablézcalo en la ruta de la carpeta de
${OTEL_DOTNET_AUTO_HOME}/AdditionalDeps.DOTNET_SHARED_STOREEstablézcalo en la ruta de la carpeta de
${OTEL_DOTNET_AUTO_HOME}/store.DOTNET_STARTUP_HOOKSEstablézcalo en la ruta del ensamblaje administrado
${OTEL_DOTNET_AUTO_HOME}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dllpara que se ejecute antes del punto de entrada de la aplicación principal.Monte el volumen
opentelemetry-auto-instrumentationque 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=dotnet-service-name" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://localhost:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }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=dotnet-service-name" }, { "name": "OTEL_LOGS_EXPORTER", "value": "none" }, { "name": "OTEL_METRICS_EXPORTER", "value": "none" }, { "name": "OTEL_EXPORTER_OTLP_PROTOCOL", "value": "http/protobuf" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "value": "true" }, { "name": "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_EXPORTER_OTLP_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "OTEL_PROPAGATORS", "value": "tracecontext,baggage,b3,xray" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "C:\\otel-auto-instrumentation", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }
- Node.js
-
nota
Si desea habilitar Application Signals para una aplicación Node.js con ESM, consulte Setting up a Node.js application with the ESM module format antes de seguir estos pasos.
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 un nuevo contenedor
inita la definición de tareas de la aplicación. Sustituya$IMAGEpor 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 } ], }Agregue una dependencia al contenedor de
initpara asegurarse de que este 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.
Variable de entorno Configuración para habilitar Application Signals OTEL_RESOURCE_ATTRIBUTESEspecifique la siguiente información como pares clave-valor:
service.nameestablece 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.environmentestablece 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.namescomo 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_GROUPcon los nombres de los grupos de registro de su aplicación. Si tiene varios grupos de registro, puede usar el signo¶ 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_ENABLEDEstablézcalo en
truepara que su contenedor comience a enviar seguimientos de X-Ray y métricas de CloudWatch a Application Signals.OTEL_METRICS_EXPORTERConfigúrelo en
nonepara deshabilitar otros exportadores de métricas.OTEL_LOGS_EXPORTEREstablézcalo en
nonepara deshabilitar otros exportadores de registros.OTEL_EXPORTER_OTLP_PROTOCOLEstablézcalo en
http/protobufpara que envíe métricas y seguimientos a Application Signals con OTLP/HTTP y ProtoBuf.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTEnvía las métricas al contenedor del daemon de CloudWatch.
Para las aplicaciones que se ejecuten en modo
host, establézcalo enhttp://localhost:4316/v1/metrics.Para las aplicaciones que se ejecuten en modo
bridgeoawsvpc, establézcalo en http://CW_CONTAINER_IP:4316/v1/metrics, dondeCW_CONTAINER_IPes la dirección IP privada de la instancia de contenedor de EC2. Puede recuperar esta dirección del servicio de metadatos de instancias (IMDS).
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTEnvía los seguimientos al contenedor del daemon de CloudWatch.
Para las aplicaciones que se ejecuten en modo
host, establézcalo enhttp://localhost:4316/v1/traces.Para las aplicaciones que se ejecuten en modo
bridgeoawsvpc, establézcalo en http://CW_CONTAINER_IP:4316/v1/traces, dondeCW_CONTAINER_IPes la dirección IP privada de la instancia de contenedor de EC2. Puede recuperar esta dirección del servicio de metadatos de instancias (IMDS).
OTEL_TRACES_SAMPLEREstablézcalo en
xraypara configurar X-Ray como el muestreador de seguimientos.OTEL_TRACES_SAMPLER_ARGEstablece el punto de conexión del muestreador de seguimientos.
Para las aplicaciones que se ejecuten en modo
host, establézcalo enhttp://localhost:2000.Para las aplicaciones que se ejecuten en modo
bridgeoawsvpc, establézcalo enhttp://, dondeCW_CONTAINER_IP:2000CW_CONTAINER_IPes la dirección IP privada de la instancia de contenedor de EC2. Puede recuperar esta dirección del servicio de metadatos de instancias (IMDS).
OTEL_PROPAGATORSEstablézcalo en
xraycomo uno de los propagadores.NODE_OPTIONSConfigurado en
--require. SustituyaAWS_ADOT_NODE_INSTRUMENTATION_PATHAWS_ADOT_NODE_INSTRUMENTATION_PATHcon 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.jsMonte el volumen
opentelemetry-auto-instrumentation-nodeque 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
initpara 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://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "NODE_OPTIONS", "value": "--require /otel-auto-instrumentation-node/autoinstrumentation.js" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }(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.namespara 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_GROUPcon los nombres de los grupos de registro de su aplicación. Si tiene varios grupos de registro, puede usar el signo¶ 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-instrumentationque 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://CW_CONTAINER_IP:4316/v1/metrics" }, { "name": "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "value": "http://CW_CONTAINER_IP:4316/v1/traces" }, { "name": "OTEL_TRACES_SAMPLER", "value": "xray" }, { "name": "OTEL_TRACES_SAMPLER_ARG", "value": "endpoint=http://CW_CONTAINER_IP:2000" }, { "name": "NODE_OPTIONS", "value": "--require /otel-auto-instrumentation-node/autoinstrumentation.js" } ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ], "dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ] }
Configuración de una aplicación Node.js con el formato de módulo ESM
La compatibilidad ofrecida para las aplicaciones Node.js con el formato de módulo ESM es limitada. Para obtener más información, consulte Limitaciones conocidas de Node.js con ESM.
Para el formato de módulo ESM, no hay que usar el contenedor
initpara inyectar el SDK de instrumentación de Node.js. Para habilitar Application Signals para Node.js con ESM, omita los pasos 1 y 2 del procedimiento anterior y en su lugar haga lo siguiente:Para habilitar Application Signals para una aplicación Node.js con ESM
Instale en su aplicación Node.js las dependencias pertinentes para la autoinstrumentación:
npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0En los pasos 4 y 5 del procedimiento anterior, retire el montaje del volumen
opentelemetry-auto-instrumentation-node:"mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ]Reemplace las opciones de nodo con las siguientes opciones.
{ "name": "NODE_OPTIONS", "value": "--import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs" }
Paso 6: 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 dos contenedores en la tarea recién creada:
init: contenedor necesario para inicializar Application Signals.: este es el ejemplo de contenedor de aplicaciones de nuestra documentación. En las cargas de trabajo reales, es posible que no exista este contenedor específico, o que se sustituya por sus propios contenedores de servicio.my-app
(Opcional) Paso 7: supervisar el estado de su aplicación
Una vez que haya habilitado sus aplicaciones en Amazon EC2, podrá supervisar el estado de las mismas. Para obtener más información, consulte Monitoreo del estado operativo de sus aplicaciones con Application Signals.