Activer vos applications sur Kubernetes
Activez la vigie applicative CloudWatch sur Kubernetes en suivant les étapes de configuration personnalisée décrites dans cette section.
Pour les applications exécutées sur Kubernetes, vous devez installer et configurer vous-même l’agent CloudWatch et AWS Distro for 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.
Prérequis
Vous devez disposer de l’autorisation d’administrateur sur le cluster Kubernetes sur lequel vous activez la vigie applicative.
Vous devez avoir installé AWS CLI sur l’environnement sur lequel votre cluster Kubernetes est exécuté. Pour plus d’informations sur l’installation d’AWS CLI, veuillez consulter la section Installation ou mise à jour de la version la plus récente d’AWS CLI.
Vous devez avoir installé kubectl et helm sur votre terminal local. Pour plus d’informations, consultez la documentation kubectl
et Helm .
É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 : installer l’opérateur d’agent CloudWatch dans votre cluster
L’installation de l’opérateur d’agent CloudWatch installe l’opérateur, l’agent CloudWatch et d’autres instruments automatiques dans votre cluster. Pour ce faire, entrez la commande suivante. Remplacez $REGION par votre région AWS. Remplacez $YOUR_CLUSTER_NAME par le nom que vous voulez voir apparaître pour votre cluster dans les tableaux de bord de la vigie applicative.
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, consultez amazon-cloudwatch-observability
Étape 3 : configurer les informations d’identification AWS 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.
Si votre cluster Kubernetes est hébergé sur site, vous devez suivre les instructions de cette section pour ajouter les informations d’identification AWS à votre environnement Kubernetes.
Pour configurer les autorisations pour un cluster Kubernetes sur site
Créer l’utilisateur IAM destiné à fournir les autorisations à votre hôte sur site :
Ouvrez la console IAM à l’adresse https://console.aws.amazon.com/iam/
. Sélectionnez Utilisateurs, Créer un utilisateur.
Dans Détails de l’utilisateur, pour Nom d’utilisateur, saisissez un nom pour le nouvel utilisateur IAM. Ce sera le nom de connexion AWS utilisé pour authentifier votre hôte. Ensuite, sélectionnez Next
Sur la page Définir les autorisations, pour les Options des autorisations, sélectionnez Attacher directement les politiques.
Dans la liste Politiques des autorisations, sélectionnez la politique CloudWatchAgentServerPolicy à ajouter à votre utilisateur. Ensuite, sélectionnez Suivant.
Sur la page Vérifier et créer, vérifiez le nom d’utilisateur et la présence de CloudWatchAgentServerPolicy dans le Récapitulatif des autorisations.
Sélectionnez Créer un utilisateur
Créez et extrayez votre clé d’accès AWS et votre clé secrète :
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.
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.
Pour Créer une clé d’accès – Étape 1, sélectionnez Interface de ligne de commande (CLI).
Pour Créer une clé d’accès – Étape 2, ajoutez éventuellement une balise puis cliquez sur Suivant.
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.
Sélectionnez Exécuté.
Configurez vos informations d’identification AWS sur votre hôte sur site en saisissant la commande suivante. Remplacez
ACCESS_KEY_IDetSECRET_ACCESS_IDpar 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_IDAWS Secret Access Key [None]:SECRET_ACCESS_IDDefault region name [None]:MY_REGIONDefault output format [None]: jsonModifiez la ressource personnalisée que l’agent CloudWatch a installée à l’aide des Charts de Helm pour ajouter le secret d’informations d’identification AWS nouvellement créé.
kubectl edit amazoncloudwatchagent cloudwatch-agent -n amazon-cloudwatchLorsque votre éditeur de fichiers est ouvert, montez les informations d’identification AWS dans le conteneur de l’agent CloudWatch en ajoutant la configuration suivante en haut du déploiement. Remplacez le chemin
/home/par l’emplacement de votre fichier d’informations d’identification AWS local.user/.aws/credentialsapiVersion: 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.
L’étape suivante consiste à instrumenter votre application pour la vigie applicative CloudWatch en ajoutant une annotation
Pour ajouter les annotations pour la vigie applicative
-
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.
Pour annoter une seule charge de travail, entrez l’une des commandes suivantes. Remplacez
$WORKLOAD_TYPEet$WORKLOAD_NAMEpar les valeurs de 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, consultez L’application Python ne démarre pas après l’activation de la vigie applicative.
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"}}}}}'
-
Pour annoter toutes les charges de travail d’un espace de noms, veuillez saisir l’une des commandes suivantes. Remplacez
$NAMESPACEpar 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$NAMESPACEinstrumentation.opentelemetry.io/inject-java=truePour les charges de travail Python dans l’espace de noms :
kubectl annotate ns$NAMESPACEinstrumentation.opentelemetry.io/inject-python=truePour 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 dans l’espace de noms :
kubectl annotate ns$NAMESPACEinstrumentation.opentelemetry.io/inject-dotnet=true -
Pour les charges de travail Node.js dans l’espace de noms :
kubectl annotate ns$NAMESPACEinstrumentation.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 Une fois les étapes précédentes terminées, dans la console CloudWatch, sélectionnez Vigie applicative, 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.
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 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
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.0Ajoutez 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"]Ajoutez les variables d’environnement
OTEL_RESOURCE_ATTRIBUTES_POD_NAME,OTEL_RESOURCE_ATTRIBUTES_NODE_NAME,OTEL_RESOURCE_ATTRIBUTES_DEPLOYMENT_NAME,POD_NAMESPACEetOTEL_RESOURCE_ATTRIBUTESau 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)"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, consultez Surveillez l’état de fonctionnement de vos applications avec Application Signals.