Didacticiel pour l'ajout d'une nouvelle cible de récupération Prometheus : Memcached sur Amazon ECS
Ce didacticiel propose une présentation pratique pour récupérer les métriques Prometheus d'un exemple d'application Memcached sur un cluster Amazon ECS avec le type de lancement EC2. La cible de l'exportateur Memcached Prometheus sera automatiquement détectée par l'agent CloudWatch par découverte de service basée sur la 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 la vitesse des sites web dynamiques de base de données en mettant en cache les données et les objets dans la mémoire RAM pour réduire le nombre de fois où une source de données externe (telle qu'une base de données ou une API) doit être lue. Pour en savoir plus, consultez Qu'est-ce que Memcached ?
Le memchached_exporter/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 d'application Prometheus pour Amazon ECS, 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.
Rubriques
Définition des variables d'environnement de cluster Amazon ECS EC2
Pour définir des variables d'environnement de cluster Amazon ECS EC2
-
Installez l'interface de ligne de commande (CLI) Amazon ECS, si vous ne l'avez pas déjà fait. Pour en savoir plus, consultez Installation de l'interface de ligne de commande (CLI) Amazon ECS.
-
Définissez le nouveau nom de cluster Amazon ECS et la nouvelle région. Par exemple :
ECS_CLUSTER_NAME=ecs-ec2-memcached-tutorial AWS_DEFAULT_REGION=ca-central-1 -
(En option) Si vous ne disposez pas déjà d'un cluster Amazon ECS avec le type de lancement EC2 dans lequel vous souhaitez installer l'exemple d'application Memcached et de l'agent CloudWatch, 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_REGIONLe 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
-
Téléchargez le modèle CloudFormation 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 -
Définissez les noms de rôles IAM à 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 -
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 pile CloudFormation crée quatre ressources :
-
Un rôle de tâche ECS
-
Un rôle d'exécution de tâche ECS
-
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 conteneur à découvrir et à récupérer par l'agent CloudWatch.
Configuration de l'agent CloudWatch pour récupérer les métriques Memcached Prometheus
Pour configurer l'agent CloudWatch pour récupérer les métriques Memcached Prometheus
-
Téléchargez la dernière version du fichier
cwagent-ecs-prometheus-metric-for-awsvpc.yamlen 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 -
Ouvrez le fichier avec un éditeur de texte et trouvez la configuration complète de l'agent CloudWatch derrière la clé
valuede la sectionresource:CWAgentConfigSSMParameter.Ensuite, dans la section
ecs_service_discovery, ajoutez la configuration suivante dans la sectiontask_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$" ] }, -
Si vous avez déjà déployé l'agent CloudWatch dans le cluster Amazon ECS à l'aide de CloudFormation, vous pouvez créer un jeu de modifications en saisissant les commandes suivantes.
ECS_NETWORK_MODE=bridge CREATE_IAM_ROLES=True ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_nameECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_nameaws 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 Ouvrez la console CloudFormation, à l’adresse https://console.aws.amazon.com/cloudformation
. -
Vérifiez le jeu de modifications
memcached-scraping-supportnouvellement créé. Vous devriez voir une modification appliquée à la ressourceCWAgentConfigSSMParameter. Exécutez le jeu de modifications et redémarrez la tâche de l'agent CloudWatch 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 -
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 -
Si vous installez l'agent CloudWatch avec la collecte de métriques Prometheus pour le cluster pour la première fois, saisissez les commandes suivantes :
ECS_NETWORK_MODEE=bridge CREATE_IAM_ROLES=True ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_nameECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_nameaws 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 noms ECS/ContainerInsights/Prometheus dans CloudWatch. Vous pouvez utiliser la console CloudWatch pour afficher les métriques dans cet espace de noms.
| Nom de la métrique | Dimensions |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 tableau de bord CloudWatch pour vos métriques Prometheus Memcached.
Pour créer un tableau de bord pour les métriques Prometheus Memcached
-
Créez des variables d'environnement, en remplaçant les valeurs ci-dessous pour correspondre à votre déploiement.
DASHBOARD_NAME=your_memcached_cw_dashboard_nameECS_TASK_DEF_FAMILY=memcached-prometheus-demo-$ECS_CLUSTER_NAME-EC2-$MEMCACHED_ECS_NETWORK_MOD -
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