View a markdown version of this page

Configuration avancée pour OTel Container Insights sur Amazon EKS - 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.

Configuration avancée pour OTel Container Insights sur Amazon EKS

Cette rubrique couvre les scénarios de configuration avancés pour OTel Container Insights sur Amazon EKS. Utilisez ces configurations pour personnaliser la collecte de mesures, filtrer les journaux, collecter les données télémétriques entre les comptes, ajouter des dimensions personnalisées et ajuster l'allocation des ressources pour les grands clusters.

Conditions préalables

Avant de configurer les paramètres avancés, vérifiez que vous répondez aux exigences suivantes.

  • OTel Container Insights est installé et en ACTIVE état sur votre cluster Amazon EKS

  • Cluster Amazon EKS exécutant Kubernetes version 1.28 ou ultérieure

  • AWS CLI version 2.15.0 ou ultérieure

  • kubectlconfiguré pour communiquer avec votre cluster cible

  • Autorisations IAM : eks:UpdateAddoneks:DescribeAddon, et iam:AttachRolePolicy (requises pour la configuration entre comptes)

Modèle de configuration général

Toutes les configurations avancées suivent le même schéma. Vous transmettez une configuration JSON au amazon-cloudwatch-observability module complémentaire à l'aide de la aws eks update-addon commande.

aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values 'JSON-configuration' \ --resolve-conflicts OVERWRITE
Important

Le --resolve-conflicts OVERWRITE drapeau remplace toute configuration complémentaire existante. Pour conserver les paramètres existants, fusionnez-les avec votre nouvelle configuration avant d'exécuter la commande.

Filtrage des journaux

Vous pouvez réduire les coûts liés CloudWatch aux journaux en excluant les journaux qui répondent à des critères spécifiques. Utilisez le filtrage des journaux pour supprimer les journaux détaillés ou au niveau du débogage avant que l'agent ne les envoie à. CloudWatch

Pour configurer le filtrage des journaux
  1. Exécutez la commande suivante pour mettre à jour le module complémentaire avec une configuration de filtre de journal. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true } }, "exclude_filters": [ { "type": "log_level_filter", "log_level": "DEBUG" } ] } } } }' \ --resolve-conflicts OVERWRITE
  2. Vérifiez que l'état du module complémentaire est ACTIVE postérieur à la mise à jour.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

La exclude_filters configuration supprime les entrées de journal correspondant au niveau de journal spécifié avant que l'agent ne les envoie à CloudWatch Logs. Cela réduit le volume d'ingestion de journaux et les coûts associés.

Multi-account collection

Vous pouvez envoyer des données télémétriques depuis des comptes de charge de travail vers un compte de surveillance central en configurant l'attribution de rôles IAM entre comptes. Cette approche vous donne une vue unique des métriques et des journaux de plusieurs clusters Amazon EKS sur différents AWS comptes.

Pour configurer la collecte sur plusieurs comptes

Pour créer le rôle multi-comptes dans le compte de surveillance
  1. Dans le compte de surveillance central, créez un rôle IAM avec une politique de confiance qui permet au compte de charge de travail de l'assumer. Remplacez workload-account-id par l'ID de AWS compte du compte de charge de travail.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::workload-account-id:root" }, "Action": "sts:AssumeRole" } ] }
  2. Associez la politique CloudWatchAgentServerPolicy gérée au rôle multicompte.

Pour configurer le module complémentaire pour la livraison entre comptes
  1. Dans le compte de charge de travail, mettez à jour le module complémentaire pour qu'il assume le rôle multi-comptes. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS et monitoring-account-id par l'ID de AWS compte du compte de surveillance central.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "credentials": { "role_arn": "arn:aws:iam::monitoring-account-id:role/CrossAccountCWObservabilityRole" } } } }' \ --resolve-conflicts OVERWRITE
  2. Vérifiez que l'état du module complémentaire est ACTIVE postérieur à la mise à jour.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

Dimensions métriques personnalisées

Vous pouvez ajouter des dimensions personnalisées dérivées des étiquettes Kubernetes à vos métriques Container Insights. Les dimensions personnalisées vous permettent de filtrer et de regrouper les métriques avec une granularité plus fine, par exemple par équipe, environnement ou niveau d'application.

Pour ajouter des dimensions personnalisées à partir d'étiquettes Kubernetes
  1. Exécutez la commande suivante pour configurer des dimensions personnalisées. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS et label-key par l'étiquette Kubernetes à utiliser comme dimension.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "config": { "logs": { "metrics_collected": { "kubernetes": { "enhanced_container_insights": true, "metric_dimensions": { "custom_dimensions": ["label-key"] } } } } } } }' \ --resolve-conflicts OVERWRITE
  2. Vérifiez que l'état du module complémentaire est ACTIVE postérieur à la mise à jour.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text

Une fois la configuration prise en compte, les étiquettes Kubernetes spécifiées apparaissent sous forme de dimensions sur vos métriques Container Insights dans. CloudWatch

Optimisation des ressources pour les grands clusters

Pour les clusters de grande taille, vous devrez peut-être augmenter les limites de processeur et de mémoire de l' CloudWatchagent DaemonSet. L'allocation de ressources par défaut fonctionne bien pour les petits clusters, mais les clusters plus importants génèrent davantage de données de télémétrie et nécessitent des ressources d'agent supplémentaires.

Le tableau suivant fournit des directives de dimensionnement basées sur la taille du cluster.

Taille du cluster Demande de processeur Limite du processeur Demande de mémoire Limite de mémoire
Petit (20 nœuds ou moins) 100 m 200 m 128 milles 256 Mi
Moyen (21 à 100 nœuds) 200 m 400 m 256 Mi 512 milles
Grand (plus de 100 nœuds) 300 m 500 m 384 Mi 768 milles
Extra-large (plus de 500 nœuds) 500 m 1 000 m 512 milles 1 Gi
Pour configurer les limites de ressources de l'agent DaemonSet
  1. Exécutez la commande suivante pour définir les demandes de ressources et les limites. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS et les valeurs des ressources par les valeurs du tableau précédent.

    aws eks update-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --configuration-values '{ "otelContainerInsights": { "enabled": true }, "agent": { "resources": { "requests": { "cpu": "cpu-request", "memory": "memory-request" }, "limits": { "cpu": "cpu-limit", "memory": "memory-limit" } } } }' \ --resolve-conflicts OVERWRITE
  2. Vérifiez que le statut du module complémentaire est bien ACTIVE défini et que les modules d'agent redémarrent avec la nouvelle allocation de ressources.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.status" \ --output text
  3. Vérifiez que les pods d'agents fonctionnent avec les nouvelles limites de ressources.

    kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o jsonpath='{.items[0].spec.containers[0].resources}'

Vérifier les modifications de configuration

Après avoir appliqué une configuration avancée, vérifiez que le module complémentaire est en bon état et que les modules d'agent ont redémarré correctement.

Pour vérifier les modifications de configuration
  1. Vérifiez que l'état du module complémentaire estACTIVE. cluster-nameRemplacez-le par le nom de votre cluster Amazon EKS.

    aws eks describe-addon \ --cluster-name cluster-name \ --addon-name amazon-cloudwatch-observability \ --query "addon.{Status:status,ConfigValues:configurationValues}" \ --output table
  2. Vérifiez que les modules d'agent ont redémarré et qu'ils sont en bon Running état.

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

    Tous les modules d'agent doivent afficher un Running état indiquant une heure de redémarrage récente.

Résolution des problèmes

Suivez les instructions suivantes pour résoudre les problèmes courants liés aux configurations avancées.

Add-on la mise à jour échoue avec ConfigurationConflict

Symptôme : La aws eks update-addon commande renvoie une ConfigurationConflict erreur.

Cause : La configuration JSON que vous avez fournie est mal formée ou contient des clés non valides.

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

  1. Validez votre configuration JSON à l'aide d'un linter JSON ou en exécutant la commande suivante.

    echo 'your-json-configuration' | python3 -m json.tool
  2. Vérifiez que toutes les clés de configuration sont valides pour le amazon-cloudwatch-observability module complémentaire.

  3. Réessayez la mise à jour avec le JSON corrigé.

Cross-account les métriques n'apparaissent pas dans le compte de surveillance

Symptôme : une fois que vous avez configuré la collecte multi-comptes, les métriques n'apparaissent pas dans le compte de surveillance central.

Cause : La politique ou les autorisations de confiance relatives aux rôles IAM entre comptes sont incorrectes.

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

  1. Vérifiez que la politique de confiance du compte de surveillance autorise le compte de charge de travail à assumer le rôle.

  2. Vérifiez que la politique CloudWatchAgentServerPolicy gérée est attachée au rôle multi-comptes.

  3. Vérifiez les journaux de l'agent pour détecter AssumeRole les erreurs.

    kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=100 | grep -i "AssumeRole\|AccessDenied"
  4. Vérifiez que le rôle IAM de l'agent dans le compte de charge de travail est sts:AssumeRole autorisé à utiliser l'ARN du rôle inter-comptes.