Résolution des problèmes rencontrés avec les métriques Prometheus 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.

Résolution des problèmes rencontrés avec les métriques Prometheus sur Amazon ECS

Cette section fournit de l'aide pour résoudre les problèmes de configuration des métriques Prometheus sur les clusters Amazon ECS.

Je ne vois pas les métriques de Prometheus envoyées à Logs CloudWatch

Les métriques Prometheus doivent être ingérées sous forme d'événements de journal dans le groupe de journaux/. aws/ecs/containerinsights/cluster-name/Prometheus Si le groupe de journaux n'est pas créé ou si les métriques Prometheus ne sont pas envoyées au groupe de journaux, vous devez d'abord vérifier si les cibles Prometheus ont été correctement découvertes par l'agent. CloudWatch Vérifiez ensuite le groupe de sécurité et les paramètres d'autorisation de l' CloudWatch agent. Les étapes suivantes vous guident pour réaliser le débogage.

Étape 1 : activer le mode de débogage de CloudWatch l'agent

Tout d'abord, passez l' CloudWatch agent en mode de débogage en ajoutant les lignes en gras suivantes à votre fichier AWS CloudFormation modèle, cwagent-ecs-prometheus-metric-for-bridge-host.yaml oucwagent-ecs-prometheus-metric-for-awsvpc.yaml. Ensuite, enregistrez le fichier.

cwagentconfig.json: | { "agent": { "debug": true }, "logs": { "metrics_collected": {

Créez un nouvel ensemble de AWS CloudFormation modifications par rapport à la pile existante. Définissez les autres paramètres du changeset sur les mêmes valeurs que dans votre AWS CloudFormation pile existante. L'exemple suivant concerne un CloudWatch agent installé dans un cluster Amazon ECS en utilisant le type de EC2 lancement et le mode réseau de pont.

ECS_NETWORK_MODE=bridge CREATE_IAM_ROLES=True ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name NEW_CHANGESET_NAME=your_selected_ecs_execution_role_name aws cloudformation create-change-set --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \ --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \ ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \ ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region $AWS_REGION \ --change-set-name $NEW_CHANGESET_NAME

Accédez à la AWS CloudFormation console pour consulter le nouvel ensemble de modifications,$NEW_CHANGESET_NAME. Une modification doit être appliquée à la SSMParameter ressource CWAgentConfig. Exécutez l'ensemble de modifications et redémarrez la tâche de l' CloudWatch agent en saisissant les commandes suivantes.

aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 0 \ --service your_service_name_here \ --region $AWS_REGION

Patientez environ 10 secondes, puis saisissez la commande suivante.

aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 1 \ --service your_service_name_here \ --region $AWS_REGION

Étape 2 : vérification des journaux de découverte de service ECS

La définition de tâche ECS de l' CloudWatch agent active les journaux par défaut dans la section ci-dessous. Les journaux sont envoyés à CloudWatch Logs dans le groupe de journaux /ecs/ ecs-cwagent-prometheus.

LogConfiguration: LogDriver: awslogs Options: awslogs-create-group: 'True' awslogs-group: "/ecs/ecs-cwagent-prometheus" awslogs-region: !Ref AWS::Region awslogs-stream-prefix: !Sub 'ecs-${ECSLaunchType}-awsvpc'

Filtrez les journaux par la chaîne ECS_SD_Stats pour obtenir les métriques liées à la découverte de service ECS, comme illustré dans l'exemple suivant.

2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeContainerInstances: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeInstancesRequest: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeTaskDefinition: 2 2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeTasks: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_ListTasks: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: Exporter_DiscoveredTargetCount: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Get_EC2MetaData: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Get_TaskDefinition: 2 2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Size_ContainerInstance: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Size_TaskDefinition: 2 2020-09-1T01:53:14Z D! ECS_SD_Stats: Latency: 43.399783ms

La signification de chaque métrique pour un cycle de découverte de service ECS particulier est la suivante :

  • AWSCLI_DescribeContainerInstances— le nombre d'appels d'ECS::DescribeContainerInstancesAPI effectués.

  • AWSCLI_DescribeInstancesRequest— le nombre d'appels d'ECS::DescribeInstancesRequestAPI effectués.

  • AWSCLI_DescribeTaskDefinition— le nombre d'appels d'ECS::DescribeTaskDefinitionAPI effectués.

  • AWSCLI_DescribeTasks— le nombre d'appels d'ECS::DescribeTasksAPI effectués.

  • AWSCLI_ListTasks— le nombre d'appels d'ECS::ListTasksAPI effectués.

  • ExporterDiscoveredTargetCount— le nombre de cibles Prometheus découvertes et exportées avec succès dans le fichier de résultats cible contenu dans le conteneur.

  • LRUCache_Get_ EC2 MetaData — le nombre de fois où les métadonnées des instances de conteneur ont été extraites du cache.

  • LRUCache_Get_ TaskDefinition — le nombre de fois où les métadonnées de définition de tâche ECS ont été extraites du cache.

  • LRUCache_Size_ ContainerInstance — le nombre de métadonnées d'une instance de conteneur unique mises en cache en mémoire.

  • LRUCache_Size_ TaskDefinition — le nombre de définitions de tâches ECS uniques mises en cache en mémoire.

  • Latency – combien de temps prend le cycle de découverte de service.

Vérifiez la valeur de ExporterDiscoveredTargetCount pour voir si les cibles Prometheus découvertes correspondent à vos attentes. Si ce n'est pas le cas, les raisons possibles sont les suivantes :

  • La configuration de la découverte de service ECS peut ne pas correspondre aux paramètres de votre application. Pour la découverte de services basée sur des étiquettes docker, il est possible que l'étiquette docker nécessaire ne soit pas configurée dans l'agent CloudWatch pour les détecter automatiquement dans vos conteneurs cibles. Pour la découverte de services basée sur l'expression régulière ARN de définition de tâche ECS, le paramètre regex de l' CloudWatch agent peut ne pas correspondre à la définition de tâche de votre application.

  • Le rôle de tâche ECS de l' CloudWatch agent n'est peut-être pas autorisé à récupérer les métadonnées des tâches ECS. Vérifiez que l' CloudWatch agent dispose des autorisations de lecture seule suivantes :

    • ec2:DescribeInstances

    • ecs:ListTasks

    • ecs:DescribeContainerInstances

    • ecs:DescribeTasks

    • ecs:DescribeTaskDefinition

Étape 3 : Vérification de la connexion réseau et de la politique de rôle de tâche ECS

Si aucun événement de journal n'est toujours envoyé au groupe de CloudWatch journaux Logs cible, même si la valeur de Exporter_DiscoveredTargetCount indique que des cibles Prometheus ont été découvertes, cela peut être dû à l'un des facteurs suivants :

  • L' CloudWatch agent ne sera peut-être pas en mesure de se connecter aux ports cibles de Prometheus. Vérifiez le paramètre du groupe de sécurité sous-jacent à l' CloudWatch agent. L'adresse IP privée doit permettre à l' CloudWatch agent de se connecter aux ports de l'exportateur Prometheus.

  • Le rôle de tâche ECS de l' CloudWatch agent n'est peut-être pas doté de la politique CloudWatchAgentServerPolicygérée. Le rôle de tâche ECS de l' CloudWatchagent doit respecter cette politique pour pouvoir envoyer les métriques Prometheus sous forme d'événements de journal. Si vous avez utilisé l'exemple de AWS CloudFormation modèle pour créer automatiquement les rôles IAM, le rôle de tâche ECS et le rôle d'exécution ECS sont dotés du moindre privilège pour effectuer la surveillance Prometheus.