Configurer l’agent CloudWatch pour collecter les métriques du cluster - Amazon CloudWatch

Configurer l’agent CloudWatch pour collecter les métriques du cluster

Important

Si vous installez Container Insights sur un cluster Amazon EKS, nous vous recommandons d'utiliser l'add-on EKS Amazon CloudWatch Observability pour l'installation, au lieu de suivre les instructions de cette section. Pour en savoir plus et des instructions, consultez Démarrage rapide avec le module complémentaire EKS d’observabilité Amazon CloudWatch.

Pour configurer Container Insights afin de collecter des métriques, vous pouvez suivre les étapes de Configuration Quick Start pour Container Insights sur Amazon EKS et Kubernetes ou les étapes de cette section. Dans les étapes suivantes, vous allez configurer l'agent CloudWatch de façon à pouvoir collecter les métriques de vos clusters.

Si vous effectuez une installation dans un cluster Amazon EKS et que vous suivez les instructions de cette section le 6 novembre 2023 ou après cette date, vous installez Container Insights avec observabilité améliorée pour Amazon EKS dans le cluster.

Étape 1 : Créer un espace de noms pour CloudWatch

Procédez comme suit pour créer un espace de noms Kubernetes appelé amazon-cloudwatch pour CloudWatch. Vous pouvez ignorer cette étape si vous avez déjà créé cet espace de noms.

Pour créer un espace de noms pour CloudWatch
  • Entrez la commande suivante.

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml

Étape 2 : Créer un compte de service dans le cluster

Utilisez l’une des méthodes suivantes pour créer un compte de service pour l’agent CloudWatch, si vous n’en avez pas déjà un.

  • Utiliser kubectl

  • Utiliser un fichier kubeconfig

Utiliser kubectl pour l’authentification

Pour utiliser kubectl afin de créer un compte de service pour l’agent CloudWatch
  • Entrez la commande suivante.

    kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-serviceaccount.yaml

Si vous n'avez pas suivi les étapes précédentes, mais que vous disposez déjà d'un compte de service pour l'agent CloudWatch que vous souhaitez utiliser, vous devez vous assurer que ce compte possède les règles suivantes. En outre, lors des autres étapes d'installation de Container Insights, vous devez utiliser le nom de ce compte de service au lieu de cloudwatch-agent.

rules: - apiGroups: [""] resources: ["pods", "nodes", "endpoints"] verbs: ["list", "watch"] - apiGroups: [ "" ] resources: [ "services" ] verbs: [ "list", "watch" ] - apiGroups: ["apps"] resources: ["replicasets", "daemonsets", "deployments", "statefulsets"] verbs: ["list", "watch"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["list", "watch"] - apiGroups: [""] resources: ["nodes/proxy"] verbs: ["get"] - apiGroups: [""] resources: ["nodes/stats", "configmaps", "events"] verbs: ["create", "get"] - apiGroups: [""] resources: ["configmaps"] resourceNames: ["cwagent-clusterleader"] verbs: ["get","update"] - nonResourceURLs: ["/metrics"] verbs: ["get", "list", "watch"] - apiGroups: [ "discovery.k8s.io" ] resources: [ "endpointslices" ] verbs: [ "list", "watch", "get" ]

Utiliser kubeconfig pour l’authentification

Vous pouvez également utiliser un fichier kubeconfig pour l’authentification. Cette méthode vous permet de contourner la nécessité d’un compte de service en spécifiant directement le chemin d’accès kubeconfig dans la configuration de votre agent CloudWatch. Elle vous permet également de supprimer votre dépendance à l’API du plan de contrôle Kubernetes pour l’authentification, ce qui simplifie votre configuration et peut potentiellement renforcer la sécurité en gérant l’authentification via votre fichier kubeconfig.

Pour utiliser cette méthode, mettez à jour votre fichier de configuration de l’agent CloudWatch afin de spécifier le chemin d’accès à votre fichier kubeconfig, comme dans l’exemple suivant.

{ "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "YOUR_CLUSTER_NAME", "enhanced_container_insights": false, "accelerated_compute_metrics": false, "tag_service": false, "kube_config_path": "/path/to/your/kubeconfig" "host_ip": "HOSTIP" } } } }

Pour créer un fichier kubeconfig, créez une demande de signature de certificat (CSR) pour l’utilisateur admin/{create_your_own_user} avec le rôle Kubernetes system:masters. Signez ensuite avec l’autorité de certification (CA) du cluster Kubernetes et créez le fichier kubeconfig.

Étape 3 : Créer une ConfigMap pour l'agent CloudWatch

Procédez comme suit pour créer une ConfigMap pour l'agent CloudWatch.

Pour créer une ConfigMap pour l'agent CloudWatch
  1. Téléchargez le fichier YAML de ConfigMap vers votre hôte client kubectl en exécutant la commande suivante :

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-configmap-enhanced.yaml
  2. Modifiez le fichier YAML téléchargé comme suit :

    • cluster_name – Dans la section kubernetes, remplacez {{cluster_name}} par le nom de votre cluster. Supprimez les caractères {{}}. Sinon, si vous utilisez un cluster Amazon EKS, vous pouvez supprimer le champ "cluster_name" et sa valeur. Dans ce cas, l'agent CloudWatch détecte le nom du cluster à partir des balises Amazon EC2.

  3. (En option) Apportez des modifications supplémentaires à la ConfigMap en fonction de vos exigences en matière de surveillance, comme suit :

    • metrics_collection_interval – Dans la section kubernetes, vous pouvez spécifier à quelle fréquence l'agent collecte les métriques. Le durée par défaut est 60 secondes. Dans kubelet, l'intervalle de collecte par défaut (via cadvisor) est de 15 secondes, vous ne devez donc pas définir cette valeur sur moins de 15 secondes.

    • endpoint_override – Dans la section logs, vous pouvez spécifier le point de terminaison CloudWatch Logs si vous souhaitez remplacer le point de terminaison par défaut. Vous pouvez effectuer cette opération si vous publiez à partir d'un cluster dans un VPC et souhaitez que les données soient transmises à un point de terminaison d'un VPC.

    • force_flush_interval – Dans la section logs, vous pouvez spécifier l'intervalle pour les événements de journaux de traitement par lot avant qu'ils ne soient publiés sur CloudWatch Logs. Le durée par défaut est 5 secondes.

    • region – Par défaut, l'agent a publié les métriques dans la région où se trouve le composant master. Pour contourner ce problème; vous pouvez ajouter un champ region dans la section agent : par exemple, "region":"us-west-2".

    • Section statsd – Si vous souhaitez que l'agent CloudWatch Logs s'exécute également en tant que système d'écoute StatsD dans chaque composant master de votre cluster, vous pouvez ajouter une section statsd à la section metrics, comme dans l'exemple suivant. Pour plus d'informations sur les autres options StatsD pour cette section, consultez Récupération de métriques personnalisées avec StatsD.

      "metrics": { "metrics_collected": { "statsd": { "service_address":":8125" } } }

      Voici un exemple complet de la section de code JSON. Si vous utilisez un fichier kubeconfig pour l’authentification, ajoutez le paramètre kube_config_path pour spécifier le chemin d’accès à votre fichier kubeconfig.

      { "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "MyCluster", "metrics_collection_interval": 60, "kube_config_path": "/path/to/your/kubeconfig" //if using kubeconfig for authentication } }, "force_flush_interval": 5, "endpoint_override": "logs.us-east-1.amazonaws.com" }, "metrics": { "metrics_collected": { "statsd": { "service_address": ":8125" } } } }
  4. Créez la ConfigMap dans le cluster en exécutant la commande suivante.

    kubectl apply -f cwagent-configmap-enhanced.yaml

Étape 4 : Déployer l'agent CloudWatch en tant que DaemonSet

Pour finaliser l'installation de l'agent CloudWatch et commencer à collecter les métriques de conteneur, procédez comme suit.

Pour déployer l'agent CloudWatch en tant que DaemonSet
    • Si vous ne souhaitez pas utiliser StatsD sur le cluster, entrez la commande suivante.

      kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
    • Si vous souhaitez utiliser StatsD, procédez comme suit :

      1. Téléchargez le fichier YAML de DaemonSet vers votre hôte client kubectl en exécutant la commande suivante ;

        curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml
      2. Supprimez la mise en commentaire de la section port dans le fichier cwagent-daemonset.yaml comme dans l'exemple suivant :

        ports: - containerPort: 8125 hostPort: 8125 protocol: UDP
      3. Déployez l'agent CloudWatch dans votre cluster en exécutant la commande suivante.

        kubectl apply -f cwagent-daemonset.yaml
      4. Déployez l’agent CloudWatch sur les nœuds Windows de votre cluster en exécutant la commande suivante. L’écouteur StatsD n’est pas pris en charge par l’agent CloudWatch sous Windows.

        kubectl apply -f cwagent-daemonset-windows.yaml
  1. Assurez-vous que l'agent est déployé en exécutant la commande suivante.

    kubectl get pods -n amazon-cloudwatch

Une fois l'opération terminée, l'agent CloudWatch crée un groupe de journaux nommé /aws/containerinsights/Cluster_Name/performance et envoie les événements de journaux de performances à ce groupe de journaux. Si vous avez également configuré l'agent en tant que port d'écoute StatsD, l'agent écoute également les métriques StatsD sur le port 8125 avec l'adresse IP du nœud dans lequel le pod d'application est programmé.

Résolution des problèmes

Si l'agent ne se déploie pas correctement, essayez ce qui suit :

  • Exécutez la commande suivante pour obtenir la liste des pods.

    kubectl get pods -n amazon-cloudwatch
  • Exécutez la commande suivante et vérifiez les événements au bas de la sortie.

    kubectl describe pod pod-name -n amazon-cloudwatch
  • Exécutez la commande suivante pour vérifier les journaux.

    kubectl logs pod-name -n amazon-cloudwatch