Installazione del carico di lavoro di esempio del proxy inverso NGINX per cluster Amazon ECS
L'esportatore NGINX Prometheus può sottoporre a scraping ed esporre i dati NGINX come parametri Prometheus. Questo esempio utilizza l'esportatore in tandem con il servizio proxy inverso NGINX per Amazon ECS.
Per ulteriori informazioni sull'esportatore NGINX Prometheus, consulta nginx-prometheus-exporter
L'agente CloudWatch con supporto Prometheus recupera i parametri NGINX di Prometheus in base alla configurazione di individuazione del servizio nel cluster Amazon ECS. È possibile configurare NGINX dell'esportatore Prometheus per esporre i parametri su una porta o percorso diverso. Se modifichi la porta o il percorso, aggiorna la sezione ecs_service_discovery nel file di configurazione dell'agente CloudWatch.
Installazione del carico di lavoro di esempio del proxy inverso NGINX per cluster Amazon ECS
Procedi come segue per installare il carico di lavoro di esempio del proxy inverso NGINX.
Creazione delle immagini Docker
Per creare le immagini Docker per il carico di lavoro di esempio del proxy inverso NGINX
-
Scarica la seguente cartella dal repository del proxy inverso NGINX: https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/
. -
Trova la directory
appe crea un'immagine da quella directory:docker build -t web-server-app ./path-to-app-directory -
Crea un'immagine personalizzata per NGINX. Innanzitutto, crea una directory con i due file seguenti:
-
Un file Docker di esempio:
FROM nginx COPY nginx.conf /etc/nginx/nginx.conf -
Un file
nginx.conf, modificato da 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; } } }Nota
stub_statusdeve essere abilitato nella stessa porta da cuinginx-prometheus-exporterè configurato per eseguire lo scraping dei parametri. Nella nostra definizione di attività di esempio,nginx-prometheus-exporterè configurato per eseguire lo scraping dei parametri dalla porta 8080.
-
-
Crea un'immagine dai file nella tua nuova directory:
docker build -t nginx-reverse-proxy ./path-to-your-directory -
Carica le nuove immagini in un repository di immagini per utilizzarle in un secondo momento.
Creazione della definizione dell'attività per eseguire NGINX e l'app del server Web in Amazon ECS
Successivamente, imposta la definizione dell'attività.
Questa definizione dell'attività consente la raccolta e l'esportazione deli parametri Prometheus NGINX. Il container NGINX tiene traccia dell'input dall'app ed espone tali dati alla porta 8080, come impostato in nginx.conf. Il container esportatore di Prometheus NGINX esegue lo scraping di questi parametri e li invia alla porta 9113, per l'uso in CloudWatch.
Per impostare la definizione dell'attività per il carico di lavoro Amazon ECS di NGINX di esempio
-
Crea un file JSON di definizione dell'attività con il seguente contenuto. Sostituisci
your-customized-nginx-iamgecon l'URI dell'immagine per la tua immagine personalizzata di NGINX e sostituisciyour-web-server-app-imagecon l'URI dell'immagine della tua app del server 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" } -
Registra la definizione dell'attività inserendo il seguente comando.
aws ecs register-task-definition --cli-input-json file://path-to-your-task-definition-json -
Crea un servizio per eseguire l'attività inserendo il seguente comando:
Assicurati di non modificare il nome del servizio. Verrà eseguito un servizio dell'agente CloudWatch utilizzando una configurazione che ricerca le attività utilizzando i modelli di nome dei servizi che li hanno avviati. Ad esempio, affinché l'agente CloudWatch trovi l'attività avviata da questo comando, puoi specificare il valore di
sd_service_name_patternin modo che sia^nginx-service$. La sezione successiva offre ulteriori dettagli.aws ecs create-service \ --clusteryour-cluster-name\ --service-name nginx-service \ --task-definition nginx-sample-stack:1 \ --desired-count 1
Configurazione dell'agente CloudWatch per lo scraping dei parametri Prometheus NGINX
La fase finale consiste nel configurare l'agente CloudWatch per eseguire lo scraping dei parametri NGINX. In questo esempio, l'agente CloudWatch rileva l'attività tramite il modello del nome del servizio e la porta 9113, dove l'esportatore espone i parametri Prometheus per NGINX. Con l'attività rilevata e i parametri disponibili, l'agente CloudWatch inizia a pubblicare i parametri raccolti nel flusso di log nginx-prometheus-exporter.
Per configurare l'agente CloudWatch per lo scraping dei parametri NGINX
-
Scarica la versione più recente del file YAML necessario immettendo il seguente comando.
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 -
Apri il file con un editor di testo e trova la configurazione completa dell'agente CloudWatch nella chiave
valuenella sezioneresource:CWAgentConfigSSMParameter. Quindi, nella sezioneecs_service_discoveryaggiungi la seguente sezioneservice_name_list_for_tasks."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$" } ], -
Nello stesso file aggiungi la sezione seguente nella sezione
metric_declarationper consentire i parametri NGINX. Assicurati di seguire il modello di rientro esistente.{ "source_labels": ["job"], "label_matcher": ".*nginx.*", "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName"]], "metric_selectors": [ "^nginx_.*$" ] }, -
Se l'agente CloudWatch non è già stato implementato in questo cluster, passa alla fase 8.
Se l'agente CloudWatch è già implementato nel cluster Amazon ECS tramite AWS CloudFormation, puoi creare un set di modifiche inserendo i seguenti comandi:
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 Apri la console CloudFormation all'indirizzo https://console.aws.amazon.com/cloudformation
. -
Esamina il set di modifiche appena creato nginx-scraping-support. Dovresti vedere una modifica applicata alla risorsa CWAgentConfigSSMParameter. Esegui il set di modifiche e riavvia l'attività dell'agente CloudWatch inserendo il seguente comando:
aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 0 \ --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \ --region $AWS_REGION -
Attendi circa 10 secondi e inserisci il comando seguente.
aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 1 \ --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \ --region $AWS_REGION -
Se installi l'agente CloudWatch con la raccolta dei parametri Prometheus nel cluster per la prima volta, inserisci i seguenti comandi.
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
Visualizzazione dei parametri e dei log di NGINX
Ora puoi visualizzare i parametri NGINX raccolti.
Per visualizzare i parametri per il carico di lavoro NGINX
Apri la console CloudWatch all'indirizzo https://console.aws.amazon.com/cloudwatch/
. -
Nella regione in cui è in esecuzione il cluster, scegli Metrics (Parametri) nel pannello di navigazione sinistro. Trova lo spazio dei nomi ContainerInsights/Prometheus per visualizzare i parametri.
-
Per visualizzare gli eventi CloudWatch Logs, scegli Log groups (Gruppi di log) nel pannello di navigazione. Gli eventi si trovano nel gruppo di log /aws/containerinsights/
your_cluster_name/prometheus, nel flusso di lognginx-prometheus-exporter.