Tutoriel pour ajouter une nouvelle cible Prometheus Scrape : Memcached 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.

Tutoriel pour ajouter une nouvelle cible Prometheus Scrape : Memcached sur Amazon ECS

Ce didacticiel fournit une introduction pratique pour extraire les métriques Prometheus d'un exemple d'application Memcached sur un cluster Amazon ECS Amazon avec le type de lancement. EC2 La cible de l'exportateur Prometheus Memcached sera découverte automatiquement par l'agent par le biais d'une découverte de service basée sur la CloudWatch définition des tâches. ECS

Memcached est un système de mise en cache de mémoire distribuée polyvalent. Il est souvent utilisé pour accélérer les sites Web dynamiques basés sur des bases de données en mettant en cache des données et des objets afin de réduire le nombre de fois qu'une source de données externe (telle qu'une base de données ouAPI) doit RAM être lue. Pour en savoir plus, consultez Qu'est-ce que Memcached ?.

Le memchached_exporter (licence Apache 2.0) est l'un des exportateurs officiels de Prometheus. Par défaut, le memcache_exporter sert sur le port 0.0.0.0:9150 à l'adresse /metrics.

Les images Docker dans les deux référentiels Docker Hub suivants sont utilisées dans ce didacticiel :

Prérequis

Pour collecter des métriques à partir d'un exemple de charge de travail Prometheus pour ECS Amazon, vous devez exécuter Container Insights dans le cluster. Pour plus d'informations sur l'installation de Container Insights, consultez Configuration de Container Insights sur Amazon ECS.

Définissez les variables d'environnement ECS EC2 du cluster Amazon

Pour définir les variables d'environnement ECS EC2 du cluster Amazon
  1. Installez Amazon ECS CLI si ce n'est pas déjà fait. Pour plus d'informations, consultez Installation d'Amazon ECS CLI.

  2. Définissez le nouveau nom et la nouvelle région du ECS cluster Amazon. Par exemple :

    ECS_CLUSTER_NAME=ecs-ec2-memcached-tutorial AWS_DEFAULT_REGION=ca-central-1
  3. (Facultatif) Si vous ne possédez pas encore de ECS cluster Amazon avec le type de EC2 lancement dans lequel vous souhaitez installer l'exemple de charge de travail et d' CloudWatch agent Memcached, vous pouvez en créer un en saisissant la commande suivante.

    ecs-cli up --capability-iam --size 1 \ --instance-type t3.medium \ --cluster $ECS_CLUSTER_NAME \ --region $AWS_REGION

    Le résultat attendu de cette commande est le suivant :

    WARN[0000] You will not be able to SSH into your EC2 instances without a key pair. INFO[0000] Using recommended Amazon Linux 2 AMI with ECS Agent 1.44.4 and Docker version 19.03.6-ce INFO[0001] Created cluster cluster=ecs-ec2-memcached-tutorial region=ca-central-1 INFO[0002] Waiting for your cluster resources to be created... INFO[0002] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0063] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0124] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS VPC created: vpc-xxxxxxxxxxxxxxxxx Security Group created: sg-xxxxxxxxxxxxxxxxx Subnet created: subnet-xxxxxxxxxxxxxxxxx Subnet created: subnet-xxxxxxxxxxxxxxxxx Cluster creation succeeded.

Installation de l'exemple d'application Memcached

Pour installer l'exemple d'application Memcached qui expose les métriques Prometheus
  1. Téléchargez le AWS CloudFormation modèle Memcached en saisissant la commande suivante.

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_traffic/memcached/memcached-traffic-sample.yaml
  2. Définissez les noms de IAM rôles à créer pour Memcached en saisissant les commandes suivantes.

    MEMCACHED_ECS_TASK_ROLE_NAME=memcached-prometheus-demo-ecs-task-role-name MEMCACHED_ECS_EXECUTION_ROLE_NAME=memcached-prometheus-demo-ecs-execution-role-name
  3. Installez l'exemple d'application Memcached en saisissant la commande suivante. Cet exemple installe l'application dans le mode réseau host.

    MEMCACHED_ECS_NETWORK_MODE=host aws cloudformation create-stack --stack-name Memcached-Prometheus-Demo-ECS-$ECS_CLUSTER_NAME-EC2-$MEMCACHED_ECS_NETWORK_MODE \ --template-body file://memcached-traffic-sample.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=ECSNetworkMode,ParameterValue=$MEMCACHED_ECS_NETWORK_MODE \ ParameterKey=TaskRoleName,ParameterValue=$MEMCACHED_ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$MEMCACHED_ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region $AWS_REGION

La AWS CloudFormation pile crée quatre ressources :

  • Un rôle ECS de tâche

  • Un rôle d'exécution des ECS tâches

  • Une définition de tâche Memcached

  • Un service Memcached

Dans la définition de la tâche Memcached, deux conteneurs sont définis :

  • Le conteneur principal exécute une application Memcached simple et ouvre le port 11211 pour l'accès.

  • L'autre conteneur exécute le processus d'exportation Redis OSS pour exposer les métriques Prometheus sur le port 9150. Il s'agit du contenant à découvrir et à gratter par l' CloudWatch agent.

Configurer l' CloudWatch agent pour extraire les métriques Prometheus de Memcached

Pour configurer l' CloudWatch agent afin de récupérer les métriques Prometheus mises en cache par Memcached
  1. Téléchargez la dernière version du fichier cwagent-ecs-prometheus-metric-for-awsvpc.yaml en saisissant la commande suivante.

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-awsvpc.yaml
  2. Ouvrez le fichier dans un éditeur de texte et recherchez la configuration complète de l' CloudWatch agent située derrière la value clé dans la resource:CWAgentConfigSSMParameter section.

    Ensuite, dans la section ecs_service_discovery, ajoutez la configuration suivante dans la section task_definition_list.

    { "sd_job_name": "ecs-memcached", "sd_metrics_ports": "9150", "sd_task_definition_arn_pattern": ".*:task-definition/memcached-prometheus-demo.*:[0-9]+" },

    Pour la section metric_declaration, le paramètre par défaut n'autorise aucune métrique Memcached. Ajoutez la section suivante pour autoriser les métriques Memcached. Veillez à suivre le modèle d'indentation existant.

    { "source_labels": ["container_name"], "label_matcher": "memcached-exporter-.*", "dimensions": [["ClusterName", "TaskDefinitionFamily"]], "metric_selectors": [ "^memcached_current_(bytes|items|connections)$", "^memcached_items_(reclaimed|evicted)_total$", "^memcached_(written|read)_bytes_total$", "^memcached_limit_bytes$", "^memcached_commands_total$" ] }, { "source_labels": ["container_name"], "label_matcher": "memcached-exporter-.*", "dimensions": [["ClusterName", "TaskDefinitionFamily","status","command"], ["ClusterName", "TaskDefinitionFamily","command"]], "metric_selectors": [ "^memcached_commands_total$" ] },
  3. Si l' CloudWatch agent est déjà déployé dans le ECS cluster Amazon par AWS CloudFormation, vous pouvez créer un ensemble de modifications en saisissant les commandes suivantes.

    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 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 memcached-scraping-support
  4. Ouvrez la AWS CloudFormation console à l'adresse https://console.aws.amazon.com/cloudformation.

  5. Vérifiez le jeu de modifications memcached-scraping-support nouvellement créé. Vous devriez voir une modification appliquée à la ressource CWAgentConfigSSMParameter. Exécutez le changeset 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 cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \ --region $AWS_REGION
  6. Patientez environ 10 secondes, puis saisissez la commande suivante.

    aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 1 \ --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \ --region $AWS_REGION
  7. Si vous installez l' CloudWatch agent avec la collecte de métriques Prometheus pour le cluster pour la première fois, entrez les commandes suivantes :

    ECS_NETWORK_MODEE=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 aws cloudformation create-stack --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

Affichage de vos métriques Memcached

Ce didacticiel envoie les métriques suivantes à l'espace de ECS/ContainerInsights/Prometheusnoms dans CloudWatch. Vous pouvez utiliser la CloudWatch console pour voir les métriques de cet espace de noms.

Nom de la métrique Dimensions

memcached_current_items

ClusterName, TaskDefinitionFamily

memcached_current_connections

ClusterName, TaskDefinitionFamily

memcached_limit_bytes

ClusterName, TaskDefinitionFamily

memcached_current_bytes

ClusterName, TaskDefinitionFamily

memcached_written_bytes_total

ClusterName, TaskDefinitionFamily

memcached_read_bytes_total

ClusterName, TaskDefinitionFamily

memcached_items_evicted_total

ClusterName, TaskDefinitionFamily

memcached_items_reclaimed_total

ClusterName, TaskDefinitionFamily

memcached_commands_total

ClusterName, TaskDefinitionFamily

ClusterName TaskDefinitionFamily, commande

ClusterName TaskDefinitionFamily, statut, commande

Note

La valeur de la dimension command peut être : delete, get, cas, set, decr, touch, incr ou flush.

La valeur de la dimension status peut être hit, miss, ou badval.

Vous pouvez également créer un CloudWatch tableau de bord pour vos métriques Prometheus Memcached.

Pour créer un tableau de bord pour les métriques Prometheus Memcached
  1. Créez des variables d'environnement, en remplaçant les valeurs ci-dessous pour correspondre à votre déploiement.

    DASHBOARD_NAME=your_memcached_cw_dashboard_name ECS_TASK_DEF_FAMILY=memcached-prometheus-demo-$ECS_CLUSTER_NAME-EC2-$MEMCACHED_ECS_NETWORK_MOD
  2. Saisissez la commande suivante pour créer le tableau de bord.

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_cloudwatch_dashboards/memcached/cw_dashboard_memcached.json \ | sed "s/{{YOUR_AWS_REGION}}/$AWS_REGION/g" \ | sed "s/{{YOUR_CLUSTER_NAME}}/$ECS_CLUSTER_NAME/g" \ | sed "s/{{YOUR_TASK_DEF_FAMILY}}/$ECS_TASK_DEF_FAMILY/g" \ | xargs -0 aws cloudwatch put-dashboard --dashboard-name ${DASHBOARD_NAME} --region $AWS_REGION --dashboard-body