Activation de vos applications sur des clusters Amazon EKS - Amazon CloudWatch

Activation de vos applications sur des clusters Amazon EKS

La vigie applicative CloudWatch est compatible avec les applications Java, Python, Node.js et .NET. Pour activer la vigie applicative pour vos applications sur un cluster Amazon EKS existant, vous pouvez utiliser AWS Management Console, AWS CDK ou la configuration avancée de surveillance automatique du module complémentaire d’observabilité CloudWatch.

Activation de la vigie applicative sur un cluster Amazon EKS à l’aide de la console

Pour activer la vigie applicative CloudWatch sur vos applications dans un cluster Amazon EKS existant, suivez les instructions de cette section.

Important

Si vous utilisez déjà OpenTelemetry avec une application que vous avez l’intention d’activer pour Application Signals, veuillez consulter la rubrique Systèmes pris en charge avant d’activer Application Signals.

Pour activer Application Signals pour vos applications sur un cluster Amazon EKS existant
Note

Si vous n’avez pas encore activé la vigie applicative, suivez d’abord les instructions indiquées dans la section Activation de la vigie applicative dans votre compte, puis suivez la procédure ci-dessous.

  1. Ouvrez la console CloudWatch à l’adresse https://console.aws.amazon.com/cloudwatch/.

  2. Sélectionnez Vigie applicative.

  3. Pour Spécifier la plateforme, choisissez EKS.

  4. Pour Sélectionner un cluster EKS, sélectionnez le cluster dans lequel vous souhaitez activer Application Signals.

  5. Si le module complémentaire EKS Amazon CloudWatch Observability n’est pas encore activé sur ce cluster, vous êtes invité à l’activer. Dans ce cas, vous pouvez procéder de l’une des façons suivantes :

    1. Choisissez Ajouter le module complémentaire∘EKS CloudWatch Observability. La console Amazon EKS apparaît.

    2. Cochez la case Amazon CloudWatch Observability et choisissez Suivant.

      Le module complémentaire∘EKS CloudWatch Observability permet à la fois à Application Signals et à CloudWatch Container Insights de bénéficier de l’observabilité améliorée pour Amazon EKS. Pour plus d'informations sur Container Insights, consultez Container Insights.

    3. Sélectionnez la version la plus récente du module complémentaire à installer.

    4. Sélectionnez un rôle IAM à utiliser pour le module complémentaire. Si vous choisissez Hériter du nœud, attachez les autorisations appropriées au rôle IAM utilisé par vos composants master. Remplacez my-worker-node-role par le rôle IAM utilisé par vos composants master Kubernetes.

      aws iam attach-role-policy \ --role-name my-worker-node-role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --policy-arn arn:aws:iam::aws:policy/AWSXRayWriteOnlyAccess
    5. Si vous souhaitez créer une fonction du service pour utiliser le module complémentaire, veuillez consulter Installation de l’agent CloudWatch à l’aide du module complémentaire EKS d’observabilité Amazon CloudWatch ou des Charts de Helm.

    6. Choisissez Suivant, confirmez les informations affichées à l’écran, puis choisissez Créer.

    7. Dans l’écran suivant, choisissez Activer CloudWatch Application Signals pour revenir à la console CloudWatch et terminer le processus.

  6. Il existe deux options pour activer vos applications pour la vigie applicative. Pour plus de cohérence, il est recommandé de choisir une seule option par cluster.

    • L’option Console est plus simple. L’utilisation de cette méthode entraîne le redémarrage immédiat de vos pods.

    • La méthode Fichier manifeste annoté vous permet de mieux contrôler le moment où vos pods redémarrent et peut également vous aider à gérer votre surveillance de manière plus décentralisée si vous ne souhaitez pas la centraliser.

    Note

    Si vous activez la vigie applicative pour une application Node.js utilisant le format ESM, passez directement à Configuration d’une application Node.js utilisant le format de module ESM.

    Console

    L’option Console utilise la configuration avancée du module complémentaire EKS d’observabilité Amazon CloudWatch pour configurer la vigie applicative pour vos services. Pour plus d’informations sur le module complémentaire, consultez (Facultatif) Configuration supplémentaire.

    Si la liste des charges de travail et des espaces de noms ne s’affiche pas, assurez-vous de disposer des autorisations appropriées pour accéder à ces ressources dans ce cluster. Pour plus de détails, consultez la section Autorisations requises.

    Vous pouvez soit surveiller toutes les charges de travail des services en cochant la case Surveillance automatique, soit sélectionner des charges de travail et des espaces de noms spécifiques à surveiller.

    Pour activer la surveillance automatique de toutes les charges de travail, procédez comme suit :

    1. Cochez la case Surveillance automatique pour sélectionner automatiquement toutes les charges de travail du service dans le cluster.

    2. Sélectionnez Redémarrage automatique pour redémarrer immédiatement tous les pods des charges de travail, afin d’activer la vigie applicative avec les kits SDK d’instrumentation automatique AWS Distro for OpenTelemetry (ADOT) injectés dans vos pods.

    3. Sélectionnez Exécuté. Lorsque le Redémarrage automatique est sélectionné, le module complémentaire EKS d’observabilité CloudWatch active immédiatement la vigie applicative. Sinon, la vigie applicative sera activé lors du prochain déploiement de chaque charge de travail.

    Vous pouvez surveiller une charge de travail unique ou un espace de noms entier.

    Pour surveiller une seule charge de travail :

    1. Cochez la case correspondant à la charge de travail que vous souhaitez surveiller.

    2. Utilisez la liste déroulante Sélectionner langage(s) pour sélectionner le langage de la charge de travail. Sélectionnez le ou les langages pour lesquels vous souhaitez activer la vigie applicative, puis cliquez sur l’icône en forme de coche (✓) pour enregistrer votre sélection.

      Pour les applications Python, assurez-vous que votre application répond aux prérequis avant de continuer. Pour de plus amples informations, consultez L’application Python ne démarre pas après l’activation de la vigie applicative.

    3. Sélectionnez Exécuté. Le module complémentaire EKS d’observabilité Amazon CloudWatch injectera immédiatement les kits SDK AWS Distro for OpenTelemetry (ADOT) dans vos pods et déclenchera le redémarrage des pods pour permettre la collecte des métriques et des suivis de l’application.

    Pour surveiller un espace de noms complet :

    1. Cochez la case correspondant à l’espace de noms que vous souhaitez surveiller.

    2. Utilisez la liste déroulante Sélectionner langage(s) pour sélectionner le langage de l’espace de noms. Sélectionnez le ou les langages pour lesquels vous souhaitez activer la vigie applicative, puis cliquez sur l’icône en forme de coche (✓) pour enregistrer votre sélection. Cela s’applique à toutes les charges de travail de cet espace de noms, qu’elles soient actuellement déployées ou déployées ultérieurement.

      Pour les applications Python, assurez-vous que votre application répond aux prérequis avant de continuer. Pour de plus amples informations, consultez L’application Python ne démarre pas après l’activation de la vigie applicative.

    3. Sélectionnez Exécuté. Le module complémentaire EKS d’observabilité Amazon CloudWatch injectera immédiatement les kits SDK AWS Distro for OpenTelemetry (ADOT) dans vos pods et déclenchera le redémarrage des pods pour permettre la collecte des métriques et des suivis de l’application.

    Pour activer Application Signals dans un autre cluster Amazon EKS, choisissez Activer Application Signals dans l’écran Services.

    Annotate manifest file

    Dans la console CloudWatch, la section Services de surveillance explique qu’il faut ajouter une annotation dans un fichier manifeste YAML du cluster. L’ajout de cette annotation permet à l’application d’envoyer automatiquement des métriques, des suivis et des journaux à Application Signals.

    Vous avez deux options pour l’annotation :

    • Annoter une charge de travail instrumente automatiquement une seule charge de travail dans le 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 :

    • Pour annoter une seule charge de travail :

      1. Choisissez Annoter la charge de travail.

      2. Collez l’une des lignes suivantes dans la section PodTemplate du fichier manifeste de la charge de travail :

        • Pour les charges de travail Java : annotations: instrumentation.opentelemetry.io/inject-java: "true"

        • Pour les charges de travail Python : annotations: instrumentation.opentelemetry.io/inject-python: "true"

          Pour les applications Python, des configurations supplémentaires sont requises. Pour de plus amples informations, consultez L’application Python ne démarre pas après l’activation de la vigie applicative.

        • Pour les charges de travail .NET annotations: instrumentation.opentelemetry.io/inject-dotnet: "true"

          Note

          Pour activer la vigie applicative pour une charge de travail .NET exécutée sur des images basées sur Alpine Linux (linux-musl-x64), ajoutez l’annotation suivante :

          instrumentation.opentelemetry.io/otel-dotnet-auto-runtime: "linux-musl-x64"
        • Pour les charges de travail Node.js : annotations: instrumentation.opentelemetry.io/inject-nodejs: "true"

      3. Dans votre terminal, saisissez kubectl apply -f your_deployment_yaml pour appliquer la modification.

    • Pour annoter toutes les charges de travail dans un espace de noms :

      1. Choisissez Annoter l’espace de noms.

      2. Collez l’une des lignes suivantes dans la section des métadonnées du fichier manifeste de l’espace de noms. Si l’espace de noms contient des charges de travail Java, Python, .NET ou Node.js, insérez toutes les lignes suviantes dans le fichier manifeste de l’espace de noms :

        • Si l’espace de noms contient des charges de travail Java : annotations: instrumentation.opentelemetry.io/inject-java: "true"

        • Si l’espace de noms contient des charges de travail Python : annotations: instrumentation.opentelemetry.io/inject-python: "true"

          Pour les applications Python, des configurations supplémentaires sont requises. Pour de plus amples informations, consultez L’application Python ne démarre pas après l’activation de la vigie applicative.

        • Si l’espace de noms contient des charges de travail .NET : annotations: instrumentation.opentelemetry.io/inject-dotnet: "true"

        • Si l’espace de noms contient des charges de travail Node.js : annotations: instrumentation.opentelemetry.io/inject-nodejs: "true"

      3. Dans votre terminal, saisissez kubectl apply -f your_namespace_yaml pour appliquer la modification.

      4. Dans votre terminal, saisissez une commande pour redémarrer tous les pods de l’espace de noms. Voici un exemple de commande pour redémarrer les charges de travail de déploiement : kubectl rollout restart deployment -n namespace_name

  7. Choisissez Afficher les services lorsque vous avez terminé. Cela vous amène à la vue Services d’Application Signals, où vous pouvez voir les données collectées par Application Signals. Les données peuvent prendre quelques minutes pour s’afficher.

    Pour activer Application Signals dans un autre cluster Amazon EKS, choisissez Activer Application Signals dans l’écran Services.

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

Note

Si vous utilisez un serveur WSGI pour votre application Python, consultez Aucune donnée de la vigie applicative pour les applications Python qui utilisent un serveur WSGI pour connaître les étapes nécessaires à la compatibilité avec la vigie applicative.

D’autres points importants concernant la configuration des applications Python pour la vigie applicative sont également détaillés dans cette documentation. Pour de plus amples informations, consultez L’application Python ne démarre pas après l’activation de la vigie applicative.

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’activation de la vigie applicative via la console ou par annotation du fichier manifeste n’est pas prise en charge. Ignorez l’étape 8 de la procédure précédente et procédez plutôt comme suit.

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
  2. 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"]
  3. 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 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.

Une fois vos applications activées sur les clusters Amazon EKS, vous pouvez surveiller leur état. Pour de plus amples informations, consultez Surveillez l’état de fonctionnement de vos applications avec Application Signals.

Activation de la vigie applicative sur un cluster Amazon EKS à l’aide de la configuration avancée du module complémentaire d’observabilité CloudWatch

À partir de la version v4.0.0-eksbuild.1 du module complémentaire Amazon EKS d’observabilité CloudWatch, vous pouvez activer automatiquement la vigie applicative pour toutes les charges de travail de service de vos clusters EKS grâce à un nouveau paramètre de surveillance automatique centralisée dans la configuration avancée du module complémentaire.

Pour choisir la fonctionnalité de surveillance automatique, vous devez modifier la configuration avancée lors de la création ou de la mise à jour du module complémentaire ou des Charts de Helm. En définissant monitorAllServices sur « true », le module complémentaire d’observabilité CloudWatch détecte automatiquement toutes les charges de travail de service Kubernetes et tente d’injecter automatiquement les kits SDK AWS Distro for OpenTelemetry (ADOT) pendant le déploiement. De plus, en activant restartPods, tous les pods des charges de travail de service sont redémarrés automatiquement afin d’injecter immédiatement les kits SDK ADOT dans le cadre d’un processus de redéploiement automatisé.

--configuration-values '{ "manager":{ "applicationSignals":{ "autoMonitor":{ "monitorAllServices":true, "restartPods":true } } } }'

Le module complémentaire d’observabilité CloudWatch offre également un contrôle plus précis, permettant d’inclure ou d’exclure certains services au besoin dans la nouvelle configuration avancée. Pour plus d’informations, consultez Configuration de la vigie applicative pour votre cluster Amazon EKS .

Activation de la vigie applicative sur Amazon EKS à l’aide d’AWS CDK

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. Consultez Activation de la vigie applicative dans votre compte.

  1. Activation de la vigie applicative pour vos applications.

    import { aws_applicationsignals as applicationsignals } from 'aws-cdk-lib'; const cfnDiscovery = new applicationsignals.CfnDiscovery(this, 'ApplicationSignalsServiceRole', { } );

    La ressource Discovery CloudFormation accorde à la vigie applicative 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é à un service pour CloudWatch Application Signals.

  2. Installez le module complémentaire amazon-cloudwatch-observability.

    1. Créez un rôle IAM avec la CloudWatchAgentServerPolicy et l’OIDC associés au cluster.

      const cloudwatchRole = new Role(this, 'CloudWatchAgentAddOnRole', { assumedBy: new OpenIdConnectPrincipal(cluster.openIdConnectProvider), managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName('CloudWatchAgentServerPolicy')], });
  3. Installez le module complémentaire avec le rôle IAM créé ci-dessus.

    new CfnAddon(this, 'CloudWatchAddon', { addonName: 'amazon-cloudwatch-observability', clusterName: cluster.clusterName, serviceAccountRoleArn: cloudwatchRole.roleArn });
  4. Ajoutez l’une des lignes suivantes dans la section PodTemplate du fichier manifeste de votre charge de travail.

    Langue Fichier

    Java

    instrumentation.opentelemetry.io/inject-java : « true »

    Python

    instrumentation.opentelemetry.io/inject-python : « true »

    .Net

    instrumentation.opentelemetry.io/inject-dotnet : « true »

    Node.js

    instrumentation.opentelemetry.io/inject-nodejs : « true »

    const deployment = { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "sample-app" }, spec: { replicas: 3, selector: { matchLabels: { "app": "sample-app" } }, template: { metadata: { labels: { "app": "sample-app" }, annotations: { "instrumentation.opentelemetry.io/inject-$LANG": "true" } }, spec: {...}, }, }, }; cluster.addManifest('sample-app', deployment)