View a markdown version of this page

Déployez OTel Container Insights avec Helm - 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.

Déployez OTel Container Insights avec Helm

Le graphique Amazon CloudWatch Observability Helm fournit une option de déploiement flexible pour OTel Container Insights. Il installe l' CloudWatch agent (OTel-based) avec le récepteur OpenTelemetry filelog pour la collecte des journaux. Le graphique Helm est maintenu à https://github.com/aws-observability/helm-charts.

Utilisez le graphique Helm lorsque vous avez besoin d'une ou de plusieurs des fonctionnalités suivantes :

  • Fine-grained contrôle de la configuration de l'agent

  • OTel-native collecte de journaux à l'aide du récepteur filelog (aucune dépendance à Fluent Bit)

  • Gestion personnalisée des certificats TLS via cert-manager

  • Non-EKS Clusters Kubernetes (ROSA, Kubernetes autogérés)

  • GitOps flux de travail avec ArgoCD ou Flux

Conditions préalables

Avant de déployer OTel Container Insights avec Helm, vérifiez que vous répondez aux exigences suivantes.

  • Un cluster Amazon EKS existant exécutant Kubernetes version 1.28 ou ultérieure

  • Helm version 3.9 ou ultérieure

  • kubectlconfiguré pour communiquer avec votre cluster cible

  • Autorisations IAM : politique CloudWatchAgentServerPolicy gérée associée au rôle d'agent

  • Un fournisseur OpenID Connect (OIDC) configuré pour les rôles IAM pour les comptes de service (IRSA)

  • Accès Internet sortant du cluster vers les points de terminaison CloudWatch

Installer le tableau Helm

Procédez comme suit pour déployer OTel Container Insights à l'aide du graphique Helm.

Étape 1 : ajouter le référentiel Helm

Ajoutez le référentiel de AWS diagrammes Observability Helm à votre configuration Helm locale.

Pour ajouter le référentiel Helm
  1. Exécutez la commande suivante pour ajouter le référentiel.

    helm repo add aws-observability \ https://aws-observability.github.io/helm-charts
  2. Mettez à jour le référentiel pour obtenir les dernières versions des graphiques.

    helm repo update

Étape 2 : création du rôle IAM

Créez un rôle IAM qui permet à l' CloudWatch agent d'envoyer des données à CloudWatch. Ce rôle utilise IRSA pour associer les autorisations IAM à un compte de service Kubernetes.

Pour créer le rôle IAM pour l'agent CloudWatch
  1. Récupérez l'URL de l'émetteur OIDC pour votre cluster. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS.

    aws eks describe-cluster \ --name cluster-name \ --query "cluster.identity.oidc.issuer" \ --output text
  2. Créez le rôle IAM avec une politique de confiance pour l'IRSA. account-idRemplacez-le par votre identifiant de AWS compte et oidc-id par l'identifiant du fournisseur OIDC de l'étape précédente (la partie suivantehttps://oidc.eks.region.amazonaws.com/id/).

    aws iam create-role \ --role-name EKS-CW-Observability-Role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::account-id:oidc-provider/oidc.eks.region.amazonaws.com/id/oidc-id" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region.amazonaws.com/id/oidc-id:sub": "system:serviceaccount:amazon-cloudwatch:cloudwatch-agent" } } }] }'
  3. Attachez la stratégie gérée par CloudWatchAgentServerPolicy au rôle.

    aws iam attach-role-policy \ --role-name EKS-CW-Observability-Role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy

Étape 3 : Installation du graphique

Installez le graphique Amazon CloudWatch Observability Helm avec OTel Container Insights activé.

Pour installer le graphique Helm
  • Exécutez la commande suivante. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS, region par votre AWS région et account-id par votre identifiant de AWS compte.

    helm install amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --create-namespace \ --set clusterName=cluster-name \ --set region=region \ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true
    Important

    Le paramètre otelContainerInsights.enabled est obligatoire. OTel Container Insights n'est pas activé par défaut.

Étape 4 : vérifier l'installation

Vérifiez que la version Helm et les modules d'agent ont été correctement déployés.

Pour vérifier l'installation de Helm
  1. Vérifiez que l'état de la version de Helm s'affichedeployed.

    helm list -n amazon-cloudwatch
  2. Vérifiez que le module opérateur est en cours d'exécution.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability
  3. Vérifiez que les modules d' CloudWatch agent sont en cours d'exécution sur tous les nœuds.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent

    Tous les modules d'agent doivent indiquer Running leur statut.

Principales options de configuration

Les tableaux suivants décrivent les principales valeurs du graphique de Helm que vous pouvez configurer. Transmettez ces valeurs à l'aide de l'--setindicateur ou d'un values.yaml fichier personnalisé.

Paramètres du cluster

Paramètre Par défaut Description
clusterName Nom du cluster Amazon EKS. Obligatoire.
region AWS Région dans laquelle le cluster s'exécute. Obligatoire.
otelContainerInsights.enabled false Active OTel Container Insights avec le récepteur de journaux de fichiers.

Journaux de conteneurs (récepteur de fichiers OTel)

Paramètre Par défaut Description
containerLogs.enabled true Active la collecte des journaux de conteneurs à l'aide du récepteur de fichiers OTel.
containerLogs.logGroupName /aws/containerinsights/cluster-name/application Le nom du groupe de CloudWatch journaux pour les journaux de conteneur.
containerLogs.logRetentionDays 7 Le nombre de jours pendant lesquels les journaux des conteneurs sont conservés dans CloudWatch Logs.

Agent (métriques)

Paramètre Par défaut Description
agent.enabled true Active l' CloudWatch agent DaemonSet pour la collecte des métriques.
agent.serviceAccount.name cloudwatch-agent Nom du compte de service Kubernetes de l'agent.
agent.resources.requests.cpu 100m La demande du processeur pour le conteneur d'agents.
agent.resources.requests.memory 128Mi Demande de mémoire pour le conteneur d'agents.
agent.resources.limits.cpu 200m Limite du processeur pour le conteneur d'agents.
agent.resources.limits.memory 256Mi Limite de mémoire pour le conteneur d'agents.

Supervision du GPU

Paramètre Par défaut Description
agent.config.logs.metrics_collected.kubernetes.enhanced_container_insights true Active les métriques Enhanced Container Insights, y compris les métriques GPU.
dcgmExporter.enabled false Active l'exportateur DCGM pour les métriques du GPU NVIDIA. Nécessite des nœuds GPU NVIDIA.
neuronMonitor.enabled false Active le moniteur Neuron pour les métriques AWS Inferentia et Trainium.

Gestion des certificats TLS

L'opérateur CloudWatch Observability a besoin de certificats TLS pour la communication par webhook. Par défaut, le graphique génère des certificats auto-signés. Vous pouvez utiliser cert-manager pour gérer automatiquement les certificats.

Self-signed certificats (par défaut)

Par défaut, le graphique Helm génère une autorité de certification autosignée et émet des certificats à partir de cette autorité de certification. Aucune configuration supplémentaire n’est requise. Le graphique fait automatiquement pivoter ces certificats lors des mises à niveau.

intégration du gestionnaire de certificats

Vous pouvez utiliser cert-manager pour automatiser l'émission et le renouvellement des certificats. Cette approche est utile lorsque votre organisation a besoin de certificats signés en externe ou d'une gestion centralisée des certificats.

Pour configurer l'intégration du gestionnaire de certificats
  1. Vérifiez que cert-manager est installé dans votre cluster.

    kubectl get pods -n cert-manager
  2. Installez le graphique Helm avec le gestionnaire de certificats activé. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS, region par votre AWS région et account-id par votre identifiant de AWS compte.

    helm install amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --create-namespace \ --set clusterName=cluster-name \ --set region=region \ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true \ --set admissionWebhooks.certManager.enabled=true

Lorsque cert-manager est activé, le graphique crée une Certificate ressource que cert-manager utilise pour émettre et gérer automatiquement le certificat TLS Webhook.

Note

Vous pouvez également utiliser cert-manager avec des émetteurs externes tels que Vault. HashiCorp Pour configurer un émetteur externe, définissez admissionWebhooks.certManager.issuerRef.name et associez l'émetteur admissionWebhooks.certManager.issuerRef.kind de votre gestionnaire de certificats.

Améliorez le graphique

Mettez à niveau le graphique de Helm pour appliquer de nouvelles valeurs de configuration ou pour passer à une version plus récente du graphique.

Pour mettre à jour le graphique de Helm
  1. Mettez à jour le référentiel Helm pour obtenir les dernières versions des graphiques.

    helm repo update
  2. Exécutez la commande de mise à niveau avec les valeurs souhaitées. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS, region par votre AWS région et account-id par votre identifiant de AWS compte.

    helm upgrade amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --set clusterName=cluster-name \ --set region=region \ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true
  3. Vérifiez que la mise à niveau s'est terminée correctement.

    helm list -n amazon-cloudwatch

    Le numéro de révision doit être incrémenté et le statut doit être affichédeployed.

Astuce

Pour éviter de perdre des valeurs de configuration lors des mises à niveau, stockez vos valeurs personnalisées dans un values.yaml fichier et transmettez-les avec l'-f values.yamlindicateur.

Désinstaller le graphique

Pour supprimer OTel Container Insights de votre cluster, désinstallez la version Helm.

Pour désinstaller le graphique Helm
  1. Exécutez la commande suivante pour désinstaller la version.

    helm uninstall amazon-cloudwatch-observability \ --namespace amazon-cloudwatch
  2. Supprimez éventuellement l'espace de noms s'il n'est plus nécessaire.

    kubectl delete namespace amazon-cloudwatch

Après avoir désinstallé le graphique Helm, le rôle IAM et la configuration du fournisseur OIDC restent dans votre AWS compte. Supprimez ces ressources séparément si elles ne sont plus nécessaires.

aws iam detach-role-policy \ --role-name EKS-CW-Observability-Role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy aws iam delete-role \ --role-name EKS-CW-Observability-Role

Vérifiez les données dans CloudWatch

Après avoir installé le graphique Helm, les données de Container Insights apparaissent dans CloudWatch un délai de 3 à 5 minutes.

Vérifiez les métriques

Pour vérifier les métriques dans CloudWatch
  1. Ouvrez la CloudWatch console à l'adresse https://console.aws.amazon.com/cloudwatch/.

  2. Dans le volet de navigation, choisissez Container Insights.

  3. Vérifiez que votre cluster apparaît dans la liste des clusters et que les métriques d'infrastructure sont renseignées.

Vérifiez les journaux

Pour vérifier que des groupes de journaux existent pour votre cluster, exécutez la commande suivante. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS.

aws logs describe-log-groups \ --log-group-name-prefix "/aws/containerinsights/cluster-name" \ --query "logGroups[].logGroupName" \ --output table

Résolution des problèmes

Suivez les instructions suivantes pour résoudre les problèmes courants lors du déploiement d'OTel Container Insights avec Helm.

Module de commande intégré CrashLoopBackOff

Symptôme : Lorsque vous exécutezkubectl get pods -n amazon-cloudwatch, le module opérateur affiche l'CrashLoopBackOffétat.

Cause : Le pod de l'opérateur ne peut pas démarrer en raison de problèmes liés au certificat TLS ou d'autorisations insuffisantes.

Solution : Procédez comme suit pour résoudre ce problème.

  1. Consultez les journaux du poste de commande pour détecter les erreurs liées aux certificats.

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability --tail=50
  2. Vérifiez que le secret TLS du webhook existe dans l'espace de noms.

    kubectl get secrets -n amazon-cloudwatch | grep webhook
  3. Si vous utilisez cert-manager, vérifiez que l'état de la Certificate ressource s'affiche. Ready

    kubectl get certificate -n amazon-cloudwatch
  4. Si le certificat est manquant ou non valide, désinstallez et réinstallez le graphique pour régénérer les certificats.

    helm uninstall amazon-cloudwatch-observability -n amazon-cloudwatch

Les pods d'agent ne sont pas planifiés sur tous les nœuds

Symptôme : L'agent DaemonSet affiche moins de pods que le nombre de nœuds de votre cluster.

Cause : la saturation des nœuds, les contraintes de ressources ou les sélecteurs de nœuds empêchent les pods d'agents de planifier sur certains nœuds.

Solution : Procédez comme suit pour résoudre ce problème.

  1. Vérifiez l' DaemonSet état des problèmes de planification.

    kubectl get daemonset -n amazon-cloudwatch cloudwatch-agent
  2. Vérifiez s'il n'y a pas de modules imprévus et consultez leurs événements.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --field-selector=status.phase!=Running
  3. Si les nœuds présentent des taches, ajoutez des tolérances aux valeurs du graphique de Helm. Par exemple, pour tolérer toutes les taches, améliorez le graphique avec l'indicateur suivant.

    helm upgrade amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --reuse-values \ --set "agent.tolerations[0].operator=Exists"
  4. Vérifiez que les modules d'agent s'exécutent désormais sur tous les nœuds.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o wide