Activer les signaux d'application sur les plateformes Kubernetes - Amazon CloudWatch

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 les signaux d'application sur les plateformes Kubernetes

Pour activer les applications exécutées sur des systèmes Kubernetes autres qu'AmazonEKS, suivez les instructions de cette section. Application Signals prend en charge Java, Python et. NETapplications.

Prérequis

  • Vous disposez d'une autorisation d'administrateur sur le cluster Kubernetes dans lequel vous activez les signaux d'application.

  • 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.

  • Kubectl et helm sont installés sur votre terminal local. Pour plus d'informations, consultez la documentation de kubectl et Helm.

Étape 1 : activer Application Signals dans votre compte

Si vous n’avez pas encore activé Application Signals dans ce compte, vous devez accorder à Application Signals les autorisations nécessaires pour découvrir vos services. Pour ce faire, procédez comme suit. Cette opération ne doit être effectuée qu’une seule fois par compte.

Pour activer Application Signals pour vos applications
  1. Ouvrez la CloudWatch console à l'adresse https://console.aws.amazon.com/cloudwatch/.

  2. Dans le panneau de navigation, choisissez Services.

  3. Choisissez Commencer à découvrir vos services.

  4. Cochez la case et choisissez Commencer à découvrir vos services.

    Lorsque vous effectuez cette étape pour la première fois dans votre compte, Application Signals crée le rôle AWSServiceRoleForCloudWatchApplicationSignalslié au service. Ce rôle accorde à Application Signals les autorisations suivantes :

    • xray:GetServiceGraph

    • logs:StartQuery

    • logs:GetQueryResults

    • cloudwatch:GetMetricData

    • cloudwatch:ListMetrics

    • tag:GetResources

    Pour plus d’informations sur ce rôle, consultez Autorisations de rôle liées au service pour les signaux d'application CloudWatch .

É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 $REGION avec votre AWS région. Remplacez $YOUR_CLUSTER_NAME avec 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-observabilityci-dessous GitHub.

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

Important

Si votre cluster Kubernetes est hébergé sur AmazonEC2, vous pouvez ignorer cette section et passer à. Étape 4 : Ajouter des 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éez l'IAMutilisateur à utiliser pour fournir des autorisations à votre hôte local :

    1. Ouvrez la IAM console à l'adresse https://console.aws.amazon.com/iam/.

    2. Choisissez Utilisateurs, puis Créer un utilisateur.

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

    4. Sur la page Définir les autorisations, sous Options d'autorisations, sélectionnez Joindre directement les politiques.

    5. Dans la liste des politiques d'autorisation, sélectionnez la CloudWatchAgentServerPolicypolitique à ajouter à votre utilisateur. Ensuite, sélectionnez Suivant.

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

    7. Choisissez Créer un utilisateur

  2. 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 IAM console, choisissez Utilisateurs, puis sélectionnez le nom d'utilisateur de l'utilisateur que vous avez créé à l'étape précédente.

    2. Sur la page de l'utilisateur, choisissez l'onglet Informations d'identification de sécurité. Ensuite, dans la section Clés d'accès, choisissez Créer une clé d'accès.

    3. Pour l'étape 1 de création d'une clé d'accès, choisissez Command Line Interface (CLI).

    4. Pour l'étape 2 de création d'une clé d'accès, entrez éventuellement une balise, puis choisissez Next.

    5. Pour l'étape 3 de création d'une clé d'accès, 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 IAM utilisateur. Vous avez besoin de ces informations pour les prochaines étapes.

    6. Sélectionnez Exécuté.

  3. Configurez vos AWS informations d'identification sur votre hôte local en saisissant la commande suivante. Remplacez ACCESS_KEY_ID and SECRET_ACCESS_ID avec 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
  4. 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
  5. 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 les signaux d'application pour une application Node.js avecESM, ignorez les étapes de cette section et consultez plutôt.

L'étape suivante consiste à instrumenter votre application pour les CloudWatch signaux d'application en ajoutant une annotation spécifique au langage à votre charge de travail ou à votre espace de noms Kubernetes. Cette annotation permet à votre application d'envoyer automatiquement des métriques, des traces et des journaux à Application Signals.

Pour ajouter les annotations pour les signaux d'application
  1. Vous avez deux options pour l’annotation :

    • Annotate Workload instrumente automatiquement une charge de travail unique 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.

  2. Pour annoter une seule charge de travail, entrez l'une des commandes suivantes. Remplacez $WORKLOAD_TYPE and $WORKLOAD_NAME avec 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 une fois les signaux d'application activés.

    • Pour. NETcharges de travail :

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

      Pour activer les signaux d'application pour un. NETcharge de travail sur les images basées sur Alpine Linux (linux-musl-x64), ajoutez 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"}}}}}'
  3. Pour annoter toutes les charges de travail dans un espace de noms, entrez l'une des commandes suivantes. Remplacez $NAMESPACE avec le nom de votre espace de noms.

    Si l'espace de noms inclut Java, Python et. NETcharges de travail, ajoutez 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 une fois les signaux d'application activés.

    • Pour. NETcharges de travail 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
  4. 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 Application Signals. 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.

Configuration d'une application Node.js au format ESM module

Nous fournissons un support limité pour les applications Node.js au format ESM module. Pour plus de détails, consultez Limitations connues concernant Node.js avec ESM.

Pour le format du ESM module, l'activation des signaux d'application en annotant le fichier manifeste ne fonctionne pas. Ignorez la procédure précédente et procédez comme suit à la place :

Pour activer les signaux d'application pour une application Node.js avec ESM
  1. Installez les dépendances pertinentes dans votre application Node.js pour l'autoinstrumentation :

    npm install @aws/aws-distro-opentelemetry-node-autoinstrumentation npm install @opentelemetry/instrumentation@0.54.0
  2. Ajoutez les variables environnementales suivantes au Dockerfile de votre application et créez 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"]
  3. Ajoutez les variables environnementalesOTEL_RESOURCE_ATTRIBUTES_POD_NAME, OTEL_RESOURCE_ATTRIBUTES_NODE_NAMEOTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME, POD_NAMESPACE et OTEL_RESOURCE_ATTRIBUTES au fichier yaml de déploiement de l'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)"
  4. Déployez l'application Node.js sur le cluster Kubernetes.