Déploiement en utilisant la stratégie démon
Étape 1 : activer Application Signals dans votre compte
Vous devez d’abord activer la vigie applicative dans votre compte. Si ce n’est pas déjà fait, consultez Activation de la vigie applicative dans votre compte.
Étape 2 : créer un rôle IAM
Vous devez créer un rôle IAM. Si vous avez déjà créé ce rôle, il se peut que vous deviez lui ajouter des autorisations.
-
Rôle de tâche ECS : les conteneurs utilisent ce rôle pour s'exécuter. Les autorisations doivent inclure celles nécessaires à vos applications, ainsi que CloudWatchAgentServerPolicy.
Pour plus d'informations sur la création de rôles IAM, consultez Création de rôles IAM.
Étape 3 : préparer la configuration de l’agent CloudWatch
Préparez d’abord la configuration de l’agent avec Application Signals activé. Pour ce faire, créez un fichier local nommé /tmp/ecs-cwagent.json.
{ "traces": { "traces_collected": { "application_signals": {} } }, "logs": { "metrics_collected": { "application_signals": {} } } }
Chargez ensuite la configuration de l’agent dans le magasin de paramètres SSM. Pour ce faire, entrez la commande suivante : Dans le fichier, remplacez $REGION par le nom réel de votre région.
aws ssm put-parameter \ --name "ecs-cwagent" \ --type "String" \ --value "`cat /tmp/ecs-cwagent.json`" \ --region "$REGION"
Étape 4 : déployer le service démon de l’agent CloudWatch
Créez la définition de tâche suivante, puis déployez-la dans votre cluster d’applications. Remplacez $REGION par le nom de votre région. Remplacez $TASK_ROLE_ARN et $EXECUTION_ROLE_ARN par les rôles IAM que vous avez préparés dans Étape 2 : créer un rôle IAM. Remplacez $IMAGE par le chemin de la version la plus récente de l’image du conteneur CloudWatch sur Amazon Elastic Container Registry. Pour plus d’informations, consultez cloudwatch-agent
Note
Le service démon expose deux ports sur l’hôte : le port 4316, utilisé comme point de terminaison pour la réception des métriques et des suivis, et le port 2000, utilisé comme point de terminaison pour l’échantillonneur de suivis CloudWatch. Cette configuration permet à l’agent de collecter et transmettre les données de télémétrie provenant de toutes les tâches d’application exécutées sur l’hôte. Assurez-vous que ces ports ne sont pas déjà utilisés par d’autres services sur l’hôte afin d’éviter tout conflit.
{ "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" }
Étape 5 : instrumenter votre application
L’étape suivante consiste à instrumenter votre application pour la vigie applicative.
- Java
-
Pour instrumenter votre application sur Amazon ECS avec l’agent CloudWatch
Spécifiez d’abord un montage lié. Le volume sera utilisé pour partager des fichiers entre conteneurs au cours des prochaines étapes. Vous utiliserez ce montage lié plus tard dans cette procédure.
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]Ajoutez un nouveau conteneur
inità la définition de tâche de votre application. Remplacez$IMAGEpar la dernière image du référentiel d’images Amazon ECR d’AWS Distro for OpenTelemetry. { "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 } ] }Ajoutez une dépendance au conteneur
initafin de vous assurer que ce conteneur se termine avant le démarrage du conteneur de votre application."dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]Ajoutez les variables d’environnement suivantes à votre conteneur d’application. Vous devez utiliser la version 1.32.2 ou ultérieure de l’agent d’instrumentation automatique AWS Distro for OpenTelemetry pour Java
. Variable d'environnement Configuration pour activer Application Signals OTEL_RESOURCE_ATTRIBUTESSpécifiez les informations suivantes sous forme de paires clé-valeur :
service.namedéfini le nom du service. Il sera affiché comme nom de service pour votre application dans les tableaux de bord d’Application Signals. Si vous ne fournissez pas de valeur pour cette clé, la valeur par défautUnknownServiceest utilisée.deployment.environmentdéfinit l’environnement dans lequel l’application s’exécute. Cet environnement sera affiché comme l’environnement hébergé de votre application dans les tableaux de bord Application Signals. Si vous ne spécifiez rien, la valeur par défautgeneric:defaultsera utilisée.
Cette clé d’attribut n’est utilisée que par Application Signals et est convertie en annotations de suivi X-Ray et en dimensions de métrique CloudWatch.
(Facultatif) Pour activer la corrélation des journaux dans la vigie applicative, définissez une variable d’environnement supplémentaire
aws.log.group.namescorrespondant au nom du groupe de journaux de votre application. Cela permet de corréler les suivis et les métriques de votre application avec les entrées de journaux correspondantes du groupe de journaux. Pour cette variable, remplacez$YOUR_APPLICATION_LOG_GROUPpar le nom du groupe de journaux de votre application. Si vous avez plusieurs groupes de journaux, vous pouvez les séparer à l’aide d’un esperluette (&), comme dans l’exemple suivant :aws.log.group.names=log-group-1&log-group-2. Pour activer la corrélation entre les métriques et les journaux, la définition de cette variable suffit. Pour de plus amples informations, consultez Activation de la corrélation entre métriques et journaux. Pour activer la corrélation entre les suivis et les journaux, vous devez également modifier la configuration de journalisation de votre application. Pour de plus amples informations, consultez Activation de la corrélation entre suivis et journaux.OTEL_AWS_APPLICATION_SIGNALS_ENABLEDDéfinissez sur
truepour que le conteneur commence à envoyer les suivis X-Ray et les métriques CloudWatch à la vigie applicative.OTEL_METRICS_EXPORTERDéfinissez sur
nonepour désactiver les autres exportateurs de mesures.OTEL_LOGS_EXPORTERDéfinissez sur
nonepour désactiver les autres exportateurs de journaux.OTEL_EXPORTER_OTLP_PROTOCOLDéfinissez sur
http/protobufpour envoyer les métriques et les suivis à la vigie applicative via HTTP.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTEnvoie des métriques au conteneur démon CloudWatch.
Pour les applications exécutées en mode
host, définissez cette variable surhttp://localhost:4316/v1/metrics.Pour les applications exécutées en mode
bridgeou modeawsvpc, définissez cette variable sur http://CW_CONTAINER_IP:4316/v1/metrics, oùCW_CONTAINER_IPcorrespond à l’adresse IP privée de l’instance de conteneur EC2. Vous pouvez extraire cette adresse via le service de métadonnées d’instance (IMDS).
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTEnvoie des suivis au conteneur démon CloudWatch.
Pour les applications exécutées en mode
host, définissez cette variable surhttp://localhost:4316/v1/traces.Pour les applications exécutées en mode
bridgeou modeawsvpc, définissez cette variable sur http://CW_CONTAINER_IP:4316/v1/traces, oùCW_CONTAINER_IPcorrespond à l’adresse IP privée de l’instance de conteneur EC2. Vous pouvez extraire cette adresse via le service de métadonnées d’instance (IMDS).
OTEL_TRACES_SAMPLERDéfinissez cette variable sur
xraypour utiliser X-Ray comme échantillonneur de suivis.OTEL_PROPAGATORSDéfinissez
xraycomme l’un des propagateurs.JAVA_TOOL_OPTIONSDéfinissez sur
" -javaagent:$pour remplacerAWS_ADOT_JAVA_INSTRUMENTATION_PATH"AWS_ADOT_JAVA_INSTRUMENTATION_PATHpar le chemin où est stockée l’agent d’instrumentation automatique AWS Distro for OpenTelemetry pour Java. Par exemple,/otel-auto-instrumentation/javaagent.jarMontez le volume
opentelemetry-auto-instrumentationque vous avez défini à l’étape 1 de cette procédure. Si vous n’avez pas besoin d’activer la corrélation des journaux avec les métriques et les suivis, utilisez l’exemple fourni pour une application Java. Si vous souhaitez activer la corrélation des journaux, reportez-vous à l’étape suivante.{ "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
-
Avant d’activer la vigie applicative pour vos applications Python, tenez compte des considérations suivantes.
Dans certaines applications conteneurisées, l’absence de la variable d’environnement
PYTHONPATHpeut empêcher l’application de démarrer. Pour résoudre ce problème, veillez à définir la variable d’environnementPYTHONPATHsur le répertoire de travail de votre application. Ce problème est lié à un bogue connu de l’instrumentation automatique OpenTelemetry. Pour plus d’informations sur ce problème, consultez la section Le paramètre d’instrumentation automatique Python pour PYTHONPATH n’est pas conforme. Pour les applications Django, des configurations supplémentaires sont nécessaires, comme indiqué dans la documentation OpenTelemetry pour Python
. Utilisez le paramètre
--noreloadpour empêcher le rechargement automatique.Définissez la variable d’environnement
DJANGO_SETTINGS_MODULEsur l’emplacement du fichiersettings.pyde votre application Django. Cela permet à OpenTelemetry d’accéder correctement à vos paramètres Django et de s’y intégrer.
Si vous utilisez un serveur WSGI pour votre application Python, en plus des étapes décrites dans cette section, consultez Aucune donnée de la vigie applicative pour les applications Python qui utilisent un serveur WSGI pour savoir comment configurer la vigie applicative afin qu’elle fonctionne correctement.
Pour instrumenter votre application Python sur Amazon ECS avec l’agent CloudWatch
Spécifiez d’abord un montage lié. Le volume sera utilisé pour partager des fichiers entre conteneurs au cours des prochaines étapes. Vous utiliserez ce montage lié plus tard dans cette procédure.
"volumes": [ { "name": "opentelemetry-auto-instrumentation-python" } ]Ajoutez un nouveau conteneur
inità la définition de tâche de votre application. Remplacez$IMAGEpar la dernière image du référentiel d’images Amazon ECR d’AWS Distro for OpenTelemetry. { "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 } ] }Ajoutez une dépendance au conteneur
initafin de vous assurer que ce conteneur se termine avant le démarrage du conteneur de votre application."dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]Ajoutez les variables d’environnement suivantes à votre conteneur d’application.
Variable d'environnement Configuration pour activer Application Signals OTEL_RESOURCE_ATTRIBUTESSpécifiez les informations suivantes sous forme de paires clé-valeur :
service.namedéfini le nom du service. Il sera affiché comme nom de service pour votre application dans les tableaux de bord d’Application Signals. Si vous ne fournissez pas de valeur pour cette clé, la valeur par défautUnknownServiceest utilisée.deployment.environmentdéfinit l’environnement dans lequel l’application s’exécute. Cet environnement sera affiché comme l’environnement hébergé de votre application dans les tableaux de bord Application Signals. Si vous ne spécifiez rien, la valeur par défautgeneric:defaultsera utilisée.
Cette clé d’attribut n’est utilisée que par Application Signals et est convertie en annotations de suivi X-Ray et en dimensions de métrique CloudWatch.
(Facultatif) Pour activer la corrélation des journaux dans la vigie applicative, définissez une variable d’environnement supplémentaire
aws.log.group.namescorrespondant au nom du groupe de journaux de votre application. Cela permet de corréler les suivis et les métriques de votre application avec les entrées de journaux correspondantes du groupe de journaux. Pour cette variable, remplacez$YOUR_APPLICATION_LOG_GROUPpar le nom du groupe de journaux de votre application. Si vous avez plusieurs groupes de journaux, vous pouvez les séparer à l’aide d’un esperluette (&), comme dans l’exemple suivant :aws.log.group.names=log-group-1&log-group-2. Pour activer la corrélation entre les métriques et les journaux, la définition de cette variable suffit. Pour de plus amples informations, consultez Activation de la corrélation entre métriques et journaux. Pour activer la corrélation entre les suivis et les journaux, vous devez également modifier la configuration de journalisation de votre application. Pour de plus amples informations, consultez Activation de la corrélation entre suivis et journaux.OTEL_AWS_APPLICATION_SIGNALS_ENABLEDDéfinissez sur
truepour que le conteneur commence à envoyer les suivis X-Ray et les métriques CloudWatch à la vigie applicative.OTEL_METRICS_EXPORTERDéfinissez sur
nonepour désactiver les autres exportateurs de mesures.OTEL_EXPORTER_OTLP_PROTOCOLDéfinissez sur
http/protobufpour envoyer des métriques et des suivis à CloudWatch via HTTP.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTEnvoie des métriques au conteneur démon CloudWatch.
Pour les applications exécutées en mode
host, définissez cette variable surhttp://localhost:4316/v1/metrics.Pour les applications exécutées en mode
bridgeou modeawsvpc, définissez cette variable sur http://CW_CONTAINER_IP:4316/v1/metrics, oùCW_CONTAINER_IPcorrespond à l’adresse IP privée de l’instance de conteneur EC2. Vous pouvez extraire cette adresse via le service de métadonnées d’instance (IMDS).
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTEnvoie des suivis au conteneur démon CloudWatch.
Pour les applications exécutées en mode
host, définissez cette variable surhttp://localhost:4316/v1/traces.Pour les applications exécutées en mode
bridgeou modeawsvpc, définissez cette variable sur http://CW_CONTAINER_IP:4316/v1/traces, oùCW_CONTAINER_IPcorrespond à l’adresse IP privée de l’instance de conteneur EC2. Vous pouvez extraire cette adresse via le service de métadonnées d’instance (IMDS).
OTEL_TRACES_SAMPLERDéfinissez cette variable sur
xraypour utiliser X-Ray comme échantillonneur de suivis.OTEL_TRACES_SAMPLER_ARGDéfinit le point de terminaison de l’échantillonneur de suivis.
Pour les applications exécutées en mode
host, définissez cette variable surhttp://localhost:2000.Pour les applications exécutées en mode
bridgeou modeawsvpc, définissez cette variable surhttp://, oùCW_CONTAINER_IP:2000CW_CONTAINER_IPcorrespond à l’adresse IP privée de l’instance de conteneur EC2. Vous pouvez extraire cette adresse via le service de métadonnées d’instance (IMDS).
OTEL_PROPAGATORSAjoutez
xraycomme l’un des propagateurs.OTEL_PYTHON_DISTRODéfinissez sur
aws_distropour utiliser l’instrumentation ADOT Python.OTEL_PYTHON_CONFIGURATORDéfinissez sur
aws_configurationpour utiliser la configuration ADOT Python.PYTHONPATHRemplacez
$APP_PATHpar l’emplacement du répertoire de travail de l’application dans le conteneur. Cela est nécessaire pour que l’interpréteur Python puisse localiser les modules de votre application.DJANGO_SETTINGS_MODULENécessaire uniquement pour les applications Django. Définissez cette variable sur l’emplacement du fichier
settings.pyde votre application Django. Remplacez$PATH_TO_SETTINGS.Montez le volume
opentelemetry-auto-instrumentation-pythonque vous avez défini à l’étape 1 de cette procédure. Si vous n’avez pas besoin d’activer la corrélation des journaux avec les métriques et les suivis, utilisez l’exemple fourni pour une application Python. Si vous souhaitez activer la corrélation des journaux, reportez-vous à l’étape suivante.{ "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 } ] }(Facultatif) Pour activer la corrélation des journaux, procédez comme suit avant de monter le volume. Dans
OTEL_RESOURCE_ATTRIBUTES, définissez une variable d’environnement supplémentaireaws.log.group.namespour les groupes de journaux de votre application. Cela permet de corréler les suivis et les métriques de votre application avec les entrées de journaux correspondantes. Pour cette variable, remplacez$YOUR_APPLICATION_LOG_GROUPpar le nom du groupe de journaux de votre application. Si vous avez plusieurs groupes de journaux, vous pouvez les séparer à l’aide d’un esperluette (&), comme dans l’exemple suivant :aws.log.group.names=log-group-1&log-group-2. Pour activer la corrélation entre les métriques et les journaux, la définition de cette variable suffit. Pour de plus amples informations, consultez Activation de la corrélation entre métriques et journaux. Pour activer la corrélation entre les suivis et les journaux, vous devez également modifier la configuration de journalisation de votre application. Pour de plus amples informations, consultez Activation de la corrélation entre suivis et journaux.Voici un exemple. Pour activer la corrélation des journaux, utilisez cet exemple lorsque vous montez le volume
opentelemetry-auto-instrumentation-pythonque vous avez défini à l’étape 1 de cette procédure.{ "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
-
Pour instrumenter votre application sur Amazon ECS avec l’agent CloudWatch
Spécifiez d’abord un montage lié. Le volume sera utilisé pour partager des fichiers entre conteneurs au cours des prochaines étapes. Vous utiliserez ce montage lié plus tard dans cette procédure.
"volumes": [ { "name": "opentelemetry-auto-instrumentation" } ]Ajoutez un nouveau conteneur
inità la définition de tâche de votre application. Remplacez$IMAGEpar la dernière image du référentiel d’images Amazon ECR d’AWS Distro for OpenTelemetry. Pour une instance de conteneur Linux, utilisez ce qui suit.
{ "name": "init", "image": "$IMAGE", "essential": false, "command": [ "cp", "-a", "autoinstrumentation/.", "/otel-auto-instrumentation" ], "mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation", "containerPath": "/otel-auto-instrumentation", "readOnly": false } ] }Pour une instance de conteneur Windows Server, utilisez ce qui suit.
{ "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 } ] }Ajoutez une dépendance au conteneur
initafin de vous assurer que le conteneur se termine avant le démarrage du conteneur de votre application."dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]Ajoutez les variables d’environnement suivantes à votre conteneur d’application. Vous devez utiliser la version 1.1.0 ou ultérieure de l’agent d’instrumentation automatique AWS Distro for OpenTelemetry pour .NET
. Variable d'environnement Configuration pour activer Application Signals OTEL_RESOURCE_ATTRIBUTESSpécifiez les informations suivantes sous forme de paires clé-valeur :
service.namedéfini le nom du service. Il sera affiché comme nom de service pour votre application dans les tableaux de bord d’Application Signals. Si vous ne fournissez pas de valeur pour cette clé, la valeur par défautUnknownServiceest utilisée.deployment.environmentdéfinit l’environnement dans lequel l’application s’exécute. Cet environnement sera affiché comme l’environnement hébergé de votre application dans les tableaux de bord Application Signals. Si vous ne spécifiez rien, la valeur par défautgeneric:defaultsera utilisée.
Cette clé d’attribut n’est utilisée que par Application Signals et est convertie en annotations de suivi X-Ray et en dimensions de métrique CloudWatch.
OTEL_AWS_APPLICATION_SIGNALS_ENABLEDDéfinissez sur
truepour que le conteneur commence à envoyer les suivis X-Ray et les métriques CloudWatch à la vigie applicative.OTEL_METRICS_EXPORTERDéfinissez sur
nonepour désactiver les autres exportateurs de mesures.OTEL_LOGS_EXPORTERDéfinissez sur
nonepour désactiver les autres exportateurs de journaux.OTEL_EXPORTER_OTLP_PROTOCOLDéfinissez sur
http/protobufpour envoyer les métriques et les suivis à la vigie applicative via HTTP.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTEnvoie des métriques au conteneur démon CloudWatch.
Pour les applications exécutées en mode
host, définissez cette variable surhttp://localhost:4316/v1/metrics.Pour les applications exécutées en mode
bridgeou modeawsvpc, définissez cette variable sur http://CW_CONTAINER_IP:4316/v1/metrics, oùCW_CONTAINER_IPcorrespond à l’adresse IP privée de l’instance de conteneur EC2. Vous pouvez extraire cette adresse via le service de métadonnées d’instance (IMDS).
OTEL_EXPORTER_OTLP_ENDPOINTEnvoie des suivis au conteneur démon CloudWatch.
Pour les applications exécutées en mode
host, définissez cette variable surhttp://localhost:4316.Pour les applications exécutées en mode
bridgeou modeawsvpc, définissez cette variable sur http://CW_CONTAINER_IP:4316, oùCW_CONTAINER_IPcorrespond à l’adresse IP privée de l’instance de conteneur EC2. Vous pouvez extraire cette adresse via le service de métadonnées d’instance (IMDS).
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTEnvoie des suivis au conteneur démon CloudWatch.
Pour les applications exécutées en mode
host, définissez cette variable surhttp://localhost:4316/v1/traces.Pour les applications exécutées en mode
bridgeou modeawsvpc, définissez cette variable sur http://CW_CONTAINER_IP:4316/v1/traces, oùCW_CONTAINER_IPcorrespond à l’adresse IP privée de l’instance de conteneur EC2. Vous pouvez extraire cette adresse via le service de métadonnées d’instance (IMDS).
OTEL_TRACES_SAMPLER_ARGDéfinit le point de terminaison de l’échantillonneur de suivis.
Pour les applications exécutées en mode
host, définissez cette variable surhttp://localhost:2000.Pour les applications exécutées en mode
bridgeou modeawsvpc, définissez cette variable surhttp://, oùCW_CONTAINER_IP:2000CW_CONTAINER_IPcorrespond à l’adresse IP privée de l’instance de conteneur EC2. Vous pouvez extraire cette adresse via le service de métadonnées d’instance (IMDS).
OTEL_DOTNET_AUTO_HOMEDéfinissez-la sur l’emplacement d’installation de l’instrumentation automatique ADOT .NET.
OTEL_DOTNET_AUTO_PLUGINSDéfinissez sur
AWS.Distro.OpenTelemetry.AutoInstrumentation.Plugin, AWS.Distro.OpenTelemetry.AutoInstrumentationpour activer le plug-in de la vigie applicative.CORECLR_ENABLE_PROFILINGDéfinissez sur
1pour activer le profileur.CORECLR_PROFILERDéfinissez sur
{918728DD-259F-4A6A-AC2B-B85E1B658318}comme le CLSID du profileur.CORECLR_PROFILER_PATHDéfinissez cette variable sur le chemin du profileur.
Sous Linux, définissez cette variable sur
${OTEL_DOTNET_AUTO_HOME}/linux-x64/OpenTelemetry.AutoInstrumentation.Native.soSous Windows Server, définissez cette variable sur
${OTEL_DOTNET_AUTO_HOME}/win-x64/OpenTelemetry.AutoInstrumentation.Native.dllDOTNET_ADDITIONAL_DEPSDéfinissez cette variable sur le chemin du dossier de
${OTEL_DOTNET_AUTO_HOME}/AdditionalDeps.DOTNET_SHARED_STOREDéfinissez cette variable sur le chemin du dossier de
${OTEL_DOTNET_AUTO_HOME}/store.DOTNET_STARTUP_HOOKSDéfinissez cette variable sur le chemin de l’ensemble géré
${OTEL_DOTNET_AUTO_HOME}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dllà exécuter avant le point d’entrée de l’application principale.Montez le volume
opentelemetry-auto-instrumentationque vous avez défini à l’étape 1 de cette procédure. Pour Linux, utilisez ce qui suit.{ "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" } ] }Pour Windows Server, utilisez ce qui suit.
{ "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
-
Note
Si vous activez la vigie applicative pour une application Node.js utilisant le format ESM, consultez Setting up a Node.js application with the ESM module format avant de commencer ces étapes.
Pour instrumenter votre application sur Amazon ECS avec l’agent CloudWatch
Spécifiez d’abord un montage lié. Le volume sera utilisé pour partager des fichiers entre conteneurs au cours des prochaines étapes. Vous utiliserez ce montage lié plus tard dans cette procédure.
"volumes": [ { "name": "opentelemetry-auto-instrumentation-node" } ]Ajoutez un nouveau conteneur
inità la définition de tâche de votre application. Remplacez$IMAGEpar la dernière image du référentiel d’images Amazon ECR d’AWS Distro for OpenTelemetry. { "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 } ], }Ajoutez une dépendance au conteneur
initafin de vous assurer que ce conteneur se termine avant le démarrage du conteneur de votre application."dependsOn": [ { "containerName": "init", "condition": "SUCCESS" } ]Ajoutez les variables d’environnement suivantes à votre conteneur d’application.
Variable d'environnement Configuration pour activer Application Signals OTEL_RESOURCE_ATTRIBUTESSpécifiez les informations suivantes sous forme de paires clé-valeur :
service.namedéfini le nom du service. Il sera affiché comme nom de service pour votre application dans les tableaux de bord d’Application Signals. Si vous ne fournissez pas de valeur pour cette clé, la valeur par défautUnknownServiceest utilisée.deployment.environmentdéfinit l’environnement dans lequel l’application s’exécute. Cet environnement sera affiché comme l’environnement hébergé de votre application dans les tableaux de bord Application Signals. Si vous ne spécifiez rien, la valeur par défautgeneric:defaultsera utilisée.
Cette clé d’attribut n’est utilisée que par Application Signals et est convertie en annotations de suivi X-Ray et en dimensions de métrique CloudWatch.
(Facultatif) Pour activer la corrélation des journaux dans la vigie applicative, définissez une variable d’environnement supplémentaire
aws.log.group.namescorrespondant au nom du groupe de journaux de votre application. Cela permet de corréler les suivis et les métriques de votre application avec les entrées de journaux correspondantes du groupe de journaux. Pour cette variable, remplacez$YOUR_APPLICATION_LOG_GROUPpar le nom du groupe de journaux de votre application. Si vous avez plusieurs groupes de journaux, vous pouvez les séparer à l’aide d’un esperluette (&), comme dans l’exemple suivant :aws.log.group.names=log-group-1&log-group-2. Pour activer la corrélation entre les métriques et les journaux, la définition de cette variable suffit. Pour de plus amples informations, consultez Activation de la corrélation entre métriques et journaux. Pour activer la corrélation entre les suivis et les journaux, vous devez également modifier la configuration de journalisation de votre application. Pour de plus amples informations, consultez Activation de la corrélation entre suivis et journaux.OTEL_AWS_APPLICATION_SIGNALS_ENABLEDDéfinissez sur
truepour que le conteneur commence à envoyer les suivis X-Ray et les métriques CloudWatch à la vigie applicative.OTEL_METRICS_EXPORTERDéfinissez sur
nonepour désactiver les autres exportateurs de mesures.OTEL_LOGS_EXPORTERDéfinissez sur
nonepour désactiver les autres exportateurs de journaux.OTEL_EXPORTER_OTLP_PROTOCOLDéfinissez sur
http/protobufpour envoyer des métriques et des suivis à la vigie applicative à l’aide du protocole OTLP/HTTP avec Protobuf.OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINTEnvoie des métriques au conteneur démon CloudWatch.
Pour les applications exécutées en mode
host, définissez cette variable surhttp://localhost:4316/v1/metrics.Pour les applications exécutées en mode
bridgeou modeawsvpc, définissez cette variable sur http://CW_CONTAINER_IP:4316/v1/metrics, oùCW_CONTAINER_IPcorrespond à l’adresse IP privée de l’instance de conteneur EC2. Vous pouvez extraire cette adresse via le service de métadonnées d’instance (IMDS).
OTEL_EXPORTER_OTLP_TRACES_ENDPOINTEnvoie des suivis au conteneur démon CloudWatch.
Pour les applications exécutées en mode
host, définissez cette variable surhttp://localhost:4316/v1/traces.Pour les applications exécutées en mode
bridgeou modeawsvpc, définissez cette variable sur http://CW_CONTAINER_IP:4316/v1/traces, oùCW_CONTAINER_IPcorrespond à l’adresse IP privée de l’instance de conteneur EC2. Vous pouvez extraire cette adresse via le service de métadonnées d’instance (IMDS).
OTEL_TRACES_SAMPLERDéfinissez cette variable sur
xraypour utiliser X-Ray comme échantillonneur de suivis.OTEL_TRACES_SAMPLER_ARGDéfinit le point de terminaison de l’échantillonneur de suivis.
Pour les applications exécutées en mode
host, définissez cette variable surhttp://localhost:2000.Pour les applications exécutées en mode
bridgeou modeawsvpc, définissez cette variable surhttp://, oùCW_CONTAINER_IP:2000CW_CONTAINER_IPcorrespond à l’adresse IP privée de l’instance de conteneur EC2. Vous pouvez extraire cette adresse via le service de métadonnées d’instance (IMDS).
OTEL_PROPAGATORSDéfinissez
xraycomme l’un des propagateurs.NODE_OPTIONSDéfinie sur
--require. RemplacezAWS_ADOT_NODE_INSTRUMENTATION_PATHAWS_ADOT_NODE_INSTRUMENTATION_PATHpar le chemin où est stockée l’instrumentation automatique AWS Distro for OpenTelemetry pour Node.js. Par exemple,/otel-auto-instrumentation-node/autoinstrumentation.jsMontez le volume
opentelemetry-auto-instrumentation-nodeque vous avez défini à l’étape 1 de cette procédure. Si vous n’avez pas besoin d’activer la corrélation des journaux avec les métriques et les suivis, utilisez l’exemple suivant pour une application Node.js. Si vous souhaitez activer la corrélation des journaux, reportez-vous à l’étape suivante.Dans le conteneur de votre application, ajoutez une dépendance sur le conteneur
initafin de vous assurer que ce dernier se termine avant le démarrage de votre conteneur d’application.{ "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" } ] }(Facultatif) Pour activer la corrélation des journaux, procédez comme suit avant de monter le volume. Dans
OTEL_RESOURCE_ATTRIBUTES, définissez une variable d’environnement supplémentaireaws.log.group.namespour les groupes de journaux de votre application. Cela permet de corréler les suivis et les métriques de votre application avec les entrées de journaux correspondantes. Pour cette variable, remplacez$YOUR_APPLICATION_LOG_GROUPpar le nom du groupe de journaux de votre application. Si vous avez plusieurs groupes de journaux, vous pouvez les séparer à l’aide d’un esperluette (&), comme dans l’exemple suivant :aws.log.group.names=log-group-1&log-group-2. Pour activer la corrélation entre les métriques et les journaux, la définition de cette variable suffit. Pour de plus amples informations, consultez Activation de la corrélation entre métriques et journaux. Pour activer la corrélation entre les suivis et les journaux, vous devez également modifier la configuration de journalisation de votre application. Pour de plus amples informations, consultez Activation de la corrélation entre suivis et journaux.Voici un exemple. Utilisez cet exemple pour activer la corrélation des journaux lors du montage du volume
opentelemetry-auto-instrumentationque vous avez défini à l’étape 1 de cette procédure.{ "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" } ] }
Configuration d’une application Node.js utilisant le format de module ESM
Un support limité est disponible pour les applications Node.js utilisant le format de module ESM. Pour en savoir plus, consultez Limitations connues concernant Node.js avec ESM.
Pour le format du module ESM, l’utilisation du conteneur
initpour injecter le kit SDK d’instrumentation Node.js ne s’applique pas. Pour activer la vigie applicative pour Node.js avec ESM, ignorez les étapes 1 et 2 de la procédure précédente et procédez comme suit.Pour activer la vigie applicative pour une application Node.js avec ESM
Installez les dépendances nécessaires à l’instrumentation automatique dans votre application Node.js :
npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0Dans les étapes 4 et 5 de la procédure précédente, supprimez le montage du volume
opentelemetry-auto-instrumentation-node:"mountPoints": [ { "sourceVolume": "opentelemetry-auto-instrumentation-node", "containerPath": "/otel-auto-instrumentation-node", "readOnly": false } ]Remplacez les options du nœud par les options suivantes.
{ "name": "NODE_OPTIONS", "value": "--import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs" }
Étape 6 : déployer votre application
Créez une nouvelle révision de votre définition de tâche et déployez-la dans votre cluster d’applications. Vous devriez voir deux conteneurs dans la tâche nouvellement créée :
init: conteneur requis pour l’initialisation de la vigie applicative: exemple de conteneur d’application dans notre documentation. Dans vos charges de travail réelles, ce conteneur spécifique n’existe peut-être pas ou peut être remplacé par vos propres conteneurs de service.my-app
(Facultatif) Étape 7 : surveiller l’état de votre application
Une fois vos applications activées sur Amazon ECS, vous pouvez surveiller leur état directement dans la vigie applicative. Pour de plus amples informations, consultez Surveillez l’état de fonctionnement de vos applications avec Application Signals.