

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Activer vos applications sur Kubernetes


Activez les signaux CloudWatch d'application sur Kubernetes en suivant les étapes de configuration personnalisées décrites dans cette section.

Pour les applications exécutées sur Kubernetes, vous devez installer et configurer vous-même l' CloudWatch agent et AWS Distro. OpenTelemetry Sur ces architectures activées avec une configuration personnalisée d’Application Signals, Application Signals ne découvre pas automatiquement les noms de vos services ni les hôtes ou clusters sur lesquels ils s’exécutent. Vous devez spécifier ces noms lors de la configuration personnalisée, et les noms que vous spécifiez sont ceux qui sont affichés sur les tableaux de bord d’Application Signals.

**Exigences**
+ Vous devez disposer de l’autorisation d’administrateur sur le cluster Kubernetes sur lequel vous activez la vigie applicative.
+ Vous devez l'avoir AWS CLI installé sur l'environnement dans lequel votre cluster Kubernetes est exécuté. Pour plus d'informations sur l'installation du AWS CLI, voir [Installer ou mettre à jour la dernière version du AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).
+ Vous devez avoir installé kubectl et helm sur votre terminal local. Pour plus d’informations, consultez la documentation [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) et [Helm](https://helm.sh/).

## É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](CloudWatch-Application-Signals-Enable.md).

## Étape 2 : Installation de l'opérateur CloudWatch agent dans votre cluster


L'installation de l'opérateur CloudWatch agent installe l'opérateur, l' CloudWatch agent et d'autres instruments automatiques dans votre cluster. Pour ce faire, entrez la commande suivante. Remplacez *\$1REGION* par votre AWS région. *\$1YOUR\$1CLUSTER\$1NAME*Remplacez-le par le nom que vous souhaitez voir apparaître pour votre cluster dans les tableaux de bord des signaux d'application.

```
helm repo add aws-observability https://aws-observability.github.io/helm-charts
helm install amazon-cloudwatch-operator aws-observability/amazon-cloudwatch-observability \
--namespace amazon-cloudwatch --create-namespace \
--set region=$REGION \
--set clusterName=$YOUR_CLUSTER_NAME
```

Pour plus d'informations, voir [ amazon-cloudwatch-observability](https://github.com/aws-observability/helm-charts/tree/main/charts/amazon-cloudwatch-observability)ci-dessous GitHub.

## Étape 3 : configurer les AWS informations d'identification pour vos clusters Kubernetes


**Important**  
Si votre cluster Kubernetes est hébergé sur Amazon EC2, vous pouvez ignorer cette section et passer à [Étape 4 : ajouter des annotations](#Application-Signals-Enable-Kubernetes-annotations).

Si votre cluster Kubernetes est hébergé sur site, vous devez suivre les instructions de cette section pour ajouter des informations d' AWS identification à votre environnement Kubernetes.

**Pour configurer les autorisations pour un cluster Kubernetes sur site**

1. Créer l’utilisateur IAM destiné à fournir les autorisations à votre hôte sur site :

   1. Ouvrez la console IAM à l’adresse [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Sélectionnez **Utilisateurs**, **Créer un utilisateur**.

   1. Dans **Détails de l’utilisateur**, pour **Nom d’utilisateur**, saisissez un nom pour le nouvel utilisateur IAM. Il s'agit du nom de connexion AWS qui sera utilisé pour authentifier votre hôte. Ensuite, sélectionnez **Next**

   1. Sur la page **Définir les autorisations**, pour les **Options des autorisations**, sélectionnez **Attacher directement les politiques**.

   1. Dans la liste des **politiques d'autorisation**, sélectionnez la **CloudWatchAgentServerPolicy**politique à ajouter à votre utilisateur. Ensuite, sélectionnez **Suivant**.

   1. Sur la page **Réviser et créer**, assurez-vous que vous êtes satisfait du nom d'utilisateur et que la **CloudWatchAgentServerPolicy**politique figure dans le **résumé des autorisations**.

   1. Sélectionnez **Créer un utilisateur**

1. Créez et récupérez votre clé AWS d'accès et votre clé secrète :

   1. Dans le volet de navigation de la console IAM, sélectionnez **Utilisateurs**, puis le nom d’utilisateur que vous avez créé à l’étape précédente.

   1.  Sur la page de l’utilisateur, ouvrez l’onglet **Informations d’identification de sécurité**. Ensuite, dans la section **Clés d’accès**, sélectionnez **Créer une clé d’accès**.

   1. Pour **Créer une clé d’accès – Étape 1**, sélectionnez **Interface de ligne de commande (CLI)**.

   1. Pour **Créer une clé d’accès – Étape 2**, ajoutez éventuellement une balise puis cliquez sur **Suivant**.

   1. Pour **Créer une clé d’accès – Étape 3**, sélectionnez **Télécharger le fichier .csv** pour enregistrer un fichier .csv avec la clé d’accès et la clé d’accès secrète de votre utilisateur IAM. Vous aurez besoin de ces informations pour l’étape suivante.

   1. Sélectionnez **Exécuté**.

1. Configurez vos AWS informations d'identification sur votre hôte local en saisissant la commande suivante. Remplacez *ACCESS\$1KEY\$1ID* et *SECRET\$1ACCESS\$1ID* par votre clé d'accès et votre clé d'accès secrète nouvellement générées à partir du fichier .csv que vous avez téléchargé à l'étape précédente. Par défaut, le fichier d’informations d’identification est enregistré dans `/home/user/.aws/credentials.`

   ```
   $ aws configure --profile AmazonCloudWatchAgent
   AWS Access Key ID [None]: ACCESS_KEY_ID
   AWS Secret Access Key [None]: SECRET_ACCESS_ID
   Default region name [None]: MY_REGION
   Default output format [None]: json
   ```

1. Modifiez la ressource personnalisée installée par l' CloudWatch agent à l'aide du graphique Helm pour ajouter le secret AWS d'identification nouvellement créé.

   ```
   kubectl edit amazoncloudwatchagent cloudwatch-agent -n amazon-cloudwatch
   ```

1. Lorsque votre éditeur de fichiers est ouvert, montez les AWS informations d'identification dans le conteneur de l' CloudWatch agent en ajoutant la configuration suivante en haut du déploiement. Remplacez le chemin `/home/user/.aws/credentials` par l'emplacement de votre fichier d' AWS informations d'identification local.

   ```
   apiVersion: cloudwatch.aws.amazon.com/v1alpha1
   kind: AmazonCloudWatchAgent
   metadata:
     name: cloudwatch-agent
     namespace: amazon-cloudwatch
   spec:
     volumeMounts:
     - mountPath: /rootfs
       volumeMounts:
       - name: aws-credentials
         mountPath: /root/.aws
         readOnly: true
       volumes:
       - hostPath:
         path: /home/user/.aws/credentials
       name: aws-credentials
   ---
   ```

## Étape 4 : ajouter des annotations


**Note**  
Si vous activez la vigie applicative pour une application Node.js avec ESM, veuillez ignorer les étapes de cette section et consulter plutôt [Configuration d’une application Node.js utilisant le format de module ESM](#Kubernetes-NodeJs-ESM).

[https://kubernetes.io/docs/concepts/workloads/](https://kubernetes.io/docs/concepts/workloads/) Cette annotation instrumente automatiquement votre application pour envoyer des métriques, des traces et des journaux à la vigie applicative.

**Pour ajouter les annotations pour la vigie applicative**

1. Vous avez deux options pour l’annotation :
   + **Annoter la charge de travail** instrumente automatiquement une seule charge de travail dans un cluster.
   + **Annoter l’espace de noms** permet d’instrumenter automatiquement toutes les charges de travail déployées dans l’espace de noms sélectionné.

   Choisissez l’une de ces options, puis suivez les étapes appropriées.

1. Pour annoter une seule charge de travail, entrez l’une des commandes suivantes. Remplacez *\$1WORKLOAD\$1TYPE* et *\$1WORKLOAD\$1NAME* par les valeurs correspondant à votre charge de travail.
   + Pour les charges de travail Java :

     ```
     kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-java": "true"}}}}}'
     ```
   + Pour les charges de travail Python :

     ```
     kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-python": "true"}}}}}'
     ```

     Pour les applications Python, des configurations supplémentaires sont requises. Pour de plus amples informations, veuillez consulter [L’application Python ne démarre pas après l’activation de la vigie applicative](CloudWatch-Application-Signals-Enable-Troubleshoot.md#Application-Signals-troubleshoot-starting-Python).
   + Pour les charges de travail .NET :

     ```
     kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-dotnet": "true"}}}}}'
     ```
**Note**  
Pour activer la vigie applicative pour une charge de travail .NET sur des images basées sur Alpine Linux (`linux-musl-x64`), veuillez ajouter l’annotation supplémentaire suivante.  

     ```
     instrumentation.opentelemetry.io/otel-dotnet-auto-runtime: "linux-musl-x64"
     ```
   + Pour les charges de travail Node.js :

     ```
     kubectl patch $WORKLOAD_TYPE $WORKLOAD_NAME -p '{"spec": {"template": {"metadata": {"annotations": {"instrumentation.opentelemetry.io/inject-nodejs": "true"}}}}}'
     ```

1. Pour annoter toutes les charges de travail d’un espace de noms, veuillez saisir l’une des commandes suivantes. Remplacez *\$1NAMESPACE* par le nom de votre espace de noms.

   Si l’espace de noms comprend des charges de travail Java, Python et .NET, veuillez ajouter toutes les annotations à l’espace de noms.
   + Pour les charges de travail Java dans l’espace de noms :

     ```
     kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-java=true
     ```
   + Pour les charges de travail Python dans l’espace de noms :

     ```
     kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-python=true
     ```

     Pour les applications Python, des configurations supplémentaires sont requises. Pour de plus amples informations, veuillez consulter [L’application Python ne démarre pas après l’activation de la vigie applicative](CloudWatch-Application-Signals-Enable-Troubleshoot.md#Application-Signals-troubleshoot-starting-Python).
   + Pour les charges de travail .NET dans l’espace de noms :

     ```
     kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-dotnet=true
     ```
   + Pour les charges de travail Node.js dans l’espace de noms :

     ```
     kubectl annotate ns $NAMESPACE instrumentation.opentelemetry.io/inject-nodejs=true
     ```

   Après avoir ajouté les annotations, redémarrez tous les pods de l’espace de noms en saisissant la commande suivante :

   ```
   kubectl rollout restart
   ```

1. Lorsque les étapes précédentes sont terminées, dans la CloudWatch console, choisissez **Application Signals**, **Services**. Cela ouvre les tableaux de bord où vous pouvez voir les données collectées par la vigie applicative CloudWatch. Les données peuvent prendre quelques minutes pour s’afficher.

   Pour plus d’informations sur la vue **Services**, veuillez consulter [Surveillez l’état de fonctionnement de vos applications avec Application Signals](Services.md).

### 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](CloudWatch-Application-Signals-supportmatrix.md#ESM-limitations).

Pour le format de module ESM, l’activation de la vigie applicative en annotant le fichier manifeste ne fonctionne pas. Sautez la procédure précédente et procédez comme suit à la place :

**Pour activer la vigie applicative pour une application Node.js avec ESM**

1. 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.0
   ```

1. Ajoutez les variables d’environnement suivantes au Dockerfile de votre application, puis construisez l’image.

   ```
   ...
   ENV OTEL_AWS_APPLICATION_SIGNALS_ENABLED=true
   ENV OTEL_TRACES_SAMPLER_ARG='endpoint=http://cloudwatch-agent.amazon-cloudwatch:2000'
   ENV OTEL_TRACES_SAMPLER='xray'
   ENV OTEL_EXPORTER_OTLP_PROTOCOL='http/protobuf'
   ENV OTEL_EXPORTER_OTLP_TRACES_ENDPOINT='http://cloudwatch-agent.amazon-cloudwatch:4316/v1/traces'
   ENV OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT='http://cloudwatch-agent.amazon-cloudwatch:4316/v1/metrics'
   ENV OTEL_METRICS_EXPORTER='none'
   ENV OTEL_LOGS_EXPORTER='none'
   ENV NODE_OPTIONS='--import @aws/aws-distro-opentelemetry-node-autoinstrumentation/register --experimental-loader=@opentelemetry/instrumentation/hook.mjs'
   ENV OTEL_SERVICE_NAME='YOUR_SERVICE_NAME' #replace with a proper service name
   ENV OTEL_PROPAGATORS='tracecontext,baggage,b3,xray'
   ...
   
   # command to start the application
   # for example
   # CMD ["node", "index.mjs"]
   ```

1. Ajoutez les variables d’environnement `OTEL_RESOURCE_ATTRIBUTES_POD_NAME`, `OTEL_RESOURCE_ATTRIBUTES_NODE_NAME`, `OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME`, `POD_NAMESPACE` et `OTEL_RESOURCE_ATTRIBUTES` au fichier YAML de déploiement de votre application. Par exemple :

   ```
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: nodejs-app
     labels:
       app: nodejs-app
   spec:
     replicas: 2
     selector:
       matchLabels:
         app: nodejs-app
     template:
       metadata:
         labels:
           app: nodejs-app
         # annotations:
         # make sure this annotation doesn't exit
         #   instrumentation.opentelemetry.io/inject-nodejs: 'true'
       spec:
         containers:
         - name: nodejs-app
           image:your-nodejs-application-image #replace it with a proper image uri
           imagePullPolicy: Always
           ports:
           - containerPort: 8000
           env:
             - name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME
               valueFrom:
                 fieldRef:
                   fieldPath: metadata.name
             - name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME
               valueFrom:
                 fieldRef:
                   fieldPath: spec.nodeName
             - name: OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME
               valueFrom:
                 fieldRef:
                   fieldPath: metadata.labels['app'] # Assuming 'app' label is set to the deployment name
             - name: POD_NAMESPACE
               valueFrom:
                 fieldRef:
                   fieldPath: metadata.namespace
             - name: OTEL_RESOURCE_ATTRIBUTES
               value: "k8s.deployment.name=$(OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME),k8s.namespace.name=$(POD_NAMESPACE),k8s.node.name=$(OTEL_RESOURCE_ATTRIBUTES_NODE_NAME),k8s.pod.name=$(OTEL_RESOURCE_ATTRIBUTES_POD_NAME)"
   ```

1. Déployez l’application Node.js sur le cluster Kubernetes.

## (Facultatif) Étape 5 : surveiller l’état de votre application


Une fois que vous avez activé vos applications sur Kubernetes, vous pouvez surveiller l’état de votre application. Pour de plus amples informations, veuillez consulter [Surveillez l’état de fonctionnement de vos applications avec Application Signals](Services.md).