Exemple d'application NGINX pour les clusters Amazon ECS
NGINX Prometheus Exporter peut récupérer et exposer les données NGINX en tant que métriques Prometheus. Cet exemple utilise l'exportateur conjointement au service de proxy inverse NGINX pour Amazon ECS.
Pour en savoir plus sur l'exportateur NGINX Prometheus, consultez nginx-prometheus-exporter
L'agent CloudWatch avec prise en charge de Prometheus récupère les métriques NGINX Prometheus en fonction de la configuration de découverte de service dans le cluster Amazon ECS. Vous pouvez configurer NGINX Prometheus Exporter pour qu'il expose les métriques sur un autre port ou chemin d'accès. Si vous modifiez le port ou le chemin d'accès, mettez à jour la section ecs_service_discovery dans le fichier de configuration de l'agent CloudWatch.
Installation de l'application d'exemple de proxy inverse NGINX pour les clusters Amazon ECS
Suivez ces étapes pour installer l'application d'exemple de proxy inverse NGINX.
Création des images Docker
Pour créer les images Docker pour l'application d'exemple de proxy inverse NGINX
-
Téléchargez le dossier suivant à partir du répertoire de proxy inverse NGINX : https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/
. -
Recherchez le répertoire
appet créez une image à partir de ce répertoire :docker build -t web-server-app ./path-to-app-directory -
Créez une image personnalisée pour NGINX. Pour commencer, créez un répertoire avec les deux fichiers suivants :
-
Un exemple de fichier Docker :
FROM nginx COPY nginx.conf /etc/nginx/nginx.conf -
Un fichier
nginx.conf, modifié à partir de https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/: events { worker_connections 768; } http { # Nginx will handle gzip compression of responses from the app server gzip on; gzip_proxied any; gzip_types text/plain application/json; gzip_min_length 1000; server{ listen 8080; location /stub_status { stub_status on; } } server { listen 80; # Nginx will reject anything not matching /api location /api { # Reject requests with unsupported HTTP method if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE)$) { return 405; } # Only requests matching the whitelist expectations will # get sent to the application server proxy_pass http://app:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache_bypass $http_upgrade; } } }Note
stub_statusdoit être activé sur le même port sur lequelnginx-prometheus-exporterest configuré pour récupérer les métriques. Dans notre exemple de définition de tâche,nginx-prometheus-exporterest configuré pour extraire les métriques depuis le port 8080.
-
-
Créez une image à partir des fichiers de votre nouveau répertoire :
docker build -t nginx-reverse-proxy ./path-to-your-directory -
Téléchargez vos nouvelles images dans un répertoire d'images pour une utilisation ultérieure.
Création de la définition de tâche pour exécuter NGINX et l'application serveur web dans Amazon ECS
Ensuite, vous configurez la définition de tâche.
Cette définition de tâche permet la collecte et l'exportation des métriques NGINX Prometheus. Le conteneur NGINX suit les entrées de l'application et expose ces données au port 8080, comme défini dans nginx.conf. Le conteneur NGINX Prometheus Exporter récupère ces métriques et les publie sur le port 9113, pour une utilisation dans CloudWatch.
Pour configurer la définition de tâche pour l'application Amazon ECS d'exemple NGINX
-
Créez un fichier JSON de définition de tâche avec le contenu suivant. Remplacez
your-customized-nginx-iamgepar l'URI d'image de votre image NGINX personnalisée, et remplacezyour-web-server-app-imagepar l'URI d'image de l'image de votre application de serveur web.{ "containerDefinitions": [ { "name": "nginx", "image": "your-customized-nginx-image", "memory": 256, "cpu": 256, "essential": true, "portMappings": [ { "containerPort": 80, "protocol": "tcp" } ], "links": [ "app" ] }, { "name": "app", "image": "your-web-server-app-image", "memory": 256, "cpu": 256, "essential": true }, { "name": "nginx-prometheus-exporter", "image": "docker.io/nginx/nginx-prometheus-exporter:0.8.0", "memory": 256, "cpu": 256, "essential": true, "command": [ "-nginx.scrape-uri", "http://nginx:8080/stub_status" ], "links":[ "nginx" ], "portMappings":[ { "containerPort": 9113, "protocol": "tcp" } ] } ], "networkMode": "bridge", "placementConstraints": [], "family": "nginx-sample-stack" } -
Enregistrez la définition de tâche en saisissant la commande suivante.
aws ecs register-task-definition --cli-input-json file://path-to-your-task-definition-json -
Créez un service pour exécuter la tâche en saisissant la commande suivante :
Veillez à ne pas modifier le nom du service. Nous allons exécuter un service d'agent CloudWatch à l'aide d'une configuration qui recherche les tâches utilisant les modèles de noms des services qui les ont démarrés. Par exemple, pour que l'agent CloudWatch trouve la tâche lancée par cette commande, vous pouvez spécifier la valeur
sd_service_name_patternpour qu'elle corresponde à^nginx-service$. La section suivante fournit plus de détails.aws ecs create-service \ --clusteryour-cluster-name\ --service-name nginx-service \ --task-definition nginx-sample-stack:1 \ --desired-count 1
Configuration de l'agent CloudWatch pour récupérer les métriques NGINX Prometheus
La dernière étape consiste à configurer l'agent CloudWatch pour qu'il récupère les métriques NGINX. Dans cet exemple, l'agent CloudWatch découvre la tâche via le modèle de nom de service et le port 9113, où l'exportateur expose les métriques Prometheus pour NGINX. Une fois la tâche découverte et les métriques disponibles, l'agent CloudWatch commence à publier les métriques collectées dans le flux de journaux nginx-prometheus-exporter.
Pour configurer l'agent CloudWatch pour récupérer les métriques NGINX
-
Téléchargez la dernière version du fichier YAML nécessaire 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-bridge-host.yaml -
Ouvrez le fichier avec un éditeur de texte et trouvez la configuration complète de l'agent CloudWatch dans la clé
valuede la sectionresource:CWAgentConfigSSMParameter. Ensuite, dans la sectionecs_service_discovery, ajoutez la sectionservice_name_list_for_taskssuivante."service_name_list_for_tasks": [ { "sd_job_name": "nginx-prometheus-exporter", "sd_metrics_path": "/metrics", "sd_metrics_ports": "9113", "sd_service_name_pattern": "^nginx-service$" } ], -
Dans le même fichier, ajoutez la section suivante dans la section
metric_declarationpour autoriser les métriques NGINX. Veillez à suivre le modèle d'indentation existant.{ "source_labels": ["job"], "label_matcher": ".*nginx.*", "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName"]], "metric_selectors": [ "^nginx_.*$" ] }, -
Si vous n'avez pas déjà déployé l'agent CloudWatch dans ce cluster, passez directement à l'étape 8.
Si vous avez déjà déployé l'agent CloudWatch dans le cluster Amazon ECS à l'aide de AWS CloudFormation, vous pouvez créer un jeu de modifications en saisissant les commandes suivantes :
ECS_CLUSTER_NAME=your_cluster_nameAWS_REGION=your_aws_regionECS_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 nginx-scraping-support Ouvrez la console CloudFormation, à l’adresse https://console.aws.amazon.com/cloudformation
. -
Vérifiez le jeu de modifications nginx-scraping-support nouvellement créé. Vous devriez voir une modification appliquée à la ressource CWAgentConfigSSMParameter. Exécutez le jeu de modifications et redémarrez la tâche de l'agent CloudWatch en saisissant la commande suivante :
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 sur le cluster pour la première fois, saisissez les commandes suivantes.
ECS_CLUSTER_NAME=your_cluster_nameAWS_REGION=your_aws_regionECS_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-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 des journaux et métriques NGINX
Vous pouvez maintenant afficher les métriques NGINX collectées.
Pour examiner les métriques de votre application NGINX
Ouvrez la console CloudWatch à l’adresse https://console.aws.amazon.com/cloudwatch/
. -
Dans la région où votre cluster s'exécute, choisissez Metrics (Métriques) dans le panneau de navigation de gauche. Recherchez l'espace de noms ContainerInsights/Prometheus pour afficher les métriques.
-
Pour afficher les événements CloudWatch Logs, choisissez Log groups (Groupes de journaux) dans le panneau de navigation. Les événements sont dans le groupe de journaux /aws/containerinsights/
your_cluster_name/prometheus, dans le flux de journauxnginx-prometheus-exporter.