Didacticiel pour récupérer les métriques Prometheus Redis OSS sur Amazon ECS Fargate
Ce didacticiel propose une présentation pratique de l’utilisation des métriques Prometheus d’un exemple d’application Redis OSS dans un cluster Amazon ECS Fargate. La cible de l’exportateur Prometheus de Redis OSS sera automatiquement détectée par l’agent CloudWatch avec la prise en charge des métriques Prometheus basées sur les étiquettes docker du conteneur.
Redis OSS (https://redis.io/) est un magasin de structures de données open source (sous licence BSD) en mémoire, utilisé comme base de données, cache et agent de messages. Pour en savoir plus, consultez redis
redis_exportateur (sous licence MIT) est utilisé pour exposer les métriques Prometheus Redis OSS sur le port spécifié (par défaut : 0.0.0.0:9121). Pour en savoir plus, consultez redis_exporter
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 de la variable d'environnement de cluster Amazon ECS Fargate
Pour définir la variable d'environnement de cluster Amazon ECS Fargate
-
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-fargate-redis-tutorial AWS_DEFAULT_REGION=ca-central-1 -
(En option) Si vous ne disposez pas déjà d’un cluster Amazon ECS Fargate dans lequel vous souhaitez installer l’exemple de charge de travail Redis OSS et de l’agent CloudWatch, vous pouvez en créer un en saisissant la commande suivante.
ecs-cli up --capability-iam \ --cluster $ECS_CLUSTER_NAME \ --launch-type FARGATE \ --region $AWS_DEFAULT_REGIONLe résultat attendu de cette commande est le suivant :
INFO[0000] Created cluster cluster=ecs-fargate-redis-tutorial region=ca-central-1 INFO[0001] Waiting for your cluster resources to be created... INFO[0001] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS VPC created: vpc-xxxxxxxxxxxxxxxxx Subnet created: subnet-xxxxxxxxxxxxxxxxx Subnet created: subnet-xxxxxxxxxxxxxxxxx Cluster creation succeeded.
Définition des variables d'environnement réseau pour le cluster Amazon ECS Fargate
Pour définir les variables d'environnement réseau pour le cluster Amazon ECS Fargate
-
Définissez votre VPC et votre ID de sous-réseau du cluster Amazon ECS. Si vous avez créé un nouveau cluster dans la procédure précédente, ces valeurs s'affichent dans le résultat de la commande finale. Sinon, utilisez les ID du cluster existant que vous allez utiliser avec Redis.
ECS_CLUSTER_VPC=vpc-xxxxxxxxxxxxxxxxxECS_CLUSTER_SUBNET_1=subnet-xxxxxxxxxxxxxxxxxECS_CLUSTER_SUBNET_2=subnet-xxxxxxxxxxxxxxxxx -
Dans ce tutoriel, nous allons installer l’application Redis OSS et l’agent CloudWatch dans le groupe de sécurité par défaut du VPC du cluster Amazon ECS. Le groupe de sécurité par défaut autorise toutes les connexions réseau au sein du même groupe de sécurité afin que l’agent CloudWatch puisse récupérer les métriques Prometheus exposées sur les conteneurs Redis OSS. Dans un environnement de production réel, vous pouvez créer des groupes de sécurité dédiés pour l’application Redis OSS et l’agent CloudWatch et définir des autorisations personnalisées pour eux.
Saisissez la commande suivante pour obtenir l'ID du groupe de sécurité par défaut.
aws ec2 describe-security-groups \ --filters Name=vpc-id,Values=$ECS_CLUSTER_VPC \ --region $AWS_DEFAULT_REGIONEnsuite, définissez la variable de groupe de sécurité par défaut du cluster Fargate en saisissant la commande suivante, en remplaçant
my-default-security-grouppar la valeur que vous avez trouvée dans la commande précédente.ECS_CLUSTER_SECURITY_GROUP=my-default-security-group
Installer l’exemple de charge de travail Redis OSS
Pour installer l’exemple de charge de travail Redis OSS qui expose les métriques Prometheus
-
Téléchargez le modèle CloudFormation Redis OSS 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/redis/redis-traffic-sample.yaml -
Définissez les noms de rôles IAM à créer pour Redis OSS en saisissant les commandes suivantes.
REDIS_ECS_TASK_ROLE_NAME=redis-prometheus-demo-ecs-task-role-name REDIS_ECS_EXECUTION_ROLE_NAME=redis-prometheus-demo-ecs-execution-role-name -
Installez l’exemple de charge de travail Redis OSS en saisissant la commande suivante.
aws cloudformation create-stack --stack-name Redis-Prometheus-Demo-ECS-$ECS_CLUSTER_NAME-fargate-awsvpc \ --template-body file://redis-traffic-sample.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=SecurityGroupID,ParameterValue=$ECS_CLUSTER_SECURITY_GROUP \ ParameterKey=SubnetID,ParameterValue=$ECS_CLUSTER_SUBNET_1 \ ParameterKey=TaskRoleName,ParameterValue=$REDIS_ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$REDIS_ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region $AWS_DEFAULT_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 Redis OSS
-
Un service Redis OSS
Dans la définition de la tâche Redis OSS, deux conteneurs sont définis :
-
Le conteneur principal exécute une application Redis OSS simple et ouvre le port 6379 pour l’accès.
-
L’autre conteneur exécute le processus d’exportation Redis OSS pour exposer les métriques Prometheus sur le port 9121. Il s'agit du conteneur à découvrir et à récupérer par l'agent CloudWatch. L'étiquette docker suivante est définie de manière à ce que l'agent CloudWatch puisse découvrir ce conteneur en fonction de celui-ci.
ECS_PROMETHEUS_EXPORTER_PORT: 9121
Configurez l’agent CloudWatch pour qu’il récupère les métriques Prometheus Redis OSS
Pour configurer l’agent CloudWatch pour récupérer les métriques Prometheus Redis OSS
-
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_discoveryprésentée ici, la découverte de service basée surdocker_labelest activée avec les paramètres par défaut qui sont basés surECS_PROMETHEUS_EXPORTER_PORT, qui correspond à l’étiquette docker que nous avons définie dans la définition de tâche ECS Redis OSS. Nous n'avons donc pas besoin d'apporter des modifications dans cette section :ecs_service_discovery": { "sd_frequency": "1m", "sd_result_file": "/tmp/cwagent_ecs_auto_sd.yaml", * "docker_label": { },* ...Pour la section
metric_declaration, le paramètre par défaut n’autorise aucune métrique Redis OSS. Ajoutez la section suivante pour autoriser les métriques Redis OSS. Veillez à suivre le modèle d'indentation existant.{ "source_labels": ["container_name"], "label_matcher": "^redis-exporter-.*$", "dimensions": [["ClusterName","TaskDefinitionFamily"]], "metric_selectors": [ "^redis_net_(in|out)put_bytes_total$", "^redis_(expired|evicted)_keys_total$", "^redis_keyspace_(hits|misses)_total$", "^redis_memory_used_bytes$", "^redis_connected_clients$" ] }, { "source_labels": ["container_name"], "label_matcher": "^redis-exporter-.*$", "dimensions": [["ClusterName","TaskDefinitionFamily","cmd"]], "metric_selectors": [ "^redis_commands_total$" ] }, { "source_labels": ["container_name"], "label_matcher": "^redis-exporter-.*$", "dimensions": [["ClusterName","TaskDefinitionFamily","db"]], "metric_selectors": [ "^redis_db_keys$" ] }, -
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_LAUNCH_TYPE=FARGATE CREATE_IAM_ROLES=True ECS_CLUSTER_SUBNET=$ECS_CLUSTER_SUBNET_1 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-$ECS_LAUNCH_TYPE-awsvpc \ --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \ ParameterKey=ECSLaunchType,ParameterValue=$ECS_LAUNCH_TYPE \ ParameterKey=SecurityGroupID,ParameterValue=$ECS_CLUSTER_SECURITY_GROUP \ ParameterKey=SubnetID,ParameterValue=$ECS_CLUSTER_SUBNET \ ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region ${AWS_DEFAULT_REGION} \ --change-set-name redis-scraping-support Ouvrez la console CloudFormation, à l’adresse https://console.aws.amazon.com/cloudformation
. -
Vérifiez le jeu de modifications
redis-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-$ECS_LAUNCH_TYPE-awsvpc \ --region ${AWS_DEFAULT_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-$ECS_LAUNCH_TYPE-awsvpc \ --region ${AWS_DEFAULT_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_LAUNCH_TYPE=FARGATE CREATE_IAM_ROLES=True ECS_CLUSTER_SUBNET=$ECS_CLUSTER_SUBNET_1 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-$ECS_LAUNCH_TYPE-awsvpc \ --template-body file://cwagent-ecs-prometheus-metric-for-awsvpc.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \ ParameterKey=ECSLaunchType,ParameterValue=$ECS_LAUNCH_TYPE \ ParameterKey=SecurityGroupID,ParameterValue=$ECS_CLUSTER_SECURITY_GROUP \ ParameterKey=SubnetID,ParameterValue=$ECS_CLUSTER_SUBNET \ ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region ${AWS_DEFAULT_REGION}
Afficher vos métriques Redis OSS
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 |
|---|---|
|
|
ClusterName, |
|
|
ClusterName, |
|
|
ClusterName, |
|
|
ClusterName, |
|
|
ClusterName, |
|
|
ClusterName, |
|
|
ClusterName, |
|
|
ClusterName, |
|
|
|
|
|
|
Note
Les valeurs de la dimension cmd peuvent être : append, client, command, config, dbsize, flushall, get, incr, info, latency ou slowlog.
Les valeurs de la dimension db peuvent être db0 ou db15.
Vous pouvez également créer un tableau de bord CloudWatch pour vos métriques Prometheus Redis OSS.
Pour créer un tableau de bord pour les métriques Prometheus Redis OSS
-
Créez des variables d'environnement, en remplaçant les valeurs ci-dessous pour correspondre à votre déploiement.
DASHBOARD_NAME=your_cw_dashboard_nameECS_TASK_DEF_FAMILY=redis-prometheus-demo-$ECS_CLUSTER_NAME-fargate-awsvpc -
Saisissez la commande suivante pour créer le tableau de bord.
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/redis/cw_dashboard_redis.json \ | sed "s/{{YOUR_AWS_REGION}}/${REGION_NAME}/g" \ | sed "s/{{YOUR_CLUSTER_NAME}}/${CLUSTER_NAME}/g" \ | sed "s/{{YOUR_NAMESPACE}}/${NAMESPACE}/g" \