Déploiement de l' CloudWatch agent pour collecter des métriques EC2 au niveau de l'instance sur Amazon ECS - 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éploiement de l' CloudWatch agent pour collecter des métriques EC2 au niveau de l'instance sur Amazon ECS

Pour déployer l' CloudWatch agent afin de collecter des métriques au niveau de l'instance à partir de ECS clusters Amazon hébergés sur EC2 instance, utilisez une configuration de démarrage rapide avec une configuration par défaut ou installez l'agent manuellement pour pouvoir le personnaliser.

Les deux méthodes nécessitent que vous ayez déjà déployé au moins un ECS cluster Amazon avec un type de EC2 lancement et que le conteneur de l' CloudWatch agent ait accès au service de métadonnées d'EC2instance Amazon (IMDS). Pour plus d'informationsIMDS, consultez la section Métadonnées de l'instance et données utilisateur.

Ces méthodes supposent également que vous avez AWS CLI installé le. En outre, pour exécuter les commandes décrites dans les procédures suivantes, vous devez être connecté à un compte ou à un rôle soumis aux FullAccess politiques IAMFullAccesset Amazon ECS _.

Configuration rapide à l'aide de AWS CloudFormation

Pour utiliser la configuration rapide, entrez la commande suivante à utiliser AWS CloudFormation pour installer l'agent. Remplacez cluster-name and cluster-region avec le nom et la région de votre ECS cluster Amazon.

Cette commande crée les IAM rôles CWAgentECSTaskRoleet CWAgentECSExecutionRole. Si ces rôles existent déjà dans votre compte, utilisez ParameterKey=CreateIAMRoles,ParameterValue=False plutôt que ParameterKey=CreateIAMRoles,ParameterValue=True lorsque vous entrez la commande. Sinon, la commande échouera.

ClusterName=cluster-name Region=cluster-region curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cloudformation-quickstart/cwagent-ecs-instance-metric-cfn.json aws cloudformation create-stack --stack-name CWAgentECS-${ClusterName}-${Region} \ --template-body file://cwagent-ecs-instance-metric-cfn.json \ --parameters ParameterKey=ClusterName,ParameterValue=${ClusterName} \ ParameterKey=CreateIAMRoles,ParameterValue=True \ --capabilities CAPABILITY_NAMED_IAM \ --region ${Region}

(Alternative) Utiliser vos propres IAM rôles

Si vous souhaitez utiliser vos propres rôles de ECS ECS tâche et d'exécution de tâches personnalisés au lieu des CWAgentECSExecutionRolerôles CWAgentECSTaskRoleet, assurez-vous d'abord que le rôle à utiliser en tant que rôle de ECS tâche est CloudWatchAgentServerPolicyattaché. Assurez-vous également que le rôle à utiliser comme rôle d'exécution des ECS tâches est associé à la fois aux mazonECSTask ExecutionRolePolicy politiques A CloudWatchAgentServerPolicyet A. Entrez ensuite la commande suivante. Dans la commande, remplacez task-role-arn avec le rôle ARN de votre ECS tâche personnalisé, et remplacez execution-role-arn avec le rôle ARN d'exécution de ECS tâches personnalisé de votre choix.

ClusterName=cluster-name Region=cluster-region TaskRoleArn=task-role-arn ExecutionRoleArn=execution-role-arn curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cloudformation-quickstart/cwagent-ecs-instance-metric-cfn.json aws cloudformation create-stack --stack-name CWAgentECS-${ClusterName}-${Region} \ --template-body file://cwagent-ecs-instance-metric-cfn.json \ --parameters ParameterKey=ClusterName,ParameterValue=${ClusterName} \ ParameterKey=TaskRoleArn,ParameterValue=${TaskRoleArn} \ ParameterKey=ExecutionRoleArn,ParameterValue=${ExecutionRoleArn} \ --capabilities CAPABILITY_NAMED_IAM \ --region ${Region}

Dépannage de la configuration rapide

Pour vérifier l'état de la AWS CloudFormation pile, entrez la commande suivante.

ClusterName=cluster-name Region=cluster-region aws cloudformation describe-stacks --stack-name CWAgentECS-$ClusterName-$Region --region $Region

Si le StackStatus ne correspond pas à CREATE_COMPLETE ou CREATE_IN_PROGRESS, vérifiez les événements de la pile pour trouver l'erreur. Entrez la commande suivante.

ClusterName=cluster-name Region=cluster-region aws cloudformation describe-stack-events --stack-name CWAgentECS-$ClusterName-$Region --region $Region

Pour vérifier l'état du service de démon cwagent, saisissez la commande suivante. Dans la sortie, vous devriez voir que runningCount est égal à desiredCount dans la section deployment. Si elle n'est pas égale, vérifiez la section failures dans la sortie.

ClusterName=cluster-name Region=cluster-region aws ecs describe-services --services cwagent-daemon-service --cluster $ClusterName --region $Region

Vous pouvez également utiliser la console CloudWatch Logs pour consulter le journal de l'agent. Recherchez le groupe de ecs-cwagent-daemon-service journaux /ecs/.

Supprimer la AWS CloudFormation pile pour l' CloudWatch agent

Si vous devez supprimer la AWS CloudFormation pile, entrez la commande suivante.

ClusterName=cluster-name Region=cluster-region aws cloudformation delete-stack --stack-name CWAgentECS-${ClusterName}-${Region} --region ${Region}

Configuration manuelle et personnalisée

Suivez les étapes décrites dans cette section pour déployer manuellement l' CloudWatch agent afin de collecter des métriques au niveau de l'instance à partir de vos ECS clusters Amazon hébergés sur EC2 des instances.

IAMRôles et politiques nécessaires

Deux rôles IAM sont requis. Vous devez les créer s'ils n'existent pas déjà. Pour plus d'informations sur ces rôles, consultez les sections IAMrôles pour Tasks et Amazon ECS Task Execution Role.

  • Un rôle de ECS tâche, qui est utilisé par l' CloudWatch agent pour publier des métriques. Si ce rôle existe déjà, vous devez vous assurer que la politique CloudWatchAgentServerPolicy est attachée.

  • Rôle d'exécution de ECS tâches, utilisé par l'ECSagent Amazon pour lancer l' CloudWatch agent. Si ce rôle existe déjà, vous devez vous assurer que les politiques AmazonECSTaskExecutionRolePolicy et CloudWatchAgentServerPolicy sont attachées.

Si vous ne disposez pas déjà de ces rôles, vous pouvez utiliser les commandes suivantes pour les créer et joindre les politiques nécessaires. Cette première commande crée le rôle de ECS tâche.

aws iam create-role --role-name CWAgentECSTaskRole \ --assume-role-policy-document "{\"Version\": \"2012-10-17\",\"Statement\": [{\"Sid\": \"\",\"Effect\": \"Allow\",\"Principal\": {\"Service\": \"ecs-tasks.amazonaws.com\"},\"Action\": \"sts:AssumeRole\"}]}"

Après avoir saisi la commande précédente, notez que la valeur Arn de la sortie de commande est « TaskRoleArn ». Vous devrez l'utiliser plus tard lorsque vous utiliserez la définition de tâche. Ensuite, entrez la commande suivante pour joindre les politiques nécessaires.

aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --role-name CWAgentECSTaskRole

La commande suivante crée le rôle d'exécution de la ECS tâche.

aws iam create-role --role-name CWAgentECSExecutionRole \ --assume-role-policy-document "{\"Version\": \"2012-10-17\",\"Statement\": [{\"Sid\": \"\",\"Effect\": \"Allow\",\"Principal\": {\"Service\": \"ecs-tasks.amazonaws.com\"},\"Action\": \"sts:AssumeRole\"}]}"

Après avoir saisi la commande précédente, notez que la valeur Arn de la sortie de commande est « ExecutionRoleArn ». Vous devrez l'utiliser plus tard lorsque vous utiliserez la définition de tâche. Ensuite, entrez les commandes suivantes pour joindre les politiques nécessaires.

aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \ --role-name CWAgentECSExecutionRole aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy \ --role-name CWAgentECSExecutionRole

Créer la définition de tâche et lancer le service de démon

Créez une définition de tâche et utilisez-la pour lancer l' CloudWatch agent en tant que service daemon. Pour créer la définition de tâche, entrez la commande suivante. Dans les premières lignes, remplacez les espaces réservés par les valeurs réelles de votre déploiement. logs-region est la région où se trouve CloudWatch Logs, et cluster-region est la région dans laquelle se trouve votre cluster. task-role-arn est l'Arn du rôle de ECS tâche que vous utilisez, et execution-role-arn est l'Arn du rôle d'exécution de la ECS tâche.

TaskRoleArn=task-role-arn ExecutionRoleArn=execution-role-arn AWSLogsRegion=logs-region Region=cluster-region curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cwagent-ecs-instance-metric.json \ | sed "s|{{task-role-arn}}|${TaskRoleArn}|;s|{{execution-role-arn}}|${ExecutionRoleArn}|;s|{{awslogs-region}}|${AWSLogsRegion}|" \ | xargs -0 aws ecs register-task-definition --region ${Region} --cli-input-json

Ensuite, exécutez la commande suivante pour lancer le service de démon. Remplacez cluster-name and cluster-region avec le nom et la région de votre ECS cluster Amazon.

Important

Supprimez toutes les stratégies relatives aux fournisseurs de capacité avant d'exécuter cette commande. Dans le cas contraire, la commande ne fonctionnera pas.

ClusterName=cluster-name Region=cluster-region aws ecs create-service \ --cluster ${ClusterName} \ --service-name cwagent-daemon-service \ --task-definition ecs-cwagent-daemon-service \ --scheduling-strategy DAEMON \ --region ${Region}

Si vous voyez le message d'erreur An error occurred (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent, cela signifie que vous avez déjà créé un service de démon nommé cwagent-daemon-service. Vous devez d'abord supprimer ce service, en utilisant la commande suivante comme exemple.

ClusterName=cluster-name Region=cluster-region aws ecs delete-service \ --cluster ${ClusterName} \ --service cwagent-daemon-service \ --region ${Region} \ --force

(En option) Configuration avancée

Vous pouvez éventuellement l'utiliser SSM pour spécifier d'autres options de configuration pour l' CloudWatchagent dans vos ECS clusters Amazon hébergés sur EC2 des instances. Les options sont les suivantes :

  • metrics_collection_interval— Fréquence en secondes à laquelle l' CloudWatch agent collecte des métriques. La valeur par défaut est 60. La plage est comprise entre 1 et 172 000.

  • endpoint_override – (En option) Spécifie un point de terminaison différent vers lequel envoyer les journaux. Vous pouvez le faire si vous publiez à partir d'un cluster dans un VPC et que vous souhaitez que les données des journaux soient transmises à un VPC point de terminaison.

    La valeur de endpoint_override doit être une chaîne de caractères de type URL a.

  • force_flush_interval – Spécifie en secondes la durée maximale pendant laquelle les journaux demeurent dans la mémoire tampon avant d'être envoyés au serveur. Quelle que soit la configuration de ce champ, si la taille des journaux dans la mémoire tampon atteint 1 Mo, les journaux sont immédiatement envoyés au serveur. La valeur par défaut est de 5 secondes.

  • region— Par défaut, l'agent publie les métriques dans la même région que celle où se trouve l'instance de ECS conteneur Amazon. Pour remplacer cela, vous pouvez spécifier une autre région ici. Par exemple, "region" : "us-east-1"

Voici un exemple de configuration personnalisée :

{ "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "ecs": { "metrics_collection_interval": 30 } }, "force_flush_interval": 5 } }
Pour personnaliser la configuration de votre CloudWatch agent dans vos ECS conteneurs Amazon
  1. Assurez-vous que la mazonSSMRead OnlyAccess politique A est attachée à votre rôle Amazon ECS Task Execution. Vous pouvez entrer la commande suivante pour ce faire. Cet exemple suppose que votre rôle Amazon ECS Task Execution estCWAgentECSExecutionRole. Si vous utilisez un rôle différent, remplacez ce nom dans la commande suivante.

    aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess \ --role-name CWAgentECSExecutionRole
  2. Créez le fichier de configuration personnalisé similaire à l'exemple précédent. Renommez le fichier /tmp/ecs-cwagent-daemon-config.json.

  3. Exécutez la commande suivante pour placer cette configuration dans le Parameter Store. Remplacez cluster-region avec la région de votre ECS cluster Amazon. Pour exécuter cette commande, vous devez être connecté à un utilisateur ou à un rôle doté de la politique d'mazonSSMFullaccès A.

    Region=cluster-region aws ssm put-parameter \ --name "ecs-cwagent-daemon-service" \ --type "String" \ --value "`cat /tmp/ecs-cwagent-daemon-config.json`" \ --region $Region
  4. Téléchargez le fichier de définition de tâche dans un fichier local, tel que /tmp/cwagent-ecs-instance-metric.json

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/daemon-service/cwagent-ecs-instance-metric/cwagent-ecs-instance-metric.json -o /tmp/cwagent-ecs-instance-metric.json
  5. Modifiez le fichier de définition de tâche. Supprimez la section suivante :

    "environment": [ { "name": "USE_DEFAULT_CONFIG", "value": "True" } ],

    Remplacer cette section par ce qui suit :

    "secrets": [ { "name": "CW_CONFIG_CONTENT", "valueFrom": "ecs-cwagent-daemon-service" } ],
  6. Redémarrez l'agent en tant que service de démon en procédant comme suit :

    1. Exécutez la commande suivante.

      TaskRoleArn=task-role-arn ExecutionRoleArn=execution-role-arn AWSLogsRegion=logs-region Region=cluster-region cat /tmp/cwagent-ecs-instance-metric.json \ | sed "s|{{task-role-arn}}|${TaskRoleArn}|;s|{{execution-role-arn}}|${ExecutionRoleArn}|;s|{{awslogs-region}}|${AWSLogsRegion}|" \ | xargs -0 aws ecs register-task-definition --region ${Region} --cli-input-json
    2. Exécutez la commande suivante pour lancer le service de démon. Remplacez cluster-name and cluster-region avec le nom et la région de votre ECS cluster Amazon.

      ClusterName=cluster-name Region=cluster-region aws ecs create-service \ --cluster ${ClusterName} \ --service-name cwagent-daemon-service \ --task-definition ecs-cwagent-daemon-service \ --scheduling-strategy DAEMON \ --region ${Region}

      Si vous voyez le message d'erreur An error occurred (InvalidParameterException) when calling the CreateService operation: Creation of service was not idempotent, cela signifie que vous avez déjà créé un service de démon nommé cwagent-daemon-service. Vous devez d'abord supprimer ce service, en utilisant la commande suivante comme exemple.

      ClusterName=cluster-name Region=Region aws ecs delete-service \ --cluster ${ClusterName} \ --service cwagent-daemon-service \ --region ${Region} \ --force